包装gsutil,Google Cloud Storage的命令行接口。
项目描述
gsutilwrap
gsutilwrap 包装了Google Storage的命令行接口 gsutil,以简化与Google Cloud Storage相关的部署和备份任务。它提供了一组数据操作命令,包括复制、读取、写入和哈希存储数据。
我们最初需要一些简单但仍然可以利用多线程、具有合理的进度输出并实现强大模式匹配功能的东西。由于 gsutil CLI已经提供了所有这些功能,我们决定将其包装起来。包装器添加了类型注释参数,并在PyCharm等IDE中提供代码检查和自动完成功能。
此外,由于 gsutil 缺乏将多个模式复制到多个目标的功能,我们在 gsutilwrap 中创建了此额外功能。
如果您需要在应用程序的核心部分传输到/从Google Cloud Storage的数据,我们建议您使用Google自己提供的库 google-cloud-storage。这个库在功能方面更加复杂,不会因每个操作而引起授权和启动进程的开销。然而,它缺乏模式匹配(除了匹配前缀之外),并且您必须自己管理多线程和进度输出。
用法
import pathlib
import gsutilwrap
# list
lst = gsutilwrap.ls(
'gs://some-bucket/some-path/**/*.txt')
lst = gsutilwrap.ls_many(
['gs://some-bucket/some-path/**/*.txt',
'gs://another-bucket/another-path/**/*.xml'],
multithreaded=True)
# if you need a listing with size and update time, use long_ls
entries = gsutilwrap.long_ls(
'gs://some-bucket/some-path/**/*.txt')
for entry in entries:
print("File size and update time of {}: {} {}".format(
entry.url, entry.size, entry.update_time))
# write/read text
gsutilwrap.write_text(
url='gs://some-bucket/some-path/some-file.txt',
text='some text')
text = gsutilwrap.read_text(
url='gs://some-bucket/some-path/some-file.txt')
# write/read bytes
gsutilwrap.write_bytes(
url='gs://some-bucket/some-path/some-file.bin',
data=b'x\DE\xAD\xBE\xEF')
data = gsutilwrap.read_bytes(
url='gs://some-bucket/some-path/some-file.bin')
# copy
gsutilwrap.copy(
pattern="gs://some-bucket/some-path/*.txt",
target="/some/dir")
gsutilwrap.copy_many_to_one(
patterns=[
"gs://some-bucket/some-path/*.txt",
"gs://some-bucket/some-path/*.xml"
],
target="/some/dir")
gsutilwrap.copy_many_to_many(
patterns_targets=[
("gs://some-bucket/some-path/*.txt", "/some/dir"),
("gs://some-bucket/some-path/*.xml", "/some/other/dir")
])
# stat an object
stat = gsutilwrap.stat(
url='gs://some-bucket/some-path/some-file.txt')
print("Modification time: {}".format(stat.file_mtime))
print("Size: {}".format(stat.content_length))
print("MD5: {}".format(stat.md5.hex()))
安装
创建一个虚拟环境
python3 -m venv venv3
激活它
source venv3/bin/activate
使用pip安装gsutilwrap
pip3 install gsutilwrap
确保您已安装了gsutil命令行界面:[gsutil安装](https://cloud.google.com/storage/docs/gsutil_install)
开发
检出代码库。
在代码库根目录下,创建虚拟环境
python3 -m venv venv3
激活虚拟环境
source venv3/bin/activate
安装开发依赖
pip3 install -e .[dev]
我们提供了一套实时测试。实时测试需要一个存在于Google Cloud Storage中的存储桶。您需要设置将被所有实时测试使用的URL前缀,通过环境变量TEST_GSUTILWRAP_URL_PREFIX。
请注意,实时测试将使用Google Cloud资源,您将为此付费。始终检查测试完成后没有使用任何资源,以免产生不必要的费用!
我们使用tox进行测试和打包发行版。假设虚拟环境已激活且已安装开发依赖项,请运行
tox
我们还提供了一套预提交检查,用于代码的格式化和检查。从激活的虚拟环境运行开发依赖项中进行本地运行
./precommit.py
预提交脚本还可以自动格式化代码
./precommit.py --overwrite
版本管理
我们遵循语义版本控制。版本X.Y.Z表示
X是主版本(不向后兼容),
Y是次版本(向后兼容),
Z是补丁版本(向后兼容的bug修复)。
项目详情
gsutilwrap-1.1.2.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 8c45ce8aa4b940d7e217ae6c2c6ab8488f17057d0cd82db44bdbfce3037a3f4c |
|
MD5 | 9ec8da4f258e5e3be0e00040bcb3cd03 |
|
BLAKE2b-256 | f8701f199e69236e22d2126ad8e572de29462fdd2e91f6162eddf40d00c936da |