Streaming parser for multipart/form-data
Project description
streaming_form_data
provides a Python parser for parsing
multipart/form-data
input chunks (the most commonly used encoding when
submitting data through HTML forms).
Chunk size is determined by the API user, but currently there are no restrictions on what the chunk size should be, since the parser works byte-by-byte (which means that passing the entire input as a single chunk should also work).
The main entry point is the StreamingFormDataParser
class, which expects
a dictionary of request headers
.
The parser is fed chunks of (bytes) input, and takes action depending on what
the current byte is. In case it notices input that’s expected (input that has
been registered by calling parser.register
, it will pass on the input to
the registered Target
class which will then decide what to do with it.
In case there’s a part which is not needed, it can be associated to a
NullTarget
object and it will be discarded.
Currently the following Target
classes are included with this library.
ValueTarget
- holds the input in memoryFileTarget
- pipes the input to a file on diskSHA256Target
- computes the SHA-256 hash of the inputNullTarget
- discards the input completely
Any new targets should inherit streaming_form_data.targets.BaseTarget
and define an on_data_received
function.
Please note, that this library has only been tested with Python 3 (specifically, versions 3.3, 3.4, 3.5, and 3.6).
Installation
$ pip install streaming-form-data
In case you prefer cloning the Github repository and installing manually, please
note that master
is the development branch, so stable
is what
you should be cloning.
Usage
>>> from streaming_form_data import StreamingFormDataParser
>>> from streaming_form_data.targets import ValueTarget, FileTarget
>>>
>>> headers = {'Content-Type': 'multipart/form-data; boundary=boundary'}
>>>
>>> parser = StreamingFormDataParser(headers=headers)
>>>
>>> parser.register('name', ValueTarget())
>>> parser.register('file', FileTarget('/tmp/file.txt'))
>>>
>>> parser.data_received(chunk)
Development
To work on this package, please make sure you have a working Python 3 installation on your system.
Create a virtualenv -
python -m venv venv && source venv/bin/activate
.Git clone the repository -
git clone https://github.com/siddhantgoel/streaming-form-data
Install the packages required for development -
pip install -r requirements.dev.txt
Install this package -
pip install .
.You should now be able to run the test suite -
py.test tests/
.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for streaming_form_data-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 347ca8d3811a0b42b01f7ebea0474c17658b2eedfd71d2d304d26aac712c20c8 |
|
MD5 | 91e7949c0a5f39eb020b7139eb4c8183 |
|
BLAKE2b-256 | 74b0087e0c4437c51e21e373f578758efa845b1196f1c5e05143b21e5f7d8987 |