{ "info": { "author": "Florent Pigout", "author_email": "florent.pigout@people-doc.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python" ], "description": "================\nMultipart Reader\n================\n\n.. image:: https://travis-ci.org/novafloss/multipart-reader.svg\n :target: https://travis-ci.org/novafloss/multipart-reader\n :alt: We are under CI!!\n\n\nPermits to read a multipart content like, mixed, related, etc.\n\nThanks to the *aiohttp* project for the implementation, cf.:\nhttp://aiohttp.readthedocs.org/en/stable/multipart.html. Unfortunately lot of\npeople have not yet moved to asyncio, or do not want the full *aiohttp* stack\nto read the multipart content. \n\nHere we tried to keep all the *aiohttp* logic and coverage but the coroutines\nmechanism.\n\n\nWhat it does\n============\n\nIt reads the same way multpart/x contents. Lets say we have the following\n*multipart/related* content::\n\n >>> import json\n\n >>> from email.mime.multipart import MIMEMultipart\n >>> from email.mime.base import MIMEBase\n\n >>> multipart = MIMEMultipart('related')\n\n >>> part = MIMEBase('application', 'json')\n >>> part.set_payload(json.dumps({'foo': 'bar'}))\n >>> multipart.attach(part)\n\n >>> part = MIMEBase('application', 'octet-stream')\n >>> part.set_payload(b\"Python will save the world. I don't know how. But it will.\")\n >>> part.add_header('Content-Disposition', 'attachment', filename='python-save-the-world.txt')\n >>> multipart.attach(part)\n\nHere is how we can read it::\n\n >>> import io\n\n >>> from multipart_reader import MultipartReader\n\n >>> content = multipart.as_string().split('\\n\\n', 1)[1]\n >>> headers = dict(multipart.items())\n\n >>> stream = io.BytesIO()\n >>> stream.write(content)\n >>> stream.seek(0)\n\n >>> reader = MultipartReader(headers, stream)\n\n >>> json_part = reader.next()\n >>> json_part.json()\n {'foo': 'bar'}\n\n >>> file_part = reader.next()\n >>> file_part.read()\n \"Python will save the world. I don't know how. But it will.\"\n\n >>> file_part.filename\n 'python-save-the-world.txt'\n\nThat's it ...\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/novafloss/multipart-reader", "keywords": "multipart", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "multipart-reader", "package_url": "https://pypi.org/project/multipart-reader/", "platform": "", "project_url": "https://pypi.org/project/multipart-reader/", "project_urls": { "Homepage": "https://github.com/novafloss/multipart-reader" }, "release_url": "https://pypi.org/project/multipart-reader/0.2/", "requires_dist": null, "requires_python": "", "summary": "Multipart/* reader extracted from awsome `aiohttp` project, cf.: http://aiohttp.readthedocs.org/en/stable/multipart.html.", "version": "0.2" }, "last_serial": 3581760, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "9431f04f875e84a5dccdc754aa3fdd99", "sha256": "f198c31f4eba0cfe248da6120a7d9a63b346d5484f635843835f3a1f9f93beb2" }, "downloads": -1, "filename": "multipart_reader-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "9431f04f875e84a5dccdc754aa3fdd99", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13315, "upload_time": "2016-01-08T10:35:37", "url": "https://files.pythonhosted.org/packages/d6/09/7da450f96046f01c1bf9b9e44fc4d42324f4a0c35f2b447dac812903fd6e/multipart_reader-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e9d0deaacbc65aa563db8a6babd47f00", "sha256": "b9c7908a23ef1ca5f5080fb88563e50a9ef6592bf7f6202d313e2f3661e27ed2" }, "downloads": -1, "filename": "multipart-reader-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e9d0deaacbc65aa563db8a6babd47f00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25713, "upload_time": "2016-01-08T10:35:22", "url": "https://files.pythonhosted.org/packages/be/44/b02df165784656a892255872555771e59dcad6ff8c825addfb9b94ec8ed2/multipart-reader-0.1.0.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "8e0bcaec62410b7e9d3489c64d66d1e6", "sha256": "87a0a9c31d24200f013059d31cea4768cc07f882c8e9289ef68c382e092e52fc" }, "downloads": -1, "filename": "multipart_reader-0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "8e0bcaec62410b7e9d3489c64d66d1e6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13633, "upload_time": "2018-02-14T15:51:13", "url": "https://files.pythonhosted.org/packages/c3/2f/13ed19fddf0873d6b71d641202868e2ff9194bde48e64e5b91193c9378dc/multipart_reader-0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c8a94b8e4b951d4207c5e803d11f91b", "sha256": "7f3a73e82eb7b39d805a5aeb6267d23aa30689ec7212baa9ea70aa2fe0d04a9f" }, "downloads": -1, "filename": "multipart_reader-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8c8a94b8e4b951d4207c5e803d11f91b", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 13633, "upload_time": "2018-02-14T15:54:31", "url": "https://files.pythonhosted.org/packages/d5/76/af80dfa29ea3ce68f4ced4de6544e4cf47595de55c1f1f6693ca3717a28e/multipart_reader-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d778e0e2a643e21567d24abf1e7c874", "sha256": "6f93a9962a53c690f1cd991e54e1cbc86cddc5702dbeade475d34a2b2c7a8536" }, "downloads": -1, "filename": "multipart-reader-0.2.tar.gz", "has_sig": false, "md5_digest": "4d778e0e2a643e21567d24abf1e7c874", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15332, "upload_time": "2018-02-14T15:51:10", "url": "https://files.pythonhosted.org/packages/16/1f/49063205de98aacf13c9f4bb10dbdb9cf2cb38f460b045b328dc8dc32956/multipart-reader-0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8e0bcaec62410b7e9d3489c64d66d1e6", "sha256": "87a0a9c31d24200f013059d31cea4768cc07f882c8e9289ef68c382e092e52fc" }, "downloads": -1, "filename": "multipart_reader-0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "8e0bcaec62410b7e9d3489c64d66d1e6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13633, "upload_time": "2018-02-14T15:51:13", "url": "https://files.pythonhosted.org/packages/c3/2f/13ed19fddf0873d6b71d641202868e2ff9194bde48e64e5b91193c9378dc/multipart_reader-0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c8a94b8e4b951d4207c5e803d11f91b", "sha256": "7f3a73e82eb7b39d805a5aeb6267d23aa30689ec7212baa9ea70aa2fe0d04a9f" }, "downloads": -1, "filename": "multipart_reader-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8c8a94b8e4b951d4207c5e803d11f91b", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 13633, "upload_time": "2018-02-14T15:54:31", "url": "https://files.pythonhosted.org/packages/d5/76/af80dfa29ea3ce68f4ced4de6544e4cf47595de55c1f1f6693ca3717a28e/multipart_reader-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d778e0e2a643e21567d24abf1e7c874", "sha256": "6f93a9962a53c690f1cd991e54e1cbc86cddc5702dbeade475d34a2b2c7a8536" }, "downloads": -1, "filename": "multipart-reader-0.2.tar.gz", "has_sig": false, "md5_digest": "4d778e0e2a643e21567d24abf1e7c874", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15332, "upload_time": "2018-02-14T15:51:10", "url": "https://files.pythonhosted.org/packages/16/1f/49063205de98aacf13c9f4bb10dbdb9cf2cb38f460b045b328dc8dc32956/multipart-reader-0.2.tar.gz" } ] }