{ "info": { "author": "yukinarit", "author_email": "yukinarit84@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8" ], "description": "# pyserde: Serialization Library on top of [dataclasses](https://docs.python.org/3/library/dataclasses.html)\n\n[![image](https://img.shields.io/pypi/v/pyserde.svg)](https://pypi.org/project/pyserde/)\n[![image](https://img.shields.io/pypi/pyversions/pyserde.svg)](https://pypi.org/project/pyserde/)\n[![Build Status](https://travis-ci.org/yukinarit/pyserde.svg?branch=master)](https://travis-ci.org/yukinarit/pyserde)\n[![Build status](https://ci.appveyor.com/api/projects/status/w4i5x8x9d4sbxhn2?svg=true)](https://ci.appveyor.com/project/yukinarit/pyserde)\n[![Coverage Status](https://coveralls.io/repos/github/yukinarit/pyserde/badge.svg?branch=master)](https://coveralls.io/github/yukinarit/pyserde?branch=master)\n\n# Table of Contents\n\n* [Installation](#installation)\n* [QuickStart](#quickstart)\n* [Benchmark](#benchmark)\n * [Environment](#environment)\n * [Result](#result)\n* [Features](#features)\n\n# Installation\n\n```bash\n$ pip install pyserde\n```\n\n# QuickStart\n\nYou can serialize and deserialize a dataclass in various message formats quite easily!\n\n```python\n# main.py\n# /usr/bin/env python\nfrom dataclasses import dataclass\nfrom serde import deserialize, serialize\nfrom serde.json import from_json, to_json\n\n@deserialize\n@serialize\n@dataclass\nclass Foo:\n i: int\n s: str\n f: float\n b: bool\n\nh = Foo(i=10, s='foo', f=100.0, b=True)\nprint(f\"Into Json: {to_json(h)}\")\n\ns = '{\"i\": 10, \"s\": \"foo\", \"f\": 100.0, \"b\": true}'\nprint(f\"From Json: {from_json(Foo, s)}\")\n```\n\n```bash\n$ python main.py\nInto Json: {\"i\": 10, \"s\": \"foo\", \"f\": 100.0, \"b\": true}\nFrom Json: Foo(i=10, s='foo', f=100.0, b=True)\n```\n\n# Benchmark\n\nSerialize and Deserialize [a struct](https://github.com/yukinarit/pyserde/blob/bench/bench/dataclasses_class.py#L7-L12) into and from json 10,000 times.\n\n## Environment\n\n* macOS 10.14 Mojave\n* Intel 2.3GHz 8-core Intel Core i9\n* DDR4 32GB RAM\n\n## Result\n\n| Serialize | Deserialize |\n|-----------|-------------|\n| | |\n\n* `raw` Manual serialize and deserialize. Fastest in theory.\n* [`dacite`](https://github.com/konradhalas/dacite)\n* [`mashumaro`](https://github.com/Fatal1ty/mashumaro)\n\nYou can check [the code](bench/bench.py) for more information.\n\n# Features\n\n* Data format\n\t* [Json](./examples/jsonfile.py)\n\t* [Toml](./examples/tomlfile.py)\n\t* [Yaml](./examples/yamlfile.py)\n\t* [MsgPack](./examples/msgpack.py)\n* Class attributes\n\t* [Case conversion](#case-conversion) e.g. camelCase, kebab-case\n* Field attributes\n * [Rename](#rename-field)\n * [Skip](#skip)\n * [Skip-if](#skip-if)\n * [Skip if value is evaluated as False](#skip-if-value-is-evaluated-as-false)\n\n## Case conversion\n\n```python\n>>> @serialize(rename_all = 'camelcase')\n... @dataclass\n... class Foo:\n... int_field: int\n... str_field: str\n>>>\n>>> to_json(Foo(int_field=10, str_field='foo'))\n'{\"intField\": 10, \"strField\": \"foo\"}'\n```\n\n## Rename field\n\n```python\n>>> @serialize\n... @dataclass\n... class Foo:\n... # Use 'class_name' because 'class' is a keyword.\n... class_name: str = field(metadata={'serde_rename': 'class'})\n>>> to_json(Foo(class_name='Foo'))\n'{\"class\": \"Foo\"}'\n```\n\nFor complete example, please see [./examples/rename.py](./examples/rename.py)\n\n## Skip\n\n```python\n>>> @serialize\n... @dataclass\n... class Resource:\n... name: str\n... hash: str\n... metadata: Dict[str, str] = field(default_factory=dict, metadata={'serde_skip': True})\n\n>>> resources = [\n... Resource(\"Stack Overflow\", \"b6469c3f31653d281bbbfa6f94d60fea130abe38\"),\n... Resource(\"GitHub\", \"5cb7a0c47e53854cd00e1a968de5abce1c124601\", metadata={\"headquarters\": \"San Francisco\"}) ]\n>>> to_json(resources)\n'[{\"name\": \"Stack Overflow\", \"hash\": \"b6469c3f31653d281bbbfa6f94d60fea130abe38\"}, {\"name\": \"GitHub\", \"hash\": \"5cb7a0c47e53854cd00e1a968de5abce1c124601\"}]'\n```\n\nFor complete example, please see [./examples/skip.py](./examples/skip.py)\n\n## Skip if\n\n```python\n>>> @serialize\n... @dataclass\n... class World:\n... player: str\n... buddy: str = field(default='', metadata={'serde_skip_if': lambda v: v == 'Pikachu'})\n\n>>> world = World('satoshi', 'Pikachu')\n>>> to_json(world)\n'{\"player\": \"satoshi\"}'\n\n>>> world = World('green', 'Charmander')\n>>> print(to_json(world))\n'{\"player\": \"green\", \"buddy\": \"Charmander\"}'\n```\n\nFor complete example, please see [./examples/skip.py](./examples/skip.py)\n\n## Skip if value is evaluated as False\n\n```python\n>>> @serialize\n... @dataclass\n... class World:\n... player: str\n... enemies: List[str] = field(default_factory=list, metadata={'serde_skip_if_false': True})\n\n>>> world = World('satoshi', ['Rattata', 'Pidgey'])\n>>> to_json(world)\n'{\"player\": \"satoshi\", \"enemies\": [\"Rattata\", \"Pidgey\"]}'\n\n>>> world = World('green', [])\n>>> print(to_json(world))\n'{\"player\": \"green\"}'\n```\n\nFor complete example, please see [./examples/skip.py](./examples/skip.py)\n\n# Documentation\n\nhttps://yukinarit.github.io/pyserde/\n\n\n", "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/yukinarit/pyserde", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pyserde", "package_url": "https://pypi.org/project/pyserde/", "platform": "", "project_url": "https://pypi.org/project/pyserde/", "project_urls": { "Homepage": "https://github.com/yukinarit/pyserde" }, "release_url": "https://pypi.org/project/pyserde/0.0.8/", "requires_dist": [ "msgpack", "toml", "pyyaml", "stringcase", "typing-inspect (>=0.4.0)", "jinja2", "dataclasses", "coverage ; extra == 'test'", "pytest ; extra == 'test'", "pytest-cov ; extra == 'test'", "pytest-flake8 ; extra == 'test'", "mypy ; extra == 'test'", "flake8 ; extra == 'test'" ], "requires_python": ">=3.6", "summary": "Serialization library on top of dataclasses.", "version": "0.0.8" }, "last_serial": 5982586, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "72271f7c3bb27697575ded29ce21487b", "sha256": "e5c9569722b747cdfca754c60a7638b015ea2c79e33724ee230ab97223bf2110" }, "downloads": -1, "filename": "pyserde-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "72271f7c3bb27697575ded29ce21487b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4257, "upload_time": "2018-12-19T07:43:56", "url": "https://files.pythonhosted.org/packages/7f/3c/3d40d299c3b25600f177d2674c3e11c89a904c53164a609bc95b421f851d/pyserde-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "88f0d9dc543ff68533ad778cce12760e", "sha256": "5e9e335b628c485d4d84abd0808f340002425954bd24f38409a774ba19b04225" }, "downloads": -1, "filename": "pyserde-0.0.1.tar.gz", "has_sig": false, "md5_digest": "88f0d9dc543ff68533ad778cce12760e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3249, "upload_time": "2018-12-19T07:43:59", "url": "https://files.pythonhosted.org/packages/2d/7a/b99bf8bea98642cd9b434ebec8d3ac14864b913ba778069b3c740879352d/pyserde-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "dcce6c7c8c0e9ede7939bd285a995b8d", "sha256": "761d3f02575e82c20ef38bd0da951ba0ae26811517c9785a905a6f194a682f10" }, "downloads": -1, "filename": "pyserde-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "dcce6c7c8c0e9ede7939bd285a995b8d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4299, "upload_time": "2019-04-10T04:06:21", "url": "https://files.pythonhosted.org/packages/5d/6b/b15b0acbbb3d55c34bfe127c389df6a4498b8004bd99912837e24445d61c/pyserde-0.0.2-py3-none-any.whl" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "99514d00505bc38645a52fb86fa7729c", "sha256": "3ce06d6a1eece1ad1a665d6f1b8c27307360e9d15c1a81bf158a07b8361bee89" }, "downloads": -1, "filename": "pyserde-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "99514d00505bc38645a52fb86fa7729c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5156, "upload_time": "2019-04-18T07:21:21", "url": "https://files.pythonhosted.org/packages/79/52/9451925882edf10a4a205a480517a9660b2e80c279d02859dadb6a85bfa5/pyserde-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7b26e5b8862ff62ba0895fe3cc7dd4f", "sha256": "7710782a6f9f5248d22c5c0d82a3da3f15adbc9591e5b6874e79f74a0277f5ab" }, "downloads": -1, "filename": "pyserde-0.0.3.tar.gz", "has_sig": false, "md5_digest": "f7b26e5b8862ff62ba0895fe3cc7dd4f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4056, "upload_time": "2019-04-18T07:21:22", "url": "https://files.pythonhosted.org/packages/69/b2/dfe5ff6e66a3ba85f81392eff8e035d2557befc2c1b573170f8e8cb7c262/pyserde-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "3afd4139a62919c311f59a8dfab60a96", "sha256": "8b3fd1119be1ffe4148f5d43278adae12d7a1e0f2a3fe7c51f02d35e145638d5" }, "downloads": -1, "filename": "pyserde-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "3afd4139a62919c311f59a8dfab60a96", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5157, "upload_time": "2019-04-23T06:50:25", "url": "https://files.pythonhosted.org/packages/70/48/dbcc02faf4e2b112aef316c82c08486884a189bbca30f226a1f678c09777/pyserde-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "309dd2eb317e3c8a1c9dd5a9dc746922", "sha256": "10cb3a43bfe37cf9ddb18378370451bf082b192f4252a05fbb6cb4aab4135de5" }, "downloads": -1, "filename": "pyserde-0.0.4.tar.gz", "has_sig": false, "md5_digest": "309dd2eb317e3c8a1c9dd5a9dc746922", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4093, "upload_time": "2019-04-23T06:50:27", "url": "https://files.pythonhosted.org/packages/29/20/2035eff73b3ce5e2b27c85f98feeef106b00f43f7f99f38d6ece04539182/pyserde-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "e816f72d8f91bfdfc8068fdaa620d186", "sha256": "3e6fbef5f7d281a81d1edd5dc589725b75b6cb13dce8b374b51343e0e2508b88" }, "downloads": -1, "filename": "pyserde-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "e816f72d8f91bfdfc8068fdaa620d186", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5296, "upload_time": "2019-05-15T09:10:27", "url": "https://files.pythonhosted.org/packages/1a/71/7f4bf73dd76ae3bfff36afb567598bcdad3f5012bbcce9042fe44998d212/pyserde-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57f33fdf1ed4d61d4a501b5b04979338", "sha256": "bc90ce8bac9cc524ebf8bc6cd7e115a7271a920fbc8a6e67aead9ee16ac761bf" }, "downloads": -1, "filename": "pyserde-0.0.5.tar.gz", "has_sig": false, "md5_digest": "57f33fdf1ed4d61d4a501b5b04979338", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4226, "upload_time": "2019-05-15T09:10:28", "url": "https://files.pythonhosted.org/packages/53/62/c7a3157955a7033e3d9306ccd45d93e5b5644ddc28cf19bde197fe749319/pyserde-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "9432d229243d1a816eaeb523aa26966b", "sha256": "cdc4ecc9a7ad8b440cffdeedc3529c748ff0893c2f2da6977c8c3564354df2d1" }, "downloads": -1, "filename": "pyserde-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "9432d229243d1a816eaeb523aa26966b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5421, "upload_time": "2019-06-05T01:17:24", "url": "https://files.pythonhosted.org/packages/71/13/ad9885f5b0aa3414502358c84fbb9704045882b9a5e2d43266e896f201a1/pyserde-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8021bb46019fa9b511ef09c33b438ed7", "sha256": "6cab710633359de308037cc7f440d9fd22df573ea4d76fec2c62b91e2264b893" }, "downloads": -1, "filename": "pyserde-0.0.6.tar.gz", "has_sig": false, "md5_digest": "8021bb46019fa9b511ef09c33b438ed7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4371, "upload_time": "2019-06-05T01:17:26", "url": "https://files.pythonhosted.org/packages/b3/89/4a280b272586c3ca50c3081c7e04cefd93ae13b7fa1d2fd329da5b30561b/pyserde-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "8fdc609601b0bbbb1faeac765e5aa9d8", "sha256": "c7717a282541c58d567de96926efb0259d234dba04201ec903bb10a0db8bd333" }, "downloads": -1, "filename": "pyserde-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "8fdc609601b0bbbb1faeac765e5aa9d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 16932, "upload_time": "2019-08-14T07:28:42", "url": "https://files.pythonhosted.org/packages/ce/5a/526d3ec422b324292c4ac9d6dfd5262389eeef550995de24276164e10b45/pyserde-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f666e396f755294872e892a7abbf42b9", "sha256": "849e4755059b6a9412d648522510e4d164a503d726b6add46967d0221bd713cf" }, "downloads": -1, "filename": "pyserde-0.0.7.tar.gz", "has_sig": false, "md5_digest": "f666e396f755294872e892a7abbf42b9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12824, "upload_time": "2019-08-14T07:28:44", "url": "https://files.pythonhosted.org/packages/c5/6f/6eefe210268625e4d88ff2609e872343ab73c6f1582e3818e628f498992f/pyserde-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "2b6b352be3ce37f709f312a118bd754a", "sha256": "bccd5a513329cec69d15d630217c65773b7f137237939958573287f8915f63fc" }, "downloads": -1, "filename": "pyserde-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "2b6b352be3ce37f709f312a118bd754a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 25217, "upload_time": "2019-10-16T11:04:43", "url": "https://files.pythonhosted.org/packages/7c/e8/9d1a8c0fb5ce4db868bdb298b5cceeb59b58c8d48bab94834595cc3f639d/pyserde-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2dae686f6d0f83581703c25a998e7e61", "sha256": "d68fbbb2f293613ac37fe87aef5f0a02f26a2c2e9834ffa73d7b1c4d960d5c8c" }, "downloads": -1, "filename": "pyserde-0.0.8.tar.gz", "has_sig": false, "md5_digest": "2dae686f6d0f83581703c25a998e7e61", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17236, "upload_time": "2019-10-16T11:04:45", "url": "https://files.pythonhosted.org/packages/49/01/ed096c125c7c97dcbd59368218b3393c23db88660c895f210464e98d94a5/pyserde-0.0.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2b6b352be3ce37f709f312a118bd754a", "sha256": "bccd5a513329cec69d15d630217c65773b7f137237939958573287f8915f63fc" }, "downloads": -1, "filename": "pyserde-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "2b6b352be3ce37f709f312a118bd754a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 25217, "upload_time": "2019-10-16T11:04:43", "url": "https://files.pythonhosted.org/packages/7c/e8/9d1a8c0fb5ce4db868bdb298b5cceeb59b58c8d48bab94834595cc3f639d/pyserde-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2dae686f6d0f83581703c25a998e7e61", "sha256": "d68fbbb2f293613ac37fe87aef5f0a02f26a2c2e9834ffa73d7b1c4d960d5c8c" }, "downloads": -1, "filename": "pyserde-0.0.8.tar.gz", "has_sig": false, "md5_digest": "2dae686f6d0f83581703c25a998e7e61", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17236, "upload_time": "2019-10-16T11:04:45", "url": "https://files.pythonhosted.org/packages/49/01/ed096c125c7c97dcbd59368218b3393c23db88660c895f210464e98d94a5/pyserde-0.0.8.tar.gz" } ] }