访问posix和obs存储系统的交叉兼容api

stor的Python项目详细描述


Build Status

stor为访问提供了一个交叉兼容的cli和python api 块和对象存储stor已创建,因此您可以编写一个 使用本地或远程文件的代码,而不需要 编写专门的代码来处理故障模式、重试或临时 系统不可用函数API(即stor.copytreestor.rmtreestor.removestor.listdir)将使用 所有存储后端的语义相同这使得 使用文件在本地开发/测试代码,然后利用健壮性 而且当你推到遥控器上时,物品的存储也更便宜

查看位于https://counsyl.github.io/stor/的stor的完整文档

快速启动

pip install stor

stor为操作posix提供了cli和python库 以及具有单一、交叉兼容api的obs。

快速启动-cli

usage: stor [-h] [-c CONFIG_FILE] [--version]
            {list,ls,cp,rm,walkfiles,cat,cd,pwd,clear,url,convert-swiftstack}
            ...

A command line interface for stor.

positional arguments:
  {list,ls,cp,rm,walkfiles,cat,cd,pwd,clear,url,convert-swiftstack}
    list                List contents using the path as a prefix.
    ls                  List path as a directory.
    cp                  Copy a source to a destination path.
    rm                  Remove file at a path.
    walkfiles           List all files under a path that match an optional
                        pattern.
    cat                 Output file contents to stdout.
    cd                  Change directory to a given OBS path.
    pwd                 Get the present working directory of a service or all
                        current directories.
    clear               Clear current directories of a specified service.
    url                 generate URI for path
    convert-swiftstack  convert swiftstack paths

optional arguments:
  -h, --help            show this help message and exit
  -c CONFIG_FILE, --config CONFIG_FILE
                        File containing configuration settings.
  --version             Print version

您可以ls本地和远程目录

›› stor ls s3://stor-test-bucket
s3://stor-test-bucket/b.txt
s3://stor-test-bucket/counsyl-storage-utils
s3://stor-test-bucket/file_test.txt
s3://stor-test-bucket/counsyl-storage-utils/
s3://stor-test-bucket/empty/
s3://stor-test-bucket/lots_of_files/
s3://stor-test-bucket/small_test/

本地或远程复制文件或从stdin上载文件

›› echo "HELLO WORLD" | stor cp - swift://AUTH_stor_test/hello_world.txt
starting upload of 1 objects
upload complete - 1/1   0:00:00 0.00 MB 0.00 MB/s
›› stor cat swift://AUTH_stor_test/hello_world.txt
HELLO WORLD
›› stor cp swift://AUTH_stor_test/hello_world.txt hello_world.txt
›› stor cat hello_world.txt
HELLO WORLD

快速启动-python

在目录中列出文件,利用分隔符

>>>stor.listdir('s3://bestbucket')[S3Path('s3://bestbucket/a/')S3Path('s3://bestbucket/b/')]

列出存储桶中的所有对象

>>>stor.list('s3://bestbucket')[S3Path('s3://bestbucket/a/1.txt')S3Path('s3://bestbucket/a/2.txt')S3Path('s3://bestbucket/a/3.txt')S3Path('s3://bestbucket/b/1.txt')]

或在本地路径中

>>>stor.list('stor')[PosixPath('stor/__init__.py'),PosixPath('stor/exceptions.pyc'),PosixPath('stor/tests/test_s3.py'),PosixPath('stor/tests/test_swift.py'),PosixPath('stor/tests/test_integration_swift.py'),PosixPath('stor/tests/test_utils.py'),PosixPath('stor/posix.pyc'),PosixPath('stor/base.py'),

使用python文件对象从posix或obs读写文件。

importstorwithstor.open('/my/exciting.json')asfp:data1=json.load(fp)data1['read']=Truewithstor.open('s3://bestbucket/exciting.json')asfp:json.dump(data1,fp)

使用stor的测试代码

stor的关键设计考虑是您的代码应该 能够透明地使用POSIX或任何对象存储系统来读取和 更新文件所以,与其使用mock,我们建议您构造 您的测试代码指向本地文件系统路径并限制您自己 到功能性api。例如,在prod设置中,可以设置 DATADIR = 's3://bestbucketever'测试时,可以使用 DATADIR = '/somewhat/cool/path/to/test/data',而您的实际代码 只是说:

withstor.open(stor.join(DATADIR,experiment))asfp:data=json.load(fp)

别紧张!不需要模仿

运行测试

make test

贡献和语义版本控制

当我们对 图书馆。请参阅contribution.md以了解有关向 斯托尔

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

推荐PyPI第三方库


热门话题
由于java的原因,maven无法运行代码。lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge   Android项目中的java Creative SDK图像编辑器UI   java如何在Android Studio中使用DataOutputStream上传文件并将其他参数传递到web服务器   java倒计时服务打开时崩溃   java将RubyonRails项目转换为JRubyonRails项目   java我的图库意图是不显示图像?为什么?   java如何在春季启动时跳过mongodb/   java@Autowired在Spring中是如何实现的   甲骨文Akka java。util。同时发生的timeoutexception线程池频繁超时   java maven依赖项对spring启动应用程序有何影响?   java Firestore执行复合查询,未截获事件“已修改”   java ItemStreamException:未能初始化读取器,原因是:IllegalStateException:流已初始化。重新开放前关闭   java将空标记解组到集合的新实例中   使用AspectJ的java新手:无法调用aspect   java查找棋类游戏的所有组合   你为什么要这样做and==与Java中的equals方法不一样吗?   如何对使用JavaUUID的代码进行单元测试?