{ "info": { "author": "Insight Industry Inc.", "author_email": "software@insightindustry.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Database :: Front-Ends", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "####################################################\nSQLAthanor\n####################################################\n\n**Serialization/De-serialization Support for the SQLAlchemy Declarative ORM**\n\n.. image:: https://sqlathanor.readthedocs.io/en/latest/_static/sqlathanor-logo-200x100.png\n :align: right\n :alt: SQLAthanor - Serialization/De-serialization for SQLAlchemy\n :target: https://sqlathanor.readthedocs.io/en/latest/index.html\n\n.. list-table::\n :widths: 10 90\n :header-rows: 1\n\n * - Branch\n - Unit Tests\n * - `latest `_\n -\n .. image:: https://travis-ci.org/insightindustry/sqlathanor.svg?branch=master\n :target: https://travis-ci.org/insightindustry/sqlathanor\n :alt: Build Status (Travis CI)\n\n .. image:: https://codecov.io/gh/insightindustry/sqlathanor/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/insightindustry/sqlathanor\n :alt: Code Coverage Status (Codecov)\n\n .. image:: https://readthedocs.org/projects/sqlathanor/badge/?version=latest\n :target: http://sqlathanor.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status (ReadTheDocs)\n\n * - `v.0.5 `_\n -\n .. image:: https://travis-ci.org/insightindustry/sqlathanor.svg?branch=v.0.5.0\n :target: https://travis-ci.org/insightindustry/sqlathanor\n :alt: Build Status (Travis CI)\n\n .. image:: https://codecov.io/gh/insightindustry/sqlathanor/branch/v.0.5.0/graph/badge.svg\n :target: https://codecov.io/gh/insightindustry/sqlathanor\n :alt: Code Coverage Status (Codecov)\n\n .. image:: https://readthedocs.org/projects/sqlathanor/badge/?version=v.0.5.0\n :target: http://sqlathanor.readthedocs.io/en/latest/?badge=v.0.5.0\n :alt: Documentation Status (ReadTheDocs)\n\n * - `v.0.4 `_\n -\n .. image:: https://travis-ci.org/insightindustry/sqlathanor.svg?branch=v.0.4.0\n :target: https://travis-ci.org/insightindustry/sqlathanor\n :alt: Build Status (Travis CI)\n\n .. image:: https://codecov.io/gh/insightindustry/sqlathanor/branch/v.0.4.0/graph/badge.svg\n :target: https://codecov.io/gh/insightindustry/sqlathanor\n :alt: Code Coverage Status (Codecov)\n\n .. image:: https://readthedocs.org/projects/sqlathanor/badge/?version=v.0.4.0\n :target: http://sqlathanor.readthedocs.io/en/latest/?badge=v.0.4.0\n :alt: Documentation Status (ReadTheDocs)\n\n * - `v.0.3 `_\n -\n .. image:: https://travis-ci.org/insightindustry/sqlathanor.svg?branch=v.0.3.1\n :target: https://travis-ci.org/insightindustry/sqlathanor\n :alt: Build Status (Travis CI)\n\n .. image:: https://codecov.io/gh/insightindustry/sqlathanor/branch/v.0.3.1/graph/badge.svg\n :target: https://codecov.io/gh/insightindustry/sqlathanor\n :alt: Code Coverage Status (Codecov)\n\n .. image:: https://readthedocs.org/projects/sqlathanor/badge/?version=v.0.3.1\n :target: http://sqlathanor.readthedocs.io/en/latest/?badge=v.0.3.1\n :alt: Documentation Status (ReadTheDocs)\n\n * - `v.0.2 `_\n -\n .. image:: https://travis-ci.org/insightindustry/sqlathanor.svg?branch=v.0.2.2\n :target: https://travis-ci.org/insightindustry/sqlathanor\n :alt: Build Status (Travis CI)\n\n .. image:: https://codecov.io/gh/insightindustry/sqlathanor/branch/v.0.2.2/graph/badge.svg\n :target: https://codecov.io/gh/insightindustry/sqlathanor\n :alt: Code Coverage Status (Codecov)\n\n .. image:: https://readthedocs.org/projects/sqlathanor/badge/?version=v.0.2.2\n :target: http://sqlathanor.readthedocs.io/en/latest/?badge=v.0.2.2\n :alt: Documentation Status (ReadTheDocs)\n\n * - `v.0.1 `_\n -\n .. image:: https://travis-ci.org/insightindustry/sqlathanor.svg?branch=v.0.1.1\n :target: https://travis-ci.org/insightindustry/sqlathanor\n :alt: Build Status (Travis CI)\n\n .. image:: https://codecov.io/gh/insightindustry/sqlathanor/branch/v.0.1.1/graph/badge.svg\n :target: https://codecov.io/gh/insightindustry/sqlathanor\n :alt: Code Coverage Status (Codecov)\n\n .. image:: https://readthedocs.org/projects/sqlathanor/badge/?version=v.0.1.1\n :target: http://sqlathanor.readthedocs.io/en/latest/?badge=v.0.1.1\n :alt: Documentation Status (ReadTheDocs)\n\n * - `develop `_\n -\n .. image:: https://travis-ci.org/insightindustry/sqlathanor.svg?branch=develop\n :target: https://travis-ci.org/insightindustry/sqlathanor\n :alt: Build Status (Travis CI)\n\n .. image:: https://codecov.io/gh/insightindustry/sqlathanor/branch/develop/graph/badge.svg\n :target: https://codecov.io/gh/insightindustry/sqlathanor\n :alt: Code Coverage Status (Codecov)\n\n .. image:: https://readthedocs.org/projects/sqlathanor/badge/?version=develop\n :target: http://sqlathanor.readthedocs.io/en/latest/?badge=develop\n :alt: Documentation Status (ReadTheDocs)\n\n**SQLAthanor** is a Python library that extends `SQLAlchemy `_'s fantastic\n`Declarative ORM `_ to provide\neasy-to-use record serialization/de-serialization with support for:\n\n * JSON\n * CSV\n * YAML\n * Python dict\n\nThe library works as a drop-in extension - change one line of existing code, and\nit should just work. Furthermore, it has been extensively tested on Python 2.7,\n3.4, 3.5, 3.6, and 3.7 using `SQLAlchemy `_ 0.9 and higher.\n\n**COMPLETE DOCUMENTATION:** http://sqlathanor.readthedocs.org/en/latest/index.html\n\n.. contents::\n :depth: 3\n :backlinks: entry\n\n-----------------\n\n***************\nInstallation\n***************\n\nTo install **SQLAthanor**, just execute:\n\n.. code:: bash\n\n $ pip install sqlathanor\n\n\nDependencies\n==============\n\n.. list-table::\n :widths: 50 50\n :header-rows: 1\n\n * - Python 3.x\n - Python 2.7\n * - | * `SQLAlchemy v.0.9 `_ or higher\n | * `PyYAML v3.10 `_ or higher\n | * `simplejson v3.0 `_ or higher\n | * `Validator-Collection v1.3.0 `_ or higher\n - | * `SQLAlchemy v.0.9 `_ or higher\n | * `PyYAML v3.10 `_ or higher\n | * `simplejson v3.0 `_ or higher\n | * `Validator-Collection v1.3.0 `_ or higher\n\n-------------\n\n************************************\nWhy SQLAthanor?\n************************************\n\nOdds are you've used `SQLAlchemy `_ before. And if\nyou haven't, why on earth not? It is hands down the best relational database\ntoolkit and Object Relational Mapper (ORM) available for Python, and\nhas helped me quickly write code for many APIs, software platforms, and data science\nprojects. Just look at some of these great `features `_.\n\nAs its name suggests, SQLAlchemy focuses on the problem of connecting your Python\ncode to an underlying relational (SQL) database. That's a super hard problem, especially\nwhen you consider the complexity of abstraction, different SQL databases, different SQL\ndialects, performance optimization, etc. It ain't easy, and the SQLAlchemy team\nhas spent years building one of the most elegant solutions out there.\n\nBut as hard as Pythonically communicating with a database is, in the real world\nwith microservices, serverless architectures, RESTful APIs and the like we often\nneed to do more with the data than read or write from/to our database. In almost\nall of the projects I've worked on over the last two decades, I've had to:\n\n * hand data off in some fashion (serialize) for another\n program (possibly written by someone else in another programming language) to work\n with, or\n * accept and interpret data (de-serialize) received\n from some other program (possibly written by someone else in another programming\n language).\n\nPython objects (pickled or not) are great, but they're rarely\nthe best way of transmitting data over the wire, or communicating data between\nindependent applications. Which is where formats like JSON, CSV, and YAML come in.\n\nSo when writing many Python APIs, I found myself writing methods to convert my\nSQLAlchemy records (technically, model instances) into JSON\nor creating new SQLAlchemy records based on data I received in JSON. So after writing\nsimilar methods many times over, I figured a better approach would be to write the\nserialization/de-serialization code just once, and then re-use it across all of\nmy various projects.\n\nWhich is how **SQLAthanor** came about.\n\nIt adds simple methods like `to_json() `_,\n`new_from_csv() `_, and\n`update_from_csv() `_\nto your SQLAlchemy declarative models and provides powerful configuration options that give you tons of flexibility.\n\nKey SQLAthanor Features\n==========================\n\n* **Easy to adopt**: Just tweak your existing SQLAlchemy ``import`` statements and\n you're good to go.\n* With one method call, convert SQLAlchemy model instances to:\n\n * CSV records\n * JSON objects\n * YAML objects\n * Python ``dict`` objects (technically, ``OrderedDict`` objects but they\n behave just like ``dict``)\n\n* With one method call, create or update SQLAlchemy model instances from:\n\n * Python ``dict`` or ``OrderedDict`` objects\n * CSV records\n * JSON objects\n * YAML objects\n\n* Decide which serialization formats you want to support for which models.\n* Decide which columns/attributes you want to include in their serialized form\n (and pick different columns for different formats, too).\n* Default validation for de-serialized data for every SQLAlchemy data type.\n* Customize the validation used when de-serializing particular columns to match\n your needs.\n* Works with Declarative Reflection and the SQLAlchemy Automap extension.\n* Programmatically generate Declarative Base Models from serialized data.\n* Programmatically generate SQLAlchemy ``Table`` objects from serialized data.\n\n\n**SQLAthanor** vs Alternatives\n================================\n\nFor a comparison of **SQLAthanor** to various alternative\nserialization/de-serialization approaches, please see full documentation:\nhttps://sqlathanor.readthedocs.io/en/latest/index.html#sqlathanor-vs-alternatives\n\n---------------\n\n***********************************\nComplete Documentation\n***********************************\n\n**SQLAthanor** is a complex library that integrates with other complex libraries.\nWe strongly recommend that you review our comprehensive documentation at:\n\n https://sqlathanor.readthedocs.org/en/latest/index.html\n\n--------------\n\n*********************\nQuestions and Issues\n*********************\n\nYou can ask questions and report issues on the project's\n`Github Issues Page `_\n\n-----------------\n\n*********************\nContributing\n*********************\n\nWe welcome contributions and pull requests! For more information, please see the\n`Contributor Guide `_\n\n-------------------\n\n*********************\nTesting\n*********************\n\nWe use `TravisCI `_ for our build automation,\n`Codecov.io `_ for our test coverage, and\n`ReadTheDocs `_ for our documentation.\n\nDetailed information about our test suite and how to run tests locally can be\nfound in our `Testing Reference `_.\n\n--------------------\n\n**********************\nLicense\n**********************\n\n**SQLAthanor** is made available under an\n`MIT License `_.\n\n.. _SQLAlchemy: http://www.sqlalchemy.org\n.. _Flask-SQLAlchemy: http://flask-sqlalchemy.pocoo.org/2.3/\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://sqlathanor.readthedocs.io/en/latest", "keywords": "sqlalchemy ORM model extension serialization CSV JSON YAML dict deserialization", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "sqlathanor", "package_url": "https://pypi.org/project/sqlathanor/", "platform": "", "project_url": "https://pypi.org/project/sqlathanor/", "project_urls": { "Bug Reports": "https://github.com/insightindustry/sqlathanor/issues", "Documentation": "https://sqlathanor.readthedocs.io/en/latest", "Homepage": "https://sqlathanor.readthedocs.io/en/latest", "Say Thanks!": "https://saythanks.io/to/sqlathanor", "Source": "https://github.com/insightindustry/sqlathanor/" }, "release_url": "https://pypi.org/project/sqlathanor/0.5.0/", "requires_dist": [ "validator-collection (>=1.3.0)", "simplejson (>=3.0)", "sqlalchemy (>=0.9); python_version < \"3.7\"", "PyYAML (>=3.10); python_version < \"3.7\"", "sqlalchemy (>=0.10); python_version > \"3.6\"", "PyYAML (>=3.13); python_version > \"3.6\"", "check-manifest; extra == 'dev'", "sphinx; extra == 'dev'", "sphinx-rtd-theme; extra == 'dev'", "sphinx-tabs; extra == 'dev'", "readme-renderer; extra == 'dev'", "restview; extra == 'dev'", "Flask-SQLAlchemy; extra == 'dev'", "coverage; extra == 'test'", "pytest; extra == 'test'", "pytest-benchmark; extra == 'test'", "pytest-cov; extra == 'test'", "tox; extra == 'test'", "codecov; extra == 'test'", "Flask-SQLAlchemy; extra == 'test'" ], "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "summary": "Serialization/De-serialization Support for the SQLAlchemy Declarative ORM", "version": "0.5.0" }, "last_serial": 5724869, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "354641e3fc4f4c3a6761aa88b57e4e9d", "sha256": "dd6e845a7b4f0e83385148243b43cc32e6d0bcd5e7253da672d4ffa9ba499b04" }, "downloads": -1, "filename": "sqlathanor-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "354641e3fc4f4c3a6761aa88b57e4e9d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 37908, "upload_time": "2018-07-11T14:59:05", "url": "https://files.pythonhosted.org/packages/56/bd/bf1a75a3c7dd929714a0c372c938db99e0d7a9153a64fc89616aa77d762b/sqlathanor-0.1.0-py2.py3-none-any.whl" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "9998716197a1d22cae83dd2ba39a82b2", "sha256": "580e047d40378342b1311f2b4ee30802f51bc265ed3d41d3b7b4b2bc23ae384a" }, "downloads": -1, "filename": "sqlathanor-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9998716197a1d22cae83dd2ba39a82b2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 38078, "upload_time": "2018-07-21T21:44:44", "url": "https://files.pythonhosted.org/packages/7a/f7/3fa6835ee0c44b0c0216f81c87aead85602c7ba0b53fa7fe341bdede3415/sqlathanor-0.1.1-py2.py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "a015f5a48f99359b2835399432c0d303", "sha256": "68aa1c22236503240b7915be6d886ddb6868b8f37a49be6a8de6347fe95b682e" }, "downloads": -1, "filename": "sqlathanor-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a015f5a48f99359b2835399432c0d303", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 41385, "upload_time": "2018-07-25T04:00:16", "url": "https://files.pythonhosted.org/packages/0e/1e/301ddfa09253e26edac342074af001186ddb18eb108262bb36afe74ae7fa/sqlathanor-0.2.0-py2.py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "e8a274b8f44e8c6e267b354199e232d2", "sha256": "d8200bbeac9106e0ba935716c1d3660bcca91ea3ffc65ec635eebf03309119a4" }, "downloads": -1, "filename": "sqlathanor-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e8a274b8f44e8c6e267b354199e232d2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 41382, "upload_time": "2018-07-25T12:10:50", "url": "https://files.pythonhosted.org/packages/db/ad/cebd708e79032f0af7b260a5985dd4d65a321d2ed59c6f46c040b89325a8/sqlathanor-0.2.1-py2.py3-none-any.whl" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "bbef91f47a110b5f4a0c1a3a6ef8c4ff", "sha256": "1cd5a17b179f13de01036debaba35f8d330ea5f0d97836009af6bdae5ea49ed6" }, "downloads": -1, "filename": "sqlathanor-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bbef91f47a110b5f4a0c1a3a6ef8c4ff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 41387, "upload_time": "2018-07-26T12:49:53", "url": "https://files.pythonhosted.org/packages/11/eb/6e929c88199c88cf842c963c2d928ba0715acd9397d07f2187b5738a245c/sqlathanor-0.2.2-py2.py3-none-any.whl" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6eaf396fa2e0df1b48518254c4e5141e", "sha256": "6ef7ac0684e456f2f4f8e09063c9dec869eba6e6a948a282b9f0b4ba35a207c8" }, "downloads": -1, "filename": "sqlathanor-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6eaf396fa2e0df1b48518254c4e5141e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 62595, "upload_time": "2018-08-10T16:24:19", "url": "https://files.pythonhosted.org/packages/64/eb/872fba1fef65dabbdb11bcddcadb53385709cca2ae9caa431e01d8c510b2/sqlathanor-0.3.0-py2.py3-none-any.whl" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c45f6c4586a56ad1a9cbe15c3aee1c38", "sha256": "199add5feb29947c5a2fed3bda20f5b71394e688f889d6076f67a8205d63afa6" }, "downloads": -1, "filename": "sqlathanor-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c45f6c4586a56ad1a9cbe15c3aee1c38", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 62671, "upload_time": "2018-11-28T01:27:17", "url": "https://files.pythonhosted.org/packages/31/3a/09477f36338df4fffb0f17e3a427f3f6419e626b4943c7920393034ab329/sqlathanor-0.3.1-py2.py3-none-any.whl" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "6be6c487d8589730cc530c4787cbb5d0", "sha256": "97ea7cf0b43b7eb0ecc1c963966a97792e35bf6476a7cabea0de0cc348dcd278" }, "downloads": -1, "filename": "sqlathanor-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6be6c487d8589730cc530c4787cbb5d0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 65150, "upload_time": "2019-01-21T14:45:28", "url": "https://files.pythonhosted.org/packages/0e/05/d8e98c926a45727a29241dfefb5283d80d178f1ade97caf64513e3ae27be/sqlathanor-0.4.0-py2.py3-none-any.whl" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "17a01d6b8d6e0b9c94d0354fca0ef8a3", "sha256": "067fcb3e8f8f6fd1c2bdc74aa88d347e40325fd7ae37a39746ff328d6d14051d" }, "downloads": -1, "filename": "sqlathanor-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17a01d6b8d6e0b9c94d0354fca0ef8a3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 65639, "upload_time": "2019-08-24T17:29:35", "url": "https://files.pythonhosted.org/packages/47/15/2596a74213375773d933e5c3ba36da3a78c5c1d2d468a37cdfbc88482faa/sqlathanor-0.5.0-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "17a01d6b8d6e0b9c94d0354fca0ef8a3", "sha256": "067fcb3e8f8f6fd1c2bdc74aa88d347e40325fd7ae37a39746ff328d6d14051d" }, "downloads": -1, "filename": "sqlathanor-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17a01d6b8d6e0b9c94d0354fca0ef8a3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 65639, "upload_time": "2019-08-24T17:29:35", "url": "https://files.pythonhosted.org/packages/47/15/2596a74213375773d933e5c3ba36da3a78c5c1d2d468a37cdfbc88482faa/sqlathanor-0.5.0-py2.py3-none-any.whl" } ] }