{ "info": { "author": "ESSS", "author_email": "foss@esss.co", "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" ], "description": "======================================================================\nSerialchemy\n======================================================================\n\n.. TODO: Publish to PyPi\n .. image:: https://img.shields.io/pypi/v/serialchemy.svg\n :target: https://pypi.python.org/pypi/serialchemy\n .. image:: https://img.shields.io/pypi/pyversions/serialchemy.svg\n :target: https://pypi.org/project/serialchemy\n\n.. image:: https://img.shields.io/travis/ESSS/serialchemy.svg\n :target: https://travis-ci.org/ESSS/serialchemy\n\n.. image:: https://ci.appveyor.com/api/projects/status/github/ESSS/serialchemy?branch=master\n :target: https://ci.appveyor.com/project/ESSS/serialchemy/?branch=master&svg=true\n\n.. image:: https://codecov.io/gh/ESSS/serialchemy/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/ESSS/serialchemy\n\n.. image:: https://img.shields.io/readthedocs/pip.svg\n :target: https://serialchemy.readthedocs.io/en/latest/\n\nSQLAlchemy model serialization.\n\nMotivation\n----------\n\n**Serialchemy** was developed as a module of Flask-RESTAlchemy_, a lib to create Restful APIs\nusing Flask and SQLAlchemy. We first tried marshmallow-sqlalchemy_, probably the most\nwell-known lib for SQLAlchemy model serialization, but we faced `issues related to nested\nmodels `_. We also think\nthat is possible to build a simpler and more maintainable solution by having SQLAlchemy_ in\nmind from the ground up, as opposed to marshmallow-sqlalchemy_ that had to be\ndesigned and built on top of marshmallow_.\n\n.. _SQLAlchemy: www.sqlalchemy.org\n.. _marshmallow-sqlalchemy: http://marshmallow-sqlalchemy.readthedocs.io\n.. _marshmallow: https://marshmallow.readthedocs.io\n.. _Flask-RESTAlchemy: https://github.com/ESSS/flask-restalchemy\n\nHow to Use it\n-------------\n\nSerializing Generic Types\n.........................\n\nSuppose we have an `Employee` SQLAlchemy_ model declared: ::\n\n class Employee(Base):\n __tablename__ = 'Employee'\n\n id = Column(Integer, primary_key=True)\n fullname = Column(String)\n admission = Column(DateTime, default=datetime(2000, 1, 1))\n company_id = Column(ForeignKey('Company.id'))\n company = relationship(Company)\n company_name = column_property(\n select([Company.name]).where(Company.id == company_id)\n )\n password = Column(String)\n\n`Generic Types`_ are automatically serialized by `ModelSerializer`: ::\n\n from serialchemy import ModelSerializer\n\n emp = Employee(fullname='Roberto Silva', admission=datetime(2019, 4, 2))\n\n serializer = ModelSerializer(Employee)\n serializer.dump(emp)\n\n >> {'id': None,\n 'fullname': 'Roberto Silva',\n 'admission': '2019-04-02T00:00:00',\n 'company_id': None,\n 'company_name': None,\n 'password': None\n }\n\nNew items can be deserialized by the same serializer: ::\n\n new_employee = {'fullname': 'Jobson Gomes', 'admission': '2018-02-03'}\n serializer.load(new_employee)\n >> \n\nSerializers do not commit into the database. You must do this by yourself: ::\n\n emp = serializer.load(new_employee)\n session.add(emp)\n session.commit()\n\n.. _`Generic Types`: https://docs.sqlalchemy.org/en/rel_1_2/core/type_basics.html#generic-types\n\nCustom Serializers\n..................\n\nFor anything beyond `Generic Types`_ we must extend the `ModelSerializer` class: ::\n\n class EmployeeSerializer(ModelSerializer):\n\n password = Field(load_only=True) # passwords should be only deserialized\n company = NestedModelField(Company) # dump company as nested object\n\n serializer = EmployeeSerializer(Employee)\n serializer.dump(emp)\n\n >> {'id': 1,\n 'fullname': 'Roberto Silva',\n 'admission': '2019-04-02T00:00:00',\n 'company': {'id': 3,\n 'name': 'Acme Co'\n }\n }\n\n\nContributing\n------------\n\nFor guidance on setting up a development environment and how to make a\ncontribution to serialchemy, see the `contributing guidelines`_.\n\n.. _contributing guidelines: https://github.com/ESSS/serialchemy/blob/master/CONTRIBUTING.rst\n\n\nRelease\n-------\nA reminder for the maintainers on how to make a new release.\n\nNote that the VERSION should folow the semantic versioning as X.Y.Z\nEx.: v1.0.5\n\n1. Create a ``release-VERSION`` branch from ``upstream/master``.\n2. Update ``CHANGELOG.rst``.\n3. Push a branch with the changes.\n4. Once all builds pass, push a ``VERSION`` tag to ``upstream``.\n5. Merge the PR.\n\n\n=======\nHistory\n=======\n\n0.3.0 (2019-17-07)\n------------------\n* Add the composite fields to list of properties of model, to serialize that fields if it type is in EXTRA_SERIALIZERS.\n* Fix error for SQLAlchemy composite attributes\n* Added free functions dump and load so users can quickly dump a SQLAlchemy model without having to instancialize\n ModelSerializer.\n\n0.2.0 (2019-03-22)\n------------------\n\n* Fix: Error when deserializing of nested models when SQLAlchemy model primary\n key attribute name differs from the column name\n* Allow EXTRA_SERIALIZERS to be defined in runtime\n* Check if a session was given when serializing/deserializing nested fields\n\n0.1.0 (2019-02-12)\n------------------\n\n* First release on PyPI.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/ESSS/serialchemy", "keywords": "serialchemy", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "serialchemy", "package_url": "https://pypi.org/project/serialchemy/", "platform": "", "project_url": "https://pypi.org/project/serialchemy/", "project_urls": { "Homepage": "http://github.com/ESSS/serialchemy" }, "release_url": "https://pypi.org/project/serialchemy/0.3.0/", "requires_dist": [ "sqlalchemy (>=1.1)", "sphinx (>=1.4) ; extra == 'docs'", "sphinx-rtd-theme ; extra == 'docs'", "sphinx-autodoc-typehints ; extra == 'docs'", "codecov ; extra == 'testing'", "pytest ; extra == 'testing'", "pytest-cov ; extra == 'testing'", "pytest-regressions ; extra == 'testing'", "pre-commit ; extra == 'testing'", "tox ; extra == 'testing'" ], "requires_python": ">=3.6", "summary": "Serializers for SQLAlchemy models.", "version": "0.3.0" }, "last_serial": 5945062, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "fb0835020859521add0b6abbd38e8720", "sha256": "023a42f9c6ba002733fb30db5e3df9178be854eb3aecdf93175507af9cbbdea6" }, "downloads": -1, "filename": "serialchemy-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fb0835020859521add0b6abbd38e8720", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 18897, "upload_time": "2019-02-12T15:20:12", "url": "https://files.pythonhosted.org/packages/12/c4/9751208c0c7d7cb46ec80fb97b3962d58d564fa5df454f4004d7ad1cde12/serialchemy-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aff8a7107cffcf69960498d29f9906e3", "sha256": "4c9206162deae2afee4bf3011ae01fdd626ae2a219fa56c3cea6989da69d050a" }, "downloads": -1, "filename": "serialchemy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "aff8a7107cffcf69960498d29f9906e3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17301, "upload_time": "2019-02-12T15:20:15", "url": "https://files.pythonhosted.org/packages/ac/11/992218ad1e27f7c9e1d999c91762ab909a771066ba0fe21243863677593b/serialchemy-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "93506e322ca0f641392e62581a8452e1", "sha256": "8393d37c98ea37891233e0b9f4b8e44062a630be83185996671dadb615be941b" }, "downloads": -1, "filename": "serialchemy-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "93506e322ca0f641392e62581a8452e1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 19515, "upload_time": "2019-03-23T02:30:12", "url": "https://files.pythonhosted.org/packages/3a/e6/e12113aeeed1a414c581f713fa9511bb0632a94deb9b87319f56c3733bc7/serialchemy-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba13c61fbd1606148ff847114ee4c6dc", "sha256": "8ef00f71153cc076709ed58ba00731768dbabbf15c237cd423df3c808b24a988" }, "downloads": -1, "filename": "serialchemy-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ba13c61fbd1606148ff847114ee4c6dc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17993, "upload_time": "2019-03-23T02:30:13", "url": "https://files.pythonhosted.org/packages/b2/f3/361c00d19e963868d809825077adcf2ca73037e661cd4f8e36ca4694c7a2/serialchemy-0.2.0.tar.gz" } ], "0.20.0rc6.post1": [ { "comment_text": "", "digests": { "md5": "c8d40a38daef403175a49c08db48cda4", "sha256": "ad6a3bb4302c0d67bfba537dbf7f1376bc51f1e8e69cb8e0983bc8b5fb34ec9a" }, "downloads": -1, "filename": "serialchemy-0.20.0rc6.post1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c8d40a38daef403175a49c08db48cda4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 23215, "upload_time": "2019-10-08T14:24:44", "url": "https://files.pythonhosted.org/packages/82/58/9fd89aa8c5e95ee7d934111b4541865e4722996443ea888c2456645d80cd/serialchemy-0.20.0rc6.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "163a4f9f3db3f4930a99b924885b0e87", "sha256": "63518744efec5f62574244bf92539f394d932be997e5de5addfc6ba0a97135f2" }, "downloads": -1, "filename": "serialchemy-0.20.0rc6.post1.tar.gz", "has_sig": false, "md5_digest": "163a4f9f3db3f4930a99b924885b0e87", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21610, "upload_time": "2019-10-08T14:24:46", "url": "https://files.pythonhosted.org/packages/ed/29/2c73196f3125c2db065d5b4de07e1982a4bfaebbd2f9d54f2fd81a7650e4/serialchemy-0.20.0rc6.post1.tar.gz" } ], "0.20.0rc6.post13": [ { "comment_text": "", "digests": { "md5": "12b1bbc07d1dcc9c64d8a971e52a2f3d", "sha256": "1e5f40edd419b32a6bf5c5ac5b1bb12069d1c4ed7535192b7c880132e1d450e7" }, "downloads": -1, "filename": "serialchemy-0.20.0rc6.post13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "12b1bbc07d1dcc9c64d8a971e52a2f3d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 23227, "upload_time": "2019-10-07T15:29:27", "url": "https://files.pythonhosted.org/packages/6e/41/e14dec138cf1c2f64704e314d69570d58f55872305ffca54562f3d4f011f/serialchemy-0.20.0rc6.post13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "afa9c861305e44dfacf27ad6ce6ae9ba", "sha256": "d2dd312b493d593d75df10a7726cb4ec00cfea03031619ea2048ef1fe4aa8329" }, "downloads": -1, "filename": "serialchemy-0.20.0rc6.post13.tar.gz", "has_sig": false, "md5_digest": "afa9c861305e44dfacf27ad6ce6ae9ba", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21612, "upload_time": "2019-10-07T15:29:39", "url": "https://files.pythonhosted.org/packages/3a/0b/34525307378a594c095f2ab62c6057876b1ec2aed6da004d96905ce80a85/serialchemy-0.20.0rc6.post13.tar.gz" } ], "0.20.0rc6.post4": [ { "comment_text": "", "digests": { "md5": "e271f4c24a901f248e07180c710a24e0", "sha256": "671b222e8dd246a1e71ed8b724dba483594c4e100257f3ebb3aa3dbc49e14d66" }, "downloads": -1, "filename": "serialchemy-0.20.0rc6.post4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e271f4c24a901f248e07180c710a24e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 23215, "upload_time": "2019-10-03T22:29:12", "url": "https://files.pythonhosted.org/packages/00/de/97057c2e29296d46f2581caf41a5526c9111ff3c80037a279ae401c3e504/serialchemy-0.20.0rc6.post4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a3a80703ea073d96b972a5d729f02df", "sha256": "f8081c2d970242e3ab23e25ac398f47eb777b0a7b5ba219ac5179201061016ac" }, "downloads": -1, "filename": "serialchemy-0.20.0rc6.post4.tar.gz", "has_sig": false, "md5_digest": "4a3a80703ea073d96b972a5d729f02df", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21617, "upload_time": "2019-10-03T22:29:14", "url": "https://files.pythonhosted.org/packages/75/3e/4461dca091150751cd866193790dd52464a1ccab396520b1b1fbd3bf5cb7/serialchemy-0.20.0rc6.post4.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f23d594b66bb500ab632aa8f12bdd40f", "sha256": "f37edfd5a40dd24c68c8d724526d9ecc9b22eb1efb134b757b252097d0f656f3" }, "downloads": -1, "filename": "serialchemy-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f23d594b66bb500ab632aa8f12bdd40f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 23097, "upload_time": "2019-10-03T17:17:58", "url": "https://files.pythonhosted.org/packages/98/2a/a978aa71190ced91a01f4a972a6c757782d0765cd28260895ada050ce5c9/serialchemy-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2a74a2284a21f4070c830a16de2969ad", "sha256": "ed989ee4ed759695a2ec116e7192c43036fa81dea9b2a682eedac7238b94b664" }, "downloads": -1, "filename": "serialchemy-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2a74a2284a21f4070c830a16de2969ad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21582, "upload_time": "2019-10-03T17:18:00", "url": "https://files.pythonhosted.org/packages/6c/78/fb782dad65f15a76592d59b41a8808b2f7b08b920491a10eef167273a9bf/serialchemy-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f23d594b66bb500ab632aa8f12bdd40f", "sha256": "f37edfd5a40dd24c68c8d724526d9ecc9b22eb1efb134b757b252097d0f656f3" }, "downloads": -1, "filename": "serialchemy-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f23d594b66bb500ab632aa8f12bdd40f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 23097, "upload_time": "2019-10-03T17:17:58", "url": "https://files.pythonhosted.org/packages/98/2a/a978aa71190ced91a01f4a972a6c757782d0765cd28260895ada050ce5c9/serialchemy-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2a74a2284a21f4070c830a16de2969ad", "sha256": "ed989ee4ed759695a2ec116e7192c43036fa81dea9b2a682eedac7238b94b664" }, "downloads": -1, "filename": "serialchemy-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2a74a2284a21f4070c830a16de2969ad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21582, "upload_time": "2019-10-03T17:18:00", "url": "https://files.pythonhosted.org/packages/6c/78/fb782dad65f15a76592d59b41a8808b2f7b08b920491a10eef167273a9bf/serialchemy-0.3.0.tar.gz" } ] }