访问posix和obs存储系统的交叉兼容api
stor的Python项目详细描述
stor为访问提供了一个交叉兼容的cli和python api 块和对象存储stor已创建,因此您可以编写一个 使用本地或远程文件的代码,而不需要 编写专门的代码来处理故障模式、重试或临时 系统不可用函数API(即stor.copytree, stor.rmtree,stor.remove,stor.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以了解有关向 斯托尔