用于将类文件作为管道流处理的库

fpipe的Python项目详细描述


Build StatuscodecovPyPIPyPI - Python VersionLicense: MITCodacy Badge

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设计等的反馈都将受到欢迎

CONTRIBUTING.md

版本控制

许可证

这个项目是在麻省理工学院许可下授权的-有关详细信息,请参阅LICENSE.txt文件

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

推荐PyPI第三方库


热门话题
java如何通过标记名检索多个标记中的元素以进行selenium自动化测试   java iText如何查找最后一行被拆分到下一页   java如何在hudson中的特定jdk上运行Findbugs和PMD?   如何确保java程序与java Environment 6兼容?   对形状进行分组,这样我就可以通过鼠标点击和java处理循环浏览它们   使用生成器映射对象时,java定义无效   maven Java:Struts2和IntelliJ供初学者使用   java子类不继承父类字段   java Android Grid View在Android版本kitkat上崩溃   java Hibernate从缓存返回错误的列表,即使预期的列表与缓存的列表不同   java SendGrid:模板和替换标记   用于普通生产者| Kafka流的java自定义分区器   安卓理解Java内部类中的作用域   无法从Android Studio中的非静态方法调用java非静态方法   比较两个XML响应的JavaXMLUnit   java使用keytool列出密钥   不使用Java客户端库将视频上传到YouTube数据API v3   java My While循环即使在满足条件时也不会结束   自动在外部存储字符串数据,以便以后在Java中使用