{ "info": { "author": "Samuel Colvin", "author_email": "s@muelcolvin.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP" ], "description": "pydf\n====\n\n\n|BuildStatus| |codecov| |PyPI| |license| |docker|\n\nPDF generation in python using\n`wkhtmltopdf `__.\n\nWkhtmltopdf binaries are precompiled and included in the package making\npydf easier to use, in particular this means pydf works on heroku.\n\nCurrently using **wkhtmltopdf 0.12.5 for Ubuntu 18.04 (bionic)**, requires **Python 3.6+**.\n\n**If you're not on Linux amd64:** pydf comes bundled with a wkhtmltopdf binary which will only work on Linux amd64\narchitectures. If you're on another OS or architecture your milage may vary, it is likely that you'll need to supply\nyour own wkhtmltopdf binary and point pydf towards it by setting the ``WKHTMLTOPDF_PATH`` variable.\n\nInstall\n-------\n\n.. code:: shell\n\n pip install python-pdf\n\nFor python 2 use ``pip install python-pdf==0.30.0``.\n\nBasic Usage\n-----------\n\n.. code:: python\n\n import pydf\n pdf = pydf.generate_pdf('

this is html

')\n with open('test_doc.pdf', 'wb') as f:\n f.write(pdf)\n\nAsync Usage\n-----------\n\nGeneration of lots of documents with wkhtmltopdf can be slow as wkhtmltopdf can only generate one document\nper process. To get round this pydf uses python 3's asyncio ``create_subprocess_exec`` to generate multiple pdfs\nat the same time. Thus the time taken to spin up processes doesn't slow you down.\n\n.. code:: python\n\n from pathlib import Path\n from pydf import AsyncPydf\n\n async def generate_async():\n apydf = AsyncPydf()\n\n async def gen(i):\n pdf_content = await apydf.generate_pdf('

this is html

')\n Path(f'output_{i:03}.pdf').write_bytes(pdf_content)\n\n coros = [gen(i) for i in range(50)]\n await asyncio.gather(*coros)\n\n loop = asyncio.get_event_loop()\n loop.run_until_complete(generate_async())\n\n\nSee `benchmarks/run.py `__\nfor a full example.\n\nLocally generating an entire invoice goes from 0.372s/pdf to 0.035s/pdf with the async model.\n\nDocker\n------\n\npydf is available as a docker image with a very simple http API for generating pdfs.\n\nSimple ``POST`` (or ``GET`` with data if possible) you HTML data to ``/generate.pdf``.\n\nArguments can be passed using http headers; any header starting ``pdf-`` or ``pdf_`` will\nhave that prefix removed, be converted to lower case and passed to wkhtmltopdf.\n\nFor example:\n\n.. code:: shell\n\n docker run -rm -p 8000:80 -d samuelcolvin/pydf\n curl -d '

this is html

' -H \"pdf-orientation: landscape\" http://localhost:8000/generate.pdf > created.pdf\n open \"created.pdf\"\n\nIn docker compose:\n\n.. code:: yaml\n\n services:\n pdf:\n image: samuelcolvin/pydf\n\nOther services can then generate PDFs by making requests to ``pdf/generate.pdf``. Pretty cool.\n\nAPI\n---\n\n**generate\\_pdf(source, [\\*\\*kwargs])**\n\nGenerate a pdf from either a url or a html string.\n\nAfter the html and url arguments all other arguments are passed straight\nto wkhtmltopdf\n\nFor details on extra arguments see the output of get\\_help() and\nget\\_extended\\_help()\n\nAll arguments whether specified or caught with extra\\_kwargs are\nconverted to command line args with ``'--' + original_name.replace('_', '-')``.\n\nArguments which are True are passed with no value eg. just --quiet,\nFalse and None arguments are missed, everything else is passed with\nstr(value).\n\n**Arguments:**\n\n- ``source``: html string to generate pdf from or url to get\n- ``quiet``: bool\n- ``grayscale``: bool\n- ``lowquality``: bool\n- ``margin_bottom``: string eg. 10mm\n- ``margin_left``: string eg. 10mm\n- ``margin_right``: string eg. 10mm\n- ``margin_top``: string eg. 10mm\n- ``orientation``: Portrait or Landscape\n- ``page_height``: string eg. 10mm\n- ``page_width``: string eg. 10mm\n- ``page_size``: string: A4, Letter, etc.\n- ``image_dpi``: int default 600\n- ``image_quality``: int default 94\n- ``extra_kwargs``: any exotic extra options for wkhtmltopdf\n\nReturns string representing pdf\n\n**get\\_version()**\n\nGet version of pydf and wkhtmltopdf binary\n\n**get\\_help()**\n\nget help string from wkhtmltopdf binary uses -h command line option\n\n**get\\_extended\\_help()**\n\nget extended help string from wkhtmltopdf binary uses -H command line\noption\n\n**execute\\_wk(\\*args)**\n\nLow level function to call wkhtmltopdf, arguments are added to\nwkhtmltopdf binary and passed to subprocess with not processing.\n\n.. |BuildStatus| image:: https://travis-ci.org/tutorcruncher/pydf.svg?branch=master\n :target: https://travis-ci.org/tutorcruncher/pydf\n.. |codecov| image:: https://codecov.io/github/tutorcruncher/pydf/coverage.svg?branch=master\n :target: https://codecov.io/github/tutorcruncher/pydf?branch=master\n.. |PyPI| image:: https://img.shields.io/pypi/v/python-pdf.svg?style=flat\n :target: https://pypi.python.org/pypi/python-pdf\n.. |license| image:: https://img.shields.io/pypi/l/python-pdf.svg\n :target: https://github.com/tutorcruncher/pydf\n.. |docker| image:: https://img.shields.io/docker/automated/samuelcolvin/pydf.svg\n :target: https://hub.docker.com/r/samuelcolvin/pydf/\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/tutorcruncher/pydf", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "python-pdf", "package_url": "https://pypi.org/project/python-pdf/", "platform": "any", "project_url": "https://pypi.org/project/python-pdf/", "project_urls": { "Homepage": "https://github.com/tutorcruncher/pydf" }, "release_url": "https://pypi.org/project/python-pdf/0.37/", "requires_dist": null, "requires_python": "", "summary": "PDF generation in python using wkhtmltopdf suitable for heroku", "version": "0.37" }, "last_serial": 5427236, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "6e90fefc093dba18322e8732959c0fcb", "sha256": "81204d7b93075b2803d8d8ac3dbd4d0738291695407c1a7c8b64912dfb67a1ad" }, "downloads": -1, "filename": "python-pdf-0.2.tar.gz", "has_sig": false, "md5_digest": "6e90fefc093dba18322e8732959c0fcb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14644286, "upload_time": "2015-09-24T11:07:34", "url": "https://files.pythonhosted.org/packages/2b/42/2916d055b63cae5547d516e7064c5f78c3932bbb8400a425263ce015b2fd/python-pdf-0.2.tar.gz" } ], "0.21": [ { "comment_text": "", "digests": { "md5": "57ff9707e0b734ac716327f053ca0f76", "sha256": "2a79cf39a0f67983dbf4218dce5b149d3a1bcfe0ad6c2e1b51ddf1b825024dc0" }, "downloads": -1, "filename": "python-pdf-0.21.tar.gz", "has_sig": false, "md5_digest": "57ff9707e0b734ac716327f053ca0f76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14644321, "upload_time": "2015-09-28T21:00:20", "url": "https://files.pythonhosted.org/packages/7f/b0/81f100fd3b9ea2de7bc712b89a311c259cc8afec084ef0564ee57b1548d8/python-pdf-0.21.tar.gz" } ], "0.22": [ { "comment_text": "", "digests": { "md5": "c56ff3aced594410d9e6e46178950faa", "sha256": "7ddd6d1ee7d0e3d414aaabfe98fc82df83f4d8b2b2756986886d2e1c48b9459c" }, "downloads": -1, "filename": "python-pdf-0.22.tar.gz", "has_sig": false, "md5_digest": "c56ff3aced594410d9e6e46178950faa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14644312, "upload_time": "2015-10-28T18:25:52", "url": "https://files.pythonhosted.org/packages/0d/b8/73c64845e5f192291d4920a378b3fafbaf4df25b42fa351bee00b63573ae/python-pdf-0.22.tar.gz" } ], "0.23": [ { "comment_text": "", "digests": { "md5": "9f82ad12068e14e5feb9049a35a93acc", "sha256": "a9ba7275f086ac27674d8022f224fa9cd9880bca19927f8d772c7e125dcd7683" }, "downloads": -1, "filename": "python_pdf-0.23-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f82ad12068e14e5feb9049a35a93acc", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 14710513, "upload_time": "2016-01-13T15:03:03", "url": "https://files.pythonhosted.org/packages/53/a8/a746e70ad0b508353a534c1dec08846ed3c8a4c2067c68f268b96e0b6c88/python_pdf-0.23-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94620bb34fbeb326f30fa623650d574a", "sha256": "aa5ea2ecc6aa3991ed9ecafe4f79791919c7d8e82d24c67a8c3b8eb399c705ac" }, "downloads": -1, "filename": "python-pdf-0.23.tar.gz", "has_sig": false, "md5_digest": "94620bb34fbeb326f30fa623650d574a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14644357, "upload_time": "2016-01-13T15:02:47", "url": "https://files.pythonhosted.org/packages/a1/e1/c2be90da8fd8dca9639030fe824cb6219749a4108c4e0620b07c06ed2d79/python-pdf-0.23.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "5d4b2fb0401f20dd7b89c2f00f09069f", "sha256": "01433b2e9c06173f43a7c0976b65f767c203c8095873914bc8f0ea9cbc42e6ee" }, "downloads": -1, "filename": "python_pdf-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d4b2fb0401f20dd7b89c2f00f09069f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15336842, "upload_time": "2016-12-16T19:50:45", "url": "https://files.pythonhosted.org/packages/07/00/121bf37a358f797779541342e6f77ac133bfcaf8efa65001edcdd3a69e26/python_pdf-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "164c6bf315890d64e3bb430a304fd238", "sha256": "0257850b08a663586af31e79a5078d5db947403247b3a687ef5058915390291c" }, "downloads": -1, "filename": "python-pdf-0.3.tar.gz", "has_sig": false, "md5_digest": "164c6bf315890d64e3bb430a304fd238", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15265933, "upload_time": "2016-12-16T19:50:49", "url": "https://files.pythonhosted.org/packages/83/69/8eb18bd2ce48cef171ca8273e0612851623164ec0b9ccc63fa98439a012a/python-pdf-0.3.tar.gz" } ], "0.30": [ { "comment_text": "", "digests": { "md5": "eec002b86f70d3e542a2691da1990885", "sha256": "d430dd5a6ed37f2f5f43fca8ccbe5082677c8c3dbac461576480445be7161bb2" }, "downloads": -1, "filename": "python_pdf-0.30-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "eec002b86f70d3e542a2691da1990885", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15336858, "upload_time": "2016-12-19T17:21:37", "url": "https://files.pythonhosted.org/packages/dd/9e/606fd5bd18e99bdeebda1236d10286579064155dcdd3f88a8be93d034649/python_pdf-0.30-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "729e9a0dd5ed5bb3c89697678a4341ab", "sha256": "637bea809dd3a2b1eb09c26ef5b08389e29183141bbc2b14958352ed672ad1bc" }, "downloads": -1, "filename": "python-pdf-0.30.tar.gz", "has_sig": false, "md5_digest": "729e9a0dd5ed5bb3c89697678a4341ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15265923, "upload_time": "2016-12-19T17:21:41", "url": "https://files.pythonhosted.org/packages/a0/a3/68ad58d6103dd44083bbe4a6adf3518d29032d72ca74df354bd7584a9aae/python-pdf-0.30.tar.gz" } ], "0.31": [ { "comment_text": "", "digests": { "md5": "49067b569a584f8f98f0be4af21fe05f", "sha256": "3b6a90efac3cb63a351c6414f49ee076dbf4086e28988d7b9e24793c0d856956" }, "downloads": -1, "filename": "python_pdf-0.31-py36-none-any.whl", "has_sig": false, "md5_digest": "49067b569a584f8f98f0be4af21fe05f", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 15337996, "upload_time": "2017-05-23T21:58:48", "url": "https://files.pythonhosted.org/packages/06/8a/b4881314c9d474d48cb02901d297a5300650a0bb1b0ed06917284355cf95/python_pdf-0.31-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b6e1b2b4114d7d196fe472bf2959209", "sha256": "28741639bc74ccaf2fa7fc1dab768d3cf27b3c44ec3205656f348c05b976afe2" }, "downloads": -1, "filename": "python-pdf-0.31.tar.gz", "has_sig": false, "md5_digest": "7b6e1b2b4114d7d196fe472bf2959209", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15266811, "upload_time": "2017-05-23T21:58:58", "url": "https://files.pythonhosted.org/packages/ee/27/a7ab44370fef57200fcfc78973fbad716957f017ae23f3612b065c7c3cba/python-pdf-0.31.tar.gz" } ], "0.32": [ { "comment_text": "", "digests": { "md5": "1a56d31883a4f9b8fa680b48b9d76730", "sha256": "6c84a775830bbdec1adbe177711597b57fad63245153f9523c8aa3bd201005a3" }, "downloads": -1, "filename": "python_pdf-0.32-py36-none-any.whl", "has_sig": false, "md5_digest": "1a56d31883a4f9b8fa680b48b9d76730", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 15337970, "upload_time": "2017-05-24T11:34:33", "url": "https://files.pythonhosted.org/packages/62/74/9ec799eb512dd01aa2b89fd19a14cab1a06d6aac893290e12d0bcd2e6b6a/python_pdf-0.32-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "025b83d7b814002421368b1913b2895f", "sha256": "611fcea2b4f386d63ee96e465b05d01facb76d352ad7d9ec346c1ec3debc239a" }, "downloads": -1, "filename": "python-pdf-0.32.tar.gz", "has_sig": false, "md5_digest": "025b83d7b814002421368b1913b2895f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15266789, "upload_time": "2017-05-24T11:34:39", "url": "https://files.pythonhosted.org/packages/7f/15/37ce1a45bb7ef806ca384e768a6bb3742d530e64a189705bf9f9218bf161/python-pdf-0.32.tar.gz" } ], "0.33": [ { "comment_text": "", "digests": { "md5": "f4496c37972ff84f9d5eae49c6d2e4db", "sha256": "907ddd8e3baaee72492b4cc0a4df040039dfbc5c9f86339223af5128afc51f63" }, "downloads": -1, "filename": "python_pdf-0.33-py36-none-any.whl", "has_sig": false, "md5_digest": "f4496c37972ff84f9d5eae49c6d2e4db", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 15337642, "upload_time": "2017-05-24T15:34:57", "url": "https://files.pythonhosted.org/packages/06/e2/bc3cdd001569d7c334a3d757c13f026a61ddade08f1d247130ba251e3aba/python_pdf-0.33-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b646015c54001bdc56c5c3ee23750c6", "sha256": "54cc351cf11297ca698b72bfa558af41922052e99efea55b704ffb2c8b89a1e4" }, "downloads": -1, "filename": "python-pdf-0.33.tar.gz", "has_sig": false, "md5_digest": "3b646015c54001bdc56c5c3ee23750c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15266480, "upload_time": "2017-05-24T15:35:03", "url": "https://files.pythonhosted.org/packages/bb/d4/ba23747557ffc95e8b99fe599dd21e82422da263b5d69ffb6b8065a014b4/python-pdf-0.33.tar.gz" } ], "0.34": [ { "comment_text": "", "digests": { "md5": "c0a3b17958f10d369a1adb1cc37f2b3b", "sha256": "fca4f3acdde508f4b0a2519dd1e966cd71134180f96cca84dca6be3d53989945" }, "downloads": -1, "filename": "python_pdf-0.34-py36-none-any.whl", "has_sig": false, "md5_digest": "c0a3b17958f10d369a1adb1cc37f2b3b", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 15338385, "upload_time": "2017-06-06T20:55:50", "url": "https://files.pythonhosted.org/packages/9e/1e/6f7ddb1f32331a3ce91eace0f97a94d4e5d91633bb87e6073a996d297216/python_pdf-0.34-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2fc97c984be3490996dd6c6979f5feab", "sha256": "a18ac63390e4965a06cb37584c2f56cf91a89dac373f626901a400ceb2c3246b" }, "downloads": -1, "filename": "python-pdf-0.34.tar.gz", "has_sig": false, "md5_digest": "2fc97c984be3490996dd6c6979f5feab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15267003, "upload_time": "2017-06-06T20:55:55", "url": "https://files.pythonhosted.org/packages/ce/f1/a3b406dfe73f25acd904cd44abe2afcab23cfca19da6734e810095c1e8c5/python-pdf-0.34.tar.gz" } ], "0.35": [ { "comment_text": "", "digests": { "md5": "8ef9a86a1555581f15d0eadd3bb93f26", "sha256": "501abcd974c70d0924d023277b5aed4d14b37625d1b7398b7e55abfff1483cc1" }, "downloads": -1, "filename": "python_pdf-0.35-py36-none-any.whl", "has_sig": false, "md5_digest": "8ef9a86a1555581f15d0eadd3bb93f26", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 15338385, "upload_time": "2017-06-06T21:00:42", "url": "https://files.pythonhosted.org/packages/52/dd/28676bc8c01f795d69e6474ceba2583749b6e85b4155490ec0e744198907/python_pdf-0.35-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "041e6bedca6f5ae8fe648b67fd983b08", "sha256": "b53a96319111ccd12a73ac497ecb89ea54f3958deca27d3a29407852c366ddae" }, "downloads": -1, "filename": "python-pdf-0.35.tar.gz", "has_sig": false, "md5_digest": "041e6bedca6f5ae8fe648b67fd983b08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15267011, "upload_time": "2017-06-06T21:00:48", "url": "https://files.pythonhosted.org/packages/8d/3e/8fe2a0f0a8553678e00dffef2688d638e8179731ebd9bed4fb849170819c/python-pdf-0.35.tar.gz" } ], "0.36": [ { "comment_text": "", "digests": { "md5": "947124fb8ccc24e9bcd399114e620908", "sha256": "6fa2c3dcad746fa3144a45fec47530dc8b10f5cc664b407364a65d41e12d4782" }, "downloads": -1, "filename": "python_pdf-0.36-py36-none-any.whl", "has_sig": false, "md5_digest": "947124fb8ccc24e9bcd399114e620908", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 15338411, "upload_time": "2017-06-13T09:17:07", "url": "https://files.pythonhosted.org/packages/a0/ad/e72e27dd94f909cb69080e56a11a8c64287fb428b4f90e5ebab1744011c5/python_pdf-0.36-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27aca1431dc7abde3aafb2f1743e0f4e", "sha256": "6a3b084809469ce97be61fb39d94eafd830181aebeda6a3e166b373e23c8731a" }, "downloads": -1, "filename": "python-pdf-0.36.tar.gz", "has_sig": false, "md5_digest": "27aca1431dc7abde3aafb2f1743e0f4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15267025, "upload_time": "2017-06-13T09:17:20", "url": "https://files.pythonhosted.org/packages/c3/77/d5fce926da53d1092f269b3508ec76a2a4797285cfc3318765473bb35cc9/python-pdf-0.36.tar.gz" } ], "0.37": [ { "comment_text": "", "digests": { "md5": "68cce9d238eaa58fb08a16092c9a599d", "sha256": "9298c2558ec5571c25cbbfa1927f3381eb3876cce6ece41fe415694adbb4cc54" }, "downloads": -1, "filename": "python_pdf-0.37-py36-none-any.whl", "has_sig": false, "md5_digest": "68cce9d238eaa58fb08a16092c9a599d", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 16811251, "upload_time": "2019-06-20T18:52:31", "url": "https://files.pythonhosted.org/packages/9a/f5/59acb257d809c5025cc11837b647a4d41c1df1b3d41b873fd5827be6c3dd/python_pdf-0.37-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0886fdbb656de13694599a20468f7e24", "sha256": "1b16766d888f2870322689a28bc89a195e27829f65df9d4fc2f6714fcad8fb33" }, "downloads": -1, "filename": "python-pdf-0.37.tar.gz", "has_sig": false, "md5_digest": "0886fdbb656de13694599a20468f7e24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16753241, "upload_time": "2019-06-20T18:52:41", "url": "https://files.pythonhosted.org/packages/41/52/a5cb3f94426ffd80c31a61d7d8aef6c35193329dcd11c895dbd8b08eb7a6/python-pdf-0.37.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "68cce9d238eaa58fb08a16092c9a599d", "sha256": "9298c2558ec5571c25cbbfa1927f3381eb3876cce6ece41fe415694adbb4cc54" }, "downloads": -1, "filename": "python_pdf-0.37-py36-none-any.whl", "has_sig": false, "md5_digest": "68cce9d238eaa58fb08a16092c9a599d", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 16811251, "upload_time": "2019-06-20T18:52:31", "url": "https://files.pythonhosted.org/packages/9a/f5/59acb257d809c5025cc11837b647a4d41c1df1b3d41b873fd5827be6c3dd/python_pdf-0.37-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0886fdbb656de13694599a20468f7e24", "sha256": "1b16766d888f2870322689a28bc89a195e27829f65df9d4fc2f6714fcad8fb33" }, "downloads": -1, "filename": "python-pdf-0.37.tar.gz", "has_sig": false, "md5_digest": "0886fdbb656de13694599a20468f7e24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16753241, "upload_time": "2019-06-20T18:52:41", "url": "https://files.pythonhosted.org/packages/41/52/a5cb3f94426ffd80c31a61d7d8aef6c35193329dcd11c895dbd8b08eb7a6/python-pdf-0.37.tar.gz" } ] }