{ "info": { "author": "Edward Kim", "author_email": "onward.edkim@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "SQLAlchemy-Norm\r\n===============\r\n\r\n|Build Status| |Version Status|\r\n\r\nWorking in Progress. Normalize SQLAlchemy Object to Plain dict and list. Convert SQLAlchemy to Dict without pain!\r\n\r\n::\r\n\r\n pip install sqlalchemy-norm\r\n\r\n\r\nAn example of a simple code:\r\n\r\n.. code-block:: python\r\n\r\n from yourapp.database import Base, session\r\n from sqlalchemy_norm import Normalizable\r\n\r\n class User(Base, Normalizable):\r\n # ...\r\n\r\n me = User('Edward')\r\n norm = me.vars() # {\"name\": \"Edward\"}\r\n\r\n users = session.query(User).all()\r\n norms = [user.vars() for user in users]\r\n \"\"\"\r\n [\r\n {\"name\": \"Edward\"},\r\n {\"name\": \"Koala\"},\r\n {\"name\": \"Kangaroo\"}\r\n ]\r\n \"\"\"\r\n\r\nIf you like,\r\n\r\n::\r\n\r\n python setup.py test\r\n\r\n\r\nWhy?\r\n----\r\n\r\nWhen I tried to convert from SQLAlchemy object to JSON, it's not an easy job\r\nthan I expected. If SQLAlchemy objects could convert to plain objects, it will\r\nbe better to handle it for most of converting situations, ``jsonify`` in Flask,\r\nespecially.\r\n\r\n\r\nContributing\r\n------------\r\n\r\nI'm not good at python and I don't know pythonic code that much. If you have\r\nany idea or opinion about the code, please leave an issue on the issue tracker.\r\nContributing the code is always welcome.\r\n\r\n\r\nLicense\r\n-------\r\n\r\nThis software is licensed under the `New BSD License`. See the ``LICENSE``\r\nfile in the top distribution directory for the full license text.\r\n\r\n\r\nUsage\r\n-----\r\n\r\nSimple Model\r\n~~~~~~~~~~~~\r\n\r\nIn model,\r\n\r\n.. code-block:: python\r\n\r\n from datetime import datetime\r\n\r\n from sqlalchemy import Column, Integer, String, DateTime\r\n from sqlalchemy_norm import Normalizable\r\n\r\n from yourapp.database import Base\r\n\r\n\r\n class User(Base, Normalizable):\r\n __tablename__ = 'users'\r\n\r\n id = Column(Integer, primary_key=True)\r\n name = Column(String)\r\n nickname = Column(String)\r\n password = Column(String) # do not save password as plain string\r\n point = Column(Integer)\r\n created_at = Column(DateTime)\r\n\r\n # specify your dict strcutrue inside the model\r\n __excludes__ = ['password']\r\n __includes__ = ['display_name']\r\n\r\n @property\r\n def display_name(self):\r\n return \"%s (%s)\" % (self.nickname, self.name)\r\n\r\n def __init__(self, name, nickname=None, created_at=datetime.now()):\r\n self.name = name\r\n self.nickname = nickname\r\n self.created_at = created_at\r\n\r\nNow we can use it like below:\r\n\r\n.. code-block:: python\r\n\r\n from models import User\r\n\r\n me = User(\"Edward\", \"haruair\")\r\n me.password = \"strong password\"\r\n me.point = 42\r\n\r\n print(me.vars())\r\n \"\"\"\r\n {\r\n 'id': 1,\r\n 'point': 42,\r\n 'name': 'Edward',\r\n 'nickname': 'haruair',\r\n 'created_at': '2016-01-01T00:00:00.123456',\r\n 'display_name': 'haruair (Edward)'\r\n }\r\n \"\"\"\r\n\r\n print(me.vars(includes=[\"password\"], excludes=[\"display_name\", \"name\", \"created_at\"]))\r\n # {'nickname': 'haruair', 'password': 'strong password', 'point': 100}\r\n\r\n print(me.vars(includes_only=[\"display_name\"]))\r\n # {'display_name': 'haruair (Edward)'}\r\n\r\n\r\nComplex Model\r\n~~~~~~~~~~~~~\r\n\r\nRelationship between models,\r\n\r\n.. code-block:: python\r\n\r\n from sqlalchemy import ForeignKey\r\n from sqlalchemy.orm import relationship, backref\r\n\r\n class Address(Base, Normalizable):\r\n __tablename__ = 'addresses'\r\n id = Column(Integer, primary_key=True)\r\n email = Column(String, nullable=False)\r\n\r\n user_id = Column(Integer, ForeignKey('users.id'))\r\n user = relationship(\"User\", backref=backref('addresses', order_by=id))\r\n\r\n def __init__(self, email):\r\n self.email = email\r\n\r\n\r\n.. code-block:: python\r\n\r\n from models import User, Addresses\r\n from yourapp.database import session\r\n\r\n me = User(\"Edward\", \"haruair\")\r\n\r\n me.addresses = [\r\n Address(\"edward@example.com\"),\r\n Address(\"haruair@example.com\")\r\n ]\r\n\r\n session.add(me)\r\n session.commit()\r\n\r\n print(me.vars(includes=[\"addresses\"]))\r\n \"\"\"\r\n {\r\n 'id': 1,\r\n 'addresses': [\r\n {'email': 'edward@example.com', 'id': 1, 'user_id': 1},\r\n {'email': 'haruair@example.com', 'id': 2, 'user_id': 1}\r\n ],\r\n 'display_name': 'haruair (Edward)',\r\n 'point': None,\r\n 'nickname': 'haruair',\r\n 'created_at': '2016-09-16T14:16:37.359005',\r\n 'name': 'Edward'\r\n }\r\n \"\"\"\r\n\r\nDot Notation\r\n~~~~~~~~~~~~\r\n\r\nSimple dot notation support. Not much fancy but it's worth than nothing.\r\n\r\n.. code-block:: python\r\n\r\n norm1 = me.vars(\r\n includes=['primary_address'],\r\n excludes=[\r\n 'primary_address.suburb',\r\n 'primary_address.state'\r\n ]\r\n )\r\n\r\n norm2 = me.vars(\r\n includes_only=[\r\n 'id',\r\n 'primary_address',\r\n 'primary_address.phone'\r\n ]\r\n )\r\n\r\nIf you need more examples, please check test cases in ``tests`` directory.\r\n\r\n\r\n.. |Build Status| image:: https://travis-ci.org/haruair/sqlalchemy-norm.svg?branch=master\r\n :target: https://travis-ci.org/haruair/sqlalchemy-norm\r\n.. |Version Status| image:: https://img.shields.io/pypi/v/SQLAlchemy-Norm.svg\r\n :target: https://pypi.python.org/pypi/SQLAlchemy-Norm/", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/haruair/sqlalchemy-norm", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "SQLAlchemy-Norm", "package_url": "https://pypi.org/project/SQLAlchemy-Norm/", "platform": "any", "project_url": "https://pypi.org/project/SQLAlchemy-Norm/", "project_urls": { "Homepage": "https://github.com/haruair/sqlalchemy-norm" }, "release_url": "https://pypi.org/project/SQLAlchemy-Norm/0.0.5/", "requires_dist": null, "requires_python": "", "summary": "Normalize SQLAlchemy Object to Plain dict and list", "version": "0.0.5" }, "last_serial": 2347476, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "1922cef63c2d00e66cf95d51507ed9ac", "sha256": "797a35013acac6f0a80f3bbc880af2b6e7414014b56401f06c7fcbfd1c9a0d82" }, "downloads": -1, "filename": "SQLAlchemy-Norm-0.0.1.tar.gz", "has_sig": false, "md5_digest": "1922cef63c2d00e66cf95d51507ed9ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4201, "upload_time": "2016-09-16T05:51:36", "url": "https://files.pythonhosted.org/packages/67/ac/7a05da64c20c42746f6e50c60efbdbba22a9efa958c3800d4ae941821379/SQLAlchemy-Norm-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "55504c0e3549b983765ca1f7e33c3acb", "sha256": "a406cf2765e83bcb3486ddc09cee60e0799c31bbf54379a24c83f38f1a3768aa" }, "downloads": -1, "filename": "SQLAlchemy-Norm-0.0.2.tar.gz", "has_sig": false, "md5_digest": "55504c0e3549b983765ca1f7e33c3acb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5209, "upload_time": "2016-09-16T05:55:30", "url": "https://files.pythonhosted.org/packages/d4/fa/52e7a9def1d0c785a9cd718c23c2e276bb40664c8cae7c3fe8bc53f9f2c7/SQLAlchemy-Norm-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "dc43e2f19aa7b69c073fd05f6efa1bad", "sha256": "5cba20d690c0f05d009229c812f5f686482c060c805d1b8e89c6eee7e5135190" }, "downloads": -1, "filename": "SQLAlchemy-Norm-0.0.3.tar.gz", "has_sig": false, "md5_digest": "dc43e2f19aa7b69c073fd05f6efa1bad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5882, "upload_time": "2016-09-16T06:11:00", "url": "https://files.pythonhosted.org/packages/f5/34/951c962f3b01cf6549c29667569ee159fec39bc41b36d4742f8d632693d3/SQLAlchemy-Norm-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "f0f254bd51af431d9205507a18db0106", "sha256": "305d7a6f3572f1ea39a394390ff037cf29ad737652247b8a048b4946b70128b3" }, "downloads": -1, "filename": "SQLAlchemy-Norm-0.0.4.tar.gz", "has_sig": false, "md5_digest": "f0f254bd51af431d9205507a18db0106", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5975, "upload_time": "2016-09-16T11:53:32", "url": "https://files.pythonhosted.org/packages/48/0f/ed07fd6d40d9c083195ca19c371d8107ea684a4a264b8a9b8e08ececbaa4/SQLAlchemy-Norm-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "e6963251bad3f0e82f608f6ac80d6310", "sha256": "0b37cfdd230d0e808dfcdbc34bb11400a156b905c75f77e6e70f58d9aca98ecd" }, "downloads": -1, "filename": "SQLAlchemy-Norm-0.0.5.tar.gz", "has_sig": false, "md5_digest": "e6963251bad3f0e82f608f6ac80d6310", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7501, "upload_time": "2016-09-16T16:49:57", "url": "https://files.pythonhosted.org/packages/98/3b/90f63c29cb07e9e94a943fb478840efa78cb45ab658a537748db7c339ba1/SQLAlchemy-Norm-0.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e6963251bad3f0e82f608f6ac80d6310", "sha256": "0b37cfdd230d0e808dfcdbc34bb11400a156b905c75f77e6e70f58d9aca98ecd" }, "downloads": -1, "filename": "SQLAlchemy-Norm-0.0.5.tar.gz", "has_sig": false, "md5_digest": "e6963251bad3f0e82f608f6ac80d6310", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7501, "upload_time": "2016-09-16T16:49:57", "url": "https://files.pythonhosted.org/packages/98/3b/90f63c29cb07e9e94a943fb478840efa78cb45ab658a537748db7c339ba1/SQLAlchemy-Norm-0.0.5.tar.gz" } ] }