用于Google云存储的Python客户端

gcloud-rest-storage的Python项目详细描述


This is a shared codebase for ^{tt1}$ and ^{tt1}$

Latest PyPI Version (gcloud-rest-storage)Python Version Support (gcloud-rest-storage)Python Version Support (gcloud-rest-storage)

安装

$ pip install --upgrade gcloud-{aio,rest}-storage

使用

要上载文件,可以执行以下操作:

^{pr2}$

请注意,有多种方法可以完成上述操作,即,。利用 如果更适合您的BucketBlob便利类 用例。在

当然,使用异步库的主要好处是能够 像这样并行化操作。因为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。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我试图使用@OneToOne作为双向映射来映射实体,但却遇到了奇怪的异常   性能Java异步如何工作?异步方法似乎不是异步运行的   java这个代码可以更短吗   线程“main”Java中的csv Java ArrayList异常。lang.NegativeArraySizeException:28   java确定LayoutManager预布局中的显示视图   java如何在FirestorePagingAdapter中通过方法onLoadingStateChanged隐藏/显示进度条?   在Java中,如何打印一个类似于中间有“过道”的座位表的2d数组?   http Java实现字节范围服务,而不使用仅使用Java api的servlet   java无法使用命名根元素生成json   java如何在注销侦听器中获取http会话id?   数组内部输入(java)?   java如何为特殊情况提供更简单的构造函数   java在swing应用程序中显示JavaFX后台   java如何启用系统。出来在eclipse中运行Junit测试时使用println()?   如何在Java中实现Oracle用户定义的聚合函数