用于将类文件作为管道流处理的库
fpipe的Python项目详细描述
F管道
fpipe是一个用于创建和运行数据操作管道的简单框架。在
当性能受到关注时,在两个步骤之间将文件缓存到磁盘上的需要就成了问题。 Unix管道非常适合解决某些问题,但是一旦事情变得过于复杂,就变得不够用了。在
例如,从远程源(例如s3/ftp/http)解包tar文件并将其存储到另一个远程存储。在
使用fPipe的一个可能的解决方案:
importboto3fromfpipe.workflowimportWorkFlowfromfpipe.genimportS3,Tarfromfpipe.fileimportS3Filefromfpipe.metaimportPathclient=boto3.client('s3')resource=boto3.resource('s3')bucket='bucket'key='source.tar'WorkFlow(S3(client,resource),Tar(),S3(client,resource,process_meta=(lambdax:Path(f"MyPrefix/{x[Path]}"),),),).compose(S3File(bucket,key)).flush()
安装
框架用python3.6及更高版本进行了测试。在
^{pr2}$简单示例
计算流的大小和md5,同时将流写入磁盘。
fromfpipe.fileimportByteFilefromfpipe.genimportLocal,Metafromfpipe.metaimportPath,Size,MD5,Streamfromfpipe.workflowimportWorkFlowworkflow=WorkFlow(Local(pass_through=True),Meta(Size,MD5))sources=[ByteFile(b'x'*10,Path('x.dat')),ByteFile(b'y'*20,Path('y.dat'))]forfileinworkflow.compose(sources):print(f'\n{"-"*46}\n')print("Path name:",file[Path])print("Stream content: ",file[Stream].read().decode('utf-8'))withopen(file[Path])asf:print("File content:",f.read())print("Stream md5:",file[MD5])print("Stream size:",file[Size])
子流程脚本示例
存储原始流,计算md5,使用cli加密,存储加密文件,计算md5,解密并存储解密的文件
fromfpipe.fileimportByteFilefromfpipe.genimportLocal,Meta,Programfromfpipe.metaimportPath,MD5fromfpipe.workflowimportWorkFlowworkflow=WorkFlow(Meta(MD5),Local(pass_through=True),Program("gpg --batch --symmetric --passphrase 'secret'"),Meta(MD5),Local(pass_through=True,process_meta=lambdax:Path(f'{x[Path]}.gpg')),Program("gpg --batch --decrypt --passphrase 'secret'"),Meta(MD5),Local(pass_through=True,process_meta=lambdax:Path(f'{x[Path]}.decrypted')))sources=(ByteFile(b'x'*10,Path('x.orig')),ByteFile(b'y'*20,Path('y.orig')))forfinworkflow.compose(sources).flush_iter():print(f'\n{"-"*46}\n')print("Original path:",f[Path,2])print("Original md5:",f[MD5,2],end='\n\n')print("Encrypted path:",f[Path,1])print("Encrypted md5:",f[MD5,1],end='\n\n')print("Decrypted path:",f[Path])print("Decrypted md5:",f[MD5])
有关更多示例,请参见单元测试
运行测试并验证pypi兼容性
要运行测试安装tox并使用pip缠绕,请转到projectroot并运行tox
# Create virtualenv python3 -m venv .venv # Activate virtualenvsource .venv/bin/activate # Run tests tox -e py37 # Build distribution python setup.py sdist bdist_wheel # Validate distribution twine check dist/*
用
贡献
该框架是功能性的,但在早期阶段,因此任何关于替代品、有用性、api设计等的反馈都将受到欢迎
版本控制
许可证
这个项目是在麻省理工学院许可下授权的-有关详细信息,请参阅LICENSE.txt文件
- 项目
标签: