{ "info": { "author": "Freelancer.com", "author_email": "chris@freelancer.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "Programming Language :: Python :: 3.7" ], "description": "*****************************************************\npavlova: simplified deserialization using dataclasses\n*****************************************************\n\n**pavlova** is a library that assists in mapping an unknown input into a\ndataclass.\n\n.. code-block:: python\n\n from datetime import datetime\n from dataclasses import dataclass\n\n from pavlova import Pavlova\n\n\n @dataclass\n class Input:\n id: int\n name: str\n date: datetime\n\n\n Pavlova().from_mapping({\n 'id': 10,\n 'name': 100\n 'date': '2018-08-10',\n }, Input)\n # Input(id=10, name='100', date=datetime.datetime(2018, 8, 10, 0, 0))\n\n\nPavlova was born out of frustration with the lack of typing support for\nexisting deserialization libraries. With the introduction of dataclasses in\nPython 3.7, they seemed like the perfect use for defining a deserialization\nschema.\n\n\nSupported functionality\n#######################\n\nParsing of booleans, datetimes, floats, ints, strings, decimals, dictionaries,\nenums, lists are currently supported.\n\nThere are more parsers to come, however to implement your own custom parser,\nsimply implement `PavlovaParser` in `pavlova.parsers`, and register it with the\nPavlova object with the `register_parser` method.\n\nInstallation\n############\n\n.. code-block:: shell\n\n pip install pavlova\n\nUsage with Flask\n################\n\n.. code-block:: python\n\n from dataclasses import dataclass, asdict\n\n from flask import Flask, jsonify\n from pavlova.flask import FlaskPavlova\n\n pavlova = FlaskPavlova()\n app = Flask(__name__)\n\n @dataclass\n class SampleInput:\n id: int\n name: str\n\n @app.route('/post', methods=['POST'])\n @pavlova.use(SampleInput)\n def data(data: SampleInput):\n data.id = data.id * len(data.name)\n return jsonify(asdict(data))\n\n\n app.run()\n\nAdding Custom Types\n###################\n\nThere are a couple of different ways to implement new types for parsing in\npavlova. In general, the process is to add a parser a specific type. For\nvalidation you should raise a TypeError or ValueError.\n\nThe first one, is creating a new type that extends an existing base type. Here\nis an example on how to implement an Email type, which is a string but performs\nvalidation.\n\n.. code-block:: python\n\n from pavlova import Pavlova\n from pavlova.parsers import GenericParser\n\n class Email(str):\n def __new__(cls, input_value: typing.Any) -> str:\n if isinstance(input_value, str):\n if '@' in input_value:\n return str(input_value)\n raise ValueError()\n raise TypeError()\n\n pavlova = Pavlova()\n pavlova.register_parser(Email, GenericParser(pavlova, Email))\n\nAnother way, is to implement your own pavlova parser, rather than using your\nthe built in `GenericParser` parser.\n\n.. code-block:: python\n\n import datetime\n from typing import Any, Tuple\n\n import dateparser\n from pavlova import Pavlova\n from pavlova.parsers import PavlovaParser\n\n class DatetimeParser(PavlovaParser[datetime.datetime]):\n \"Parses a datetime\"\n\n def parse_input(self,\n input_value: Any,\n field_type: Type,\n path: Tuple[str, ...]) -> datetime.datetime:\n return dateparser.parse(input_value)\n\n pavlova = Pavlova()\n pavlova.register_parser(datetime.DateTime, DatetimeParser(pavlova))\n\nRequirements\n############\n\nPavlova is only supported on Python 3.6 and higher. With Python 3.6, it will\ninstall the `dataclasses `__ module.\nWith Python 3.7 and higher, it will use the built-in dataclasses module.\n\nLicense\n~~~~~~~\n\nGNU LGPLv3. Please see `LICENSE `__ and\n`COPYING.LESSER `__.\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/freelancer/pavlova", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pavlova", "package_url": "https://pypi.org/project/pavlova/", "platform": "", "project_url": "https://pypi.org/project/pavlova/", "project_urls": { "Homepage": "https://github.com/freelancer/pavlova" }, "release_url": "https://pypi.org/project/pavlova/0.1.3/", "requires_dist": [ "dateparser" ], "requires_python": "", "summary": "Simplified deserialization using dataclasses", "version": "0.1.3" }, "last_serial": 4500858, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "9d447d2322e19e8608c1a985e1316cda", "sha256": "deaffba8dcc941dff4686d613fe71bf7d62209c378e4cd030e44de71e3cb856a" }, "downloads": -1, "filename": "pavlova-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9d447d2322e19e8608c1a985e1316cda", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5145, "upload_time": "2018-08-21T06:30:39", "url": "https://files.pythonhosted.org/packages/81/0c/d87767cdbe076c7bfa48875ac25a874ab0c6325a4e932763f04d1224dbee/pavlova-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36998cd398a4076e3d66f40d5717e556", "sha256": "18d1e49f43d6c97820b33d8d09078f4982ec27deb370372fd4c9385bd7b2c6a8" }, "downloads": -1, "filename": "pavlova-0.1.0.tar.gz", "has_sig": false, "md5_digest": "36998cd398a4076e3d66f40d5717e556", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4211, "upload_time": "2018-08-21T06:26:04", "url": "https://files.pythonhosted.org/packages/5a/94/9bc3d173739a85de6a74e00ff358dc33d6f97d54cf6c1b1dbc9ee3ea65ae/pavlova-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0bff22c1de1389e07a436950924f1a1d", "sha256": "70526f975bd632af2f8b842f1f43d1da0a3e1e6c8ea5ce2fb4149ec17122e90b" }, "downloads": -1, "filename": "pavlova-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0bff22c1de1389e07a436950924f1a1d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7206, "upload_time": "2018-09-05T00:54:05", "url": "https://files.pythonhosted.org/packages/ab/da/82279cc76a475ebacd6f2f1858af6fb4449f0a62fdab96a97c79688ba234/pavlova-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c7da4c8c2f33a717e8ab319d0c8e64ce", "sha256": "ee2415416c2b7c4b32412e5fc1334ec4242a559cf398a7ce4887f814a7527124" }, "downloads": -1, "filename": "pavlova-0.1.1.tar.gz", "has_sig": false, "md5_digest": "c7da4c8c2f33a717e8ab319d0c8e64ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6113, "upload_time": "2018-09-05T00:54:06", "url": "https://files.pythonhosted.org/packages/07/34/9c833a599bc9f6d8717b20e5c91bb2ff61768ac6a1a1d4ac734c9ebedd1d/pavlova-0.1.1.tar.gz" } ], "0.1.1.dev0": [ { "comment_text": "", "digests": { "md5": "18c1528fc035b0892e7b5c4b9dcf505e", "sha256": "9581950db0c167de7b02f74265547b6fe50e9b43817a7726c090de2110701296" }, "downloads": -1, "filename": "pavlova-0.1.1.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "18c1528fc035b0892e7b5c4b9dcf505e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5812, "upload_time": "2018-08-22T01:19:15", "url": "https://files.pythonhosted.org/packages/e2/a7/70b5500630355a4cbe2778d3c710c30d614b2ee1849e58abe873d3c4ce70/pavlova-0.1.1.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e8b1163921be8de1b73ebb2c9bc0e08c", "sha256": "5c5e3370452e6cb8bcdd941c8f6597259e6a93402eedd5863b0f73094bb050cc" }, "downloads": -1, "filename": "pavlova-0.1.1.dev0.tar.gz", "has_sig": false, "md5_digest": "e8b1163921be8de1b73ebb2c9bc0e08c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4628, "upload_time": "2018-08-22T01:19:16", "url": "https://files.pythonhosted.org/packages/d4/be/cb49b26c6335e70f67f64427d9a04286b778d33a15c8197255e5506627e3/pavlova-0.1.1.dev0.tar.gz" } ], "0.1.1.dev1": [ { "comment_text": "", "digests": { "md5": "08fd007aec1c4ee5e55fbad0dff11005", "sha256": "add08eba058ebfc8a705f2a7419f747240ed51761dd1a7712faab59386d1268c" }, "downloads": -1, "filename": "pavlova-0.1.1.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "08fd007aec1c4ee5e55fbad0dff11005", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6104, "upload_time": "2018-08-22T04:46:32", "url": "https://files.pythonhosted.org/packages/4a/0e/a428bbf97b9ce9b7766f632baa0940929413ea1ec9143ea06fd696daad69/pavlova-0.1.1.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "150e58a446ea57b8172ed8d267b09a4a", "sha256": "7b3c375c0b72fbeb88ac898c24a11667bb5caa524b5b9176caf00e64d8cd81e8" }, "downloads": -1, "filename": "pavlova-0.1.1.dev1.tar.gz", "has_sig": false, "md5_digest": "150e58a446ea57b8172ed8d267b09a4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4960, "upload_time": "2018-08-22T04:46:33", "url": "https://files.pythonhosted.org/packages/b0/51/b30c6b0bb5c3d1b40c031659630af9ffaeb2facaf4d812bf40ed2fc9caf7/pavlova-0.1.1.dev1.tar.gz" } ], "0.1.1.dev2": [ { "comment_text": "", "digests": { "md5": "062bbff8b7c1bdee7d53b7ef1ded6f25", "sha256": "b87ef5654a650a0755c1ae5199cbf53a7b9c54f972a97ca19a20742ee19f4897" }, "downloads": -1, "filename": "pavlova-0.1.1.dev2-py3-none-any.whl", "has_sig": false, "md5_digest": "062bbff8b7c1bdee7d53b7ef1ded6f25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6480, "upload_time": "2018-08-24T03:59:43", "url": "https://files.pythonhosted.org/packages/e6/2f/2cce75dde650bdd1fde5cc18374a2aaceab3b4469dc38b40f70524a3e32b/pavlova-0.1.1.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c59dbccd95aca679c433aa7bf000aaca", "sha256": "e5298f58b067ac23207e15fb01dc377b3effd33030971ef420ac237fa94c028f" }, "downloads": -1, "filename": "pavlova-0.1.1.dev2.tar.gz", "has_sig": false, "md5_digest": "c59dbccd95aca679c433aa7bf000aaca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5247, "upload_time": "2018-08-24T03:59:44", "url": "https://files.pythonhosted.org/packages/5f/15/ed9bbdcb43f49d98e3316c881730e332d68b65b15dc05546fd803f857c9d/pavlova-0.1.1.dev2.tar.gz" } ], "0.1.1.dev3": [ { "comment_text": "", "digests": { "md5": "7302999f419cb3a500b029df58ad6ef4", "sha256": "6ec828397f2797ca978d6efde25db5e0148e6b27aaca3cb798a4511dd5ab80e1" }, "downloads": -1, "filename": "pavlova-0.1.1.dev3-py3-none-any.whl", "has_sig": false, "md5_digest": "7302999f419cb3a500b029df58ad6ef4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6577, "upload_time": "2018-08-24T06:57:41", "url": "https://files.pythonhosted.org/packages/d9/79/2df2cd351240c9e74936933e048f93008efe5b9e6aec59247a2167755b03/pavlova-0.1.1.dev3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a29a12f15a356c8fb2126779f636cef0", "sha256": "3ed362ca1ff035e48207e480989914f9cfc5246f1c2488ca9a9476e579cddad6" }, "downloads": -1, "filename": "pavlova-0.1.1.dev3.tar.gz", "has_sig": false, "md5_digest": "a29a12f15a356c8fb2126779f636cef0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5342, "upload_time": "2018-08-24T06:57:42", "url": "https://files.pythonhosted.org/packages/3a/40/953ea467a38385c18db6747fdab4d53eecd2292ef7e2569cc0b31899d64c/pavlova-0.1.1.dev3.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "bf9d73e046d5f75f37ab717acad27015", "sha256": "8e3989fa34037a46da0279dff0f3d90edf313b04eb45e3992c44e788d32e4baa" }, "downloads": -1, "filename": "pavlova-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "bf9d73e046d5f75f37ab717acad27015", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7252, "upload_time": "2018-09-10T05:29:37", "url": "https://files.pythonhosted.org/packages/74/54/9dbaf8d273001620d8d95bb2aa718e0454e7c8b4a8fd55dadc1f0abd5807/pavlova-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d41e527158d7bf91dff549b81d7c8c57", "sha256": "90f0ff259203f8bb7e0530cfbf5bc5fe9b05ed7a227b3e8c02746b35a67fdd6a" }, "downloads": -1, "filename": "pavlova-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d41e527158d7bf91dff549b81d7c8c57", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6155, "upload_time": "2018-09-10T05:29:39", "url": "https://files.pythonhosted.org/packages/09/ca/4a00605c73e8288de67256fa7910b4f9ea12cabdf882d4bf8a0a4d7a5428/pavlova-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "78e530ca2d735d4f7b28350c8db2cd7b", "sha256": "1a5acb53c288dc50b2eeb594dfc07a3af3bb8b0a7066e195d257d05c7c2ee1c8" }, "downloads": -1, "filename": "pavlova-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "78e530ca2d735d4f7b28350c8db2cd7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22423, "upload_time": "2018-11-18T22:28:01", "url": "https://files.pythonhosted.org/packages/c1/b1/e90445013016ebdb2adc9c62ae4e67479e4b3d9f97cabb372015444fb2f1/pavlova-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b110f8eb8a325b095c76fb52c54e04a", "sha256": "baf36f3f0d5a1cc6dc3829492b3cbd3f0ddfd3601d85ab2a1e47c2ccd457e5d4" }, "downloads": -1, "filename": "pavlova-0.1.3.tar.gz", "has_sig": false, "md5_digest": "7b110f8eb8a325b095c76fb52c54e04a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6203, "upload_time": "2018-11-18T22:28:03", "url": "https://files.pythonhosted.org/packages/ae/d0/493a65b4f57c0f1034d4592958cfa1709fcaf1da3ddb9af3bec8bc029d6f/pavlova-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "78e530ca2d735d4f7b28350c8db2cd7b", "sha256": "1a5acb53c288dc50b2eeb594dfc07a3af3bb8b0a7066e195d257d05c7c2ee1c8" }, "downloads": -1, "filename": "pavlova-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "78e530ca2d735d4f7b28350c8db2cd7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22423, "upload_time": "2018-11-18T22:28:01", "url": "https://files.pythonhosted.org/packages/c1/b1/e90445013016ebdb2adc9c62ae4e67479e4b3d9f97cabb372015444fb2f1/pavlova-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b110f8eb8a325b095c76fb52c54e04a", "sha256": "baf36f3f0d5a1cc6dc3829492b3cbd3f0ddfd3601d85ab2a1e47c2ccd457e5d4" }, "downloads": -1, "filename": "pavlova-0.1.3.tar.gz", "has_sig": false, "md5_digest": "7b110f8eb8a325b095c76fb52c54e04a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6203, "upload_time": "2018-11-18T22:28:03", "url": "https://files.pythonhosted.org/packages/ae/d0/493a65b4f57c0f1034d4592958cfa1709fcaf1da3ddb9af3bec8bc029d6f/pavlova-0.1.3.tar.gz" } ] }