用cython构建的美味的多部分表单数据解析器。
multifruits的Python项目详细描述
多种水果
用cython构建的美味的多部分表单数据解析器。
安装
pip install multifruits
用法
multifruits
有一个Parser
类和两个助手:extract_filename
和
parse_content_disposition
。
Parser
Parser
需要Content-Type
头值和一个处理程序,它可以
定义以下一种或多种方法:
on_body_begin()on_part_begin()on_header(name:bytes,value:bytes)on_headers_complete()on_data(data:bytes)on_part_complete()on_body_complete()
示例:
frommultifruitsimportParserclassMyHandler:defon_part_begin(self):self.part=MyPart()defon_header(self,name,value):self.part.headers[name]=valuedefon_data(self,data):self.part.write(data)handler=MyHandler()parser=Parser(handler,request.headers['Content-Type'])parser.feed_data(request.body)# You can pass chunks
助手
parse_content_disposition
获取原始的Content-Disposition
头值并返回部署类型
(attachment
、form-data
、inline
等等)以及解析为
字典。
示例:
dtype,params=parse_content_disposition(b'inline; filename="foo.html"')assertdtype==b'inline'assertparams=={b'filename':b'foo.html'}
extract_filename
将parse_content_disposition
中的参数作为dict并尝试
返回适当的str
文件名(如filename*
)。
示例:
assertextract_filename({b'filename*':"UTF-8''foo-ä-€.html".encode()})=='foo-ä-€.html'
从源构建
您需要安装有cython的virtualenv,然后:
git clone https://github.com/pyrates/multifruits
cd multifruits
make compile
python setup.py develop
测试
运行测试:
make test
致谢
- https://github.com/iafonov/multipart-parser-c/
- https://github.com/francoiscolas/multipart-parser/
- https://github.com/felixge/node-formidable/