用于Google云存储的Python客户端
gcloud-rest-storage的Python项目详细描述
This is a shared codebase for ^{tt1}$ and ^{tt1}$
安装
$ pip install --upgrade gcloud-{aio,rest}-storage
使用
要上载文件,可以执行以下操作:
^{pr2}$请注意,有多种方法可以完成上述操作,即,。利用 如果更适合您的Bucket和Blob便利类 用例。在
当然,使用异步库的主要好处是能够 像这样并行化操作。因为gcloud-rest-storage是完整的 asyncio兼容,您可以使用任何内置asyncio方法来执行 更复杂的操作:
my_files={'/local/path/to/file.1':'path/in/gcs.1','/local/path/to/file.2':'path/in/gcs.2','/local/path/to/file.3':'different/gcs/path/filename.3',}asyncwithStorage()asclient:# Prepare all our upload datauploads=[]forlocal_name,gcs_nameinmy_files.items():withopen(local_name,mode='r')asf:uploads.append((gcs_name,f.read()))# Simultaneously upload all filesawaitasyncio.gather(*[client.upload('my-bucket-name',path,file_)forpath,file_inuploads])
您也可以参考smoke test获取更多信息和示例。在
请注意,您还可以让gcloud-rest-storage执行自己的会话 管理层,只要您给我们提示何时关闭该会话:
asyncwithStorage()asclient:# closes the client.session on leaving the context manager# ORclient=Storage()# do stuffawaitclient.close()# close the session explicitly
文件编码
在某些情况下,aiohttp需要转换从GCS返回的对象 例如,用于调试日志和其他类似的问题。内置的 await response.text()操作依赖chardet来猜测 在无法根据 文件元数据。在
不幸的是,这个操作可能非常慢,尤其是在 您可能正在处理特别大的文件。如果你注意到奇怪的延迟 问题读取结果时,可能需要设置字符编码 更明确地在GCS中,例如,通过确保设置 以; charset=utf-8为后缀的相关对象。例如, 在contentType='application/x-netcdf'文件显示延迟的情况下, 您可以改为设置contentType='application/x-netcdf;charset=utf-8。看到了吗 #172了解更多信息!在
模拟器
出于测试目的,您可能希望将gcloud-rest-storage与 本地地面军事系统模拟器。设置$STORAGE_EMULATOR_HOST环境变量 到你的模拟器地址应该足够了。在
例如,使用fsouza/fake-gcs-server,可以执行以下操作:
docker run -d -p 4443:4443 -v $PWD/my-sample-data:/data fsouza/fake-gcs-server
export STORAGE_EMULATOR_HOST='0.0.0.0:4443'
使用该环境变量集发出的任何gcloud-rest-storage请求 将查询fake-gcs-server,而不是正式的GCS API。在
注意,有些仿真系统需要禁用SSL–如果您使用 自定义http会话,您可能需要禁用SSL验证。在
贡献
请看我们的contributing guide。在
- 项目
标签: