{ "info": { "author": "David Jacquet", "author_email": "jacquet.david@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "Python Deep Serializer\n======================\n\n\nPackage provides for \n\n * Serializing nested Python objects. That is creating a nested dictionary from a nested Python object.\n\n * Deserializing nested Python objects, that is initializing nested Python objects with a nested dictionary.\n \n One use case is when you have a web api and users post nested json which you use to initialize (nested) Python objects.\n\n\n**Example** \n```python\nfrom pprint import pprint\n\nimport datetime\nimport typing\n\nfrom deep_serializer import des\nfrom deep_serializer.ser import ToDictEnabled\n\n\nclass Person(ToDictEnabled):\n\n @des.cast # casting input\n def __init__(self, name: str, age: int):\n self.name = name\n self.age = age\n\n\nclass Car(ToDictEnabled):\n\n @des.cast # casting input\n def __init__(self, model: str, owner: Person, color: str, registration_date: datetime.datetime,\n passengers: typing.List[Person] = (), miles: typing.Dict[datetime.datetime, float] = None):\n self.miles = miles\n self.model = model\n self.owner = owner\n self.color = color\n self.registration_date = registration_date\n self.passengers = passengers\n self.__private_variable = 'secret' # private attribute not serialized by todict\n\n @property\n def color_and_owner(self) -> str: # property not serialized by todict\n return '%s-%s' % (self.color, self.owner.name)\n\n\nif __name__ == '__main__':\n car_dict = {\n 'color': 'blue',\n 'model': 'Volvo',\n 'owner': {'age': '22', 'name': 'Bob'},\n 'passengers': [{'age': 20, 'name': 'Alice'}, {'age': 19, 'name': 'Joe'}],\n 'registration_date': '2015-01-01 12:00.00',\n 'miles': {'2015-01-01 12:00.00': 0, '2016-01-01 12:00.00': '1000'}\n }\n\n print('\\n\\nInput')\n pprint(car_dict)\n\n car = Car(**car_dict)\n print('\\n\\nCar object:\\n%s' % car)\n\n print('\\n\\nCar as dict')\n pprint(car.todict(), indent=4)\n```\n\n**Note that**\n * The `ToDictEnabled` adds the `todict` method which enables deep serialization.\n * The `@des.init` property tries to cast input variables according to their type hints before actual init is run.\n * The `@color_and_owner` property is not serialized.\n * The `__private_variable` attribute is not serialized.\n \n \n\nRunning main yields\n```\nInput\n{'color': 'blue',\n 'miles': {'2015-01-01 12:00.00': 0, '2016-01-01 12:00.00': '1000'},\n 'model': 'Volvo',\n 'owner': {'age': '22', 'name': 'Bob'},\n 'passengers': [{'age': 20, 'name': 'Alice'}, {'age': 19, 'name': 'Joe'}],\n 'registration_date': '2015-01-01 12:00.00'}\n\n\nCar object:\n<__main__.Car object at 0x7f4972796cf8>\n\n\nCar as dict\n{ 'color': 'blue',\n 'miles': { datetime.datetime(2015, 1, 1, 12, 0): 0.0,\n datetime.datetime(2016, 1, 1, 12, 0): 1000.0},\n 'model': 'Volvo',\n 'owner': {'age': 22, 'name': 'Bob'},\n 'passengers': [{'age': 20, 'name': 'Alice'}, {'age': 19, 'name': 'Joe'}],\n 'registration_date': datetime.datetime(2015, 1, 1, 12, 0)}\n```\n\n\n**Caveats**\n- Code is virtually untested, except on a few minor private projects. \n\n- Casting is far from complete. For example, the `typing.Tuple[]` type hinting does not work, and those input variables will not be casted.\n\n- Only works with Python3, only tested with Python3.6 and Python3.7.\n\n- `todict` method will not serialize attributes starting with `__` and not serialize properties.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/164747/python-deep-serializer", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "deep-serializer", "package_url": "https://pypi.org/project/deep-serializer/", "platform": "any", "project_url": "https://pypi.org/project/deep-serializer/", "project_urls": { "Homepage": "https://github.com/164747/python-deep-serializer" }, "release_url": "https://pypi.org/project/deep-serializer/0.0.6/", "requires_dist": null, "requires_python": ">=3.6.0", "summary": "Package for deep serializing and deserializing", "version": "0.0.6" }, "last_serial": 4847056, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "1c9a5e794d9beeada5b652540f6149f8", "sha256": "0d4e424f4b41c6ab10bd270c3a4848e23cb4772ef2b6982d84b1903809af985b" }, "downloads": -1, "filename": "deep_serializer-0.0.1.tar.gz", "has_sig": false, "md5_digest": "1c9a5e794d9beeada5b652540f6149f8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 4819, "upload_time": "2018-10-31T21:39:03", "url": "https://files.pythonhosted.org/packages/35/91/eb2ad9475c7295f4c11ab0e382d88dc463690a1ec7bbbc16c293f08b7818/deep_serializer-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "0b5f30ada442a3eb6329858c49f5c891", "sha256": "19a269d0c2d8b7dcd958c2e94fba1e1cda2cf5569f7768e1b3ba1d2c8de962b7" }, "downloads": -1, "filename": "deep_serializer-0.0.2.tar.gz", "has_sig": false, "md5_digest": "0b5f30ada442a3eb6329858c49f5c891", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 4810, "upload_time": "2018-10-31T21:51:40", "url": "https://files.pythonhosted.org/packages/fa/21/9b5d31d93bd737f9dc79f77a2179d77fff8d3b6b28f40c3c8e3a69220c32/deep_serializer-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "0319295e3d85fffe9726a46ad89fb947", "sha256": "32a758065388f414b46e9a03693bdb68b2ef972a6f830f00256a9af3e147d961" }, "downloads": -1, "filename": "deep_serializer-0.0.3.tar.gz", "has_sig": false, "md5_digest": "0319295e3d85fffe9726a46ad89fb947", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 4811, "upload_time": "2018-11-03T11:41:45", "url": "https://files.pythonhosted.org/packages/d4/31/11067b24b6d59089ffa8ae88d3a19afc46fca946adfb5ebdd4aaef49f14b/deep_serializer-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "4d5fa5b9cf3811066bd560a29a56cf1a", "sha256": "f7e525958073c78b9d78f74601a86d88b8b358eb76fa45a249439bcd5cb735bf" }, "downloads": -1, "filename": "deep_serializer-0.0.4.tar.gz", "has_sig": false, "md5_digest": "4d5fa5b9cf3811066bd560a29a56cf1a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 4922, "upload_time": "2018-11-13T19:18:52", "url": "https://files.pythonhosted.org/packages/4a/08/8da154fe80557fc858978664a263867c13ec48f4ac67925973c27afbb11c/deep_serializer-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "c9f26c3ef5796f6b94bc89723073f8aa", "sha256": "bf07843df9c4a42309ee01d974812c6ccf9e97e9a670ce0d8d765dd5f9408a93" }, "downloads": -1, "filename": "deep_serializer-0.0.5.tar.gz", "has_sig": false, "md5_digest": "c9f26c3ef5796f6b94bc89723073f8aa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 5069, "upload_time": "2018-12-27T09:27:06", "url": "https://files.pythonhosted.org/packages/7d/cb/f9c46416148d0431a89e6509fde7115a002ed815c08d80192e2860671b3f/deep_serializer-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "ac7512153a331c476786afc0cb7ab77b", "sha256": "140dcb8dd15cdab8e27a64520a76dd83a7e0cdd41b2682c30b6acf31f1b2495f" }, "downloads": -1, "filename": "deep_serializer-0.0.6.tar.gz", "has_sig": false, "md5_digest": "ac7512153a331c476786afc0cb7ab77b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 5086, "upload_time": "2019-02-20T19:36:34", "url": "https://files.pythonhosted.org/packages/df/d3/d7597c65ed78eb97aa5ef52288c6b8277fa4d4e5bad334a9d29922addeb0/deep_serializer-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ac7512153a331c476786afc0cb7ab77b", "sha256": "140dcb8dd15cdab8e27a64520a76dd83a7e0cdd41b2682c30b6acf31f1b2495f" }, "downloads": -1, "filename": "deep_serializer-0.0.6.tar.gz", "has_sig": false, "md5_digest": "ac7512153a331c476786afc0cb7ab77b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 5086, "upload_time": "2019-02-20T19:36:34", "url": "https://files.pythonhosted.org/packages/df/d3/d7597c65ed78eb97aa5ef52288c6b8277fa4d4e5bad334a9d29922addeb0/deep_serializer-0.0.6.tar.gz" } ] }