{ "info": { "author": "Sergey Mokeyev", "author_email": "sergey.mokeyev@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Programming Language :: Python :: 3.7" ], "description": "# SoKu \n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/15047237ccab49048a214be614675b1e)](https://www.codacy.com/app/SergeyMokeyev/soku?utm_source=github.com&utm_medium=referral&utm_content=SergeyMokeyev/soku&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://api.codacy.com/project/badge/Coverage/15047237ccab49048a214be614675b1e)](https://www.codacy.com/app/SergeyMokeyev/soku?utm_source=github.com&utm_medium=referral&utm_content=SergeyMokeyev/soku&utm_campaign=Badge_Coverage)\n\nSoKu is small library for serialize and deserialize python object to JSON and back. \nThis library is useful for conversation between micro services, see example. \nIt can to serialize from object and back, validate when deserialize and use custom deserializer and serializer.\n\n**Installation**\n\n```bash\npip install soku\n```\n\n**Example**\n\n```python\nfrom datetime import datetime\nfrom dataclasses import dataclass\nfrom soku import Class, Attribute\n\n\ndef is_int(_, value): # validator must be callable and return bool or raise exception\n return isinstance(value, int)\n\n\ndef timestamp_to_date(value):\n return datetime.fromtimestamp(value)\n\n\ndef date_to_timestamp(value):\n return int(value.timestamp())\n\n\n@dataclass\nclass FullName(Class):\n first_name: str = Attribute(key='firstName')\n last_name: str = Attribute(key='lastName')\n\n def full_name(self):\n return f'{self.first_name} {self.last_name}'\n\n\n@dataclass\nclass Person(Class):\n id: int = Attribute(validate=is_int)\n full_name: FullName = Attribute(key='fullName', attach=FullName)\n\n\n@dataclass\nclass User(Person):\n birthday: datetime = Attribute(deserialize=timestamp_to_date, serialize=date_to_timestamp)\n\n\nif __name__ == '__main__':\n # create instance and serialize\n full_name = FullName('John', 'Smith')\n user = User(12345, full_name, datetime.fromtimestamp(1193875200))\n print(user.serialize()) # {'id': 12345, 'birthday': 1193875200, 'fullName': {'firstName': 'John', 'lastName': 'Smith'}}\n\n\n # deserialize and serialize\n user = User.deserialize({'id': 12345, 'birthday': 1193875200, 'fullName': {'firstName': 'John', 'lastName': 'Smith'}})\n print(user.full_name.full_name()) # John Smith\n print(user.serialize()) # {'id': 12345, 'birthday': 1193875200, 'fullName': {'firstName': 'John', 'lastName': 'Smith'}}\n\n # validate\n try:\n User.deserialize({'id': '12345', 'birthday': 1193875200, 'fullName': {'firstName': 'John', 'lastName': 'Smith'}})\n except ValueError as exc:\n print(exc) # Key id validation error.\n```\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/SergeyMokeyev/soku", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "soku", "package_url": "https://pypi.org/project/soku/", "platform": "", "project_url": "https://pypi.org/project/soku/", "project_urls": { "Homepage": "https://github.com/SergeyMokeyev/soku" }, "release_url": "https://pypi.org/project/soku/2.0.3/", "requires_dist": null, "requires_python": "", "summary": "Serialize and deserialize python object to JSON and back", "version": "2.0.3" }, "last_serial": 5570592, "releases": { "2.0.2": [ { "comment_text": "", "digests": { "md5": "980d258ecd5f30f6c2dc6d6f211ecb78", "sha256": "016f756836eb2ef58c069dd50c573874d841bb60e52463ce3e68db5e7297c616" }, "downloads": -1, "filename": "soku-2.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "980d258ecd5f30f6c2dc6d6f211ecb78", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15752, "upload_time": "2019-07-21T09:04:32", "url": "https://files.pythonhosted.org/packages/16/6c/f0edea5e17756d743b061910277666428f8d75382e55f6d4e425138dfca4/soku-2.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69bc69a325b42ee4bbd4e5f4a102c757", "sha256": "64263717c5b65ba3654f68856edda663613806439b952156e04d8bfb942fe2fb" }, "downloads": -1, "filename": "soku-2.0.2.tar.gz", "has_sig": false, "md5_digest": "69bc69a325b42ee4bbd4e5f4a102c757", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2376, "upload_time": "2019-07-21T09:04:33", "url": "https://files.pythonhosted.org/packages/43/1c/a2199eea0327ecd53e3fb633a54de2da82784d8557621fda52e79b4e8bc3/soku-2.0.2.tar.gz" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "7f543df6d08c0239680838b8c896e8d8", "sha256": "bc3a8d3c583cd49d0fac307973f9d5c035f3f2b7476ccee89eeec2b3553d0f74" }, "downloads": -1, "filename": "soku-2.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7f543df6d08c0239680838b8c896e8d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16095, "upload_time": "2019-07-23T05:40:37", "url": "https://files.pythonhosted.org/packages/27/40/2064a0f89d71c2dd93ae6c115797442aa74e784eebce277a1b14f4815ddd/soku-2.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92b9fec38ad4012613307269c9330a68", "sha256": "6b5afc90afaeea62cc56ba88a8643c96d832e223d25590bfac732ee3d90a02ba" }, "downloads": -1, "filename": "soku-2.0.3.tar.gz", "has_sig": false, "md5_digest": "92b9fec38ad4012613307269c9330a68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2546, "upload_time": "2019-07-23T05:40:38", "url": "https://files.pythonhosted.org/packages/80/1e/624581c34de14725c333293333e25a4c881ce22dfd6f273e2119fa773be2/soku-2.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7f543df6d08c0239680838b8c896e8d8", "sha256": "bc3a8d3c583cd49d0fac307973f9d5c035f3f2b7476ccee89eeec2b3553d0f74" }, "downloads": -1, "filename": "soku-2.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7f543df6d08c0239680838b8c896e8d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16095, "upload_time": "2019-07-23T05:40:37", "url": "https://files.pythonhosted.org/packages/27/40/2064a0f89d71c2dd93ae6c115797442aa74e784eebce277a1b14f4815ddd/soku-2.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92b9fec38ad4012613307269c9330a68", "sha256": "6b5afc90afaeea62cc56ba88a8643c96d832e223d25590bfac732ee3d90a02ba" }, "downloads": -1, "filename": "soku-2.0.3.tar.gz", "has_sig": false, "md5_digest": "92b9fec38ad4012613307269c9330a68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2546, "upload_time": "2019-07-23T05:40:38", "url": "https://files.pythonhosted.org/packages/80/1e/624581c34de14725c333293333e25a4c881ce22dfd6f273e2119fa773be2/soku-2.0.3.tar.gz" } ] }