跳转到主要内容

包装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 (11.5 kB 查看散列)

上传时间

由以下机构支持