{ "info": { "author": "UNKNOWN", "author_email": "UNKNOWN", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python", "Programming Language :: Python :: Implementation :: CPython" ], "description": "sqlash\n========================================\n\nsqlalchemy short hand (dict from object)\n\nsqlash is simple query language for dict creation from model object.\n\n\nOneToMany or ManyToOne Relation exmaple\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nmodels definition\n\n.. code:: python\n\n import sqlalchemy as sa\n import sqlalchemy.orm as orm\n from sqlalchemy.ext.declarative import declarative_base\n\n Base = declarative_base()\n\n\n class User(Base):\n __tablename__ = \"users\"\n id = sa.Column(sa.Integer, primary_key=True)\n name = sa.Column(sa.String(255), nullable=False)\n created_at = sa.Column(sa.DateTime())\n group_id = sa.Column(sa.Integer, sa.ForeignKey(\"groups.id\"))\n group = orm.relationship(\"Group\", backref=\"users\", uselist=False)\n\n\n class Group(Base):\n __tablename__ = \"groups\"\n id = sa.Column(sa.Integer, primary_key=True)\n name = sa.Column(sa.String(255), nullable=False)\n created_at = sa.Column(sa.DateTime())\n\n\n # create serializer\n\n from sqlash import Pair, SerializerFactory\n\n def datetime_for_human(dt, r):\n return dt.strftime(\"%Y/%m/%d %H:%M:%S\")\n\n def int_for_human(v, r):\n return \"this is {}\".format(v)\n\n factory = SerializerFactory({t.Integer: int_for_human, t.DateTime: datetime_for_human})\n serializer = factory()\n\nSerializer object is main of sqlash.\nconstructor of this object takes a mapping of sqlalchemy's field type to convertion function.\nand call Serializer.serialize() method for dict creation (e.g. json)\n\n\none to many example\n\n.. code:: python\n\n users = [\n User(name=\"boo\", created_at=datetime(2000, 1, 1)),\n User(name=\"yoo\", created_at=datetime(2000, 1, 1)),\n ]\n group = Group(name=\"foo\", users=users)\n print(serializer.serialize(group, [\"name\", Pair(\"users\", [\"name\"])]))\n # {'users': [{'name': 'boo'}, {'name': 'yoo'}], 'name': 'foo'}\n\ncall Serializer.serialize() with [\"name\", Pair(\"users\", [\"name\"])]. \nso return dict including only names.\n\nmany to one\n\n.. code:: python\n\n user = User(name=\"boo\", created_at=datetime(2000, 1, 1), group=group)\n print(serializer.serialize(user, [\"name\", Pair(\"group\", [\"name\"])]))\n # {'group': {'name': 'foo'}, 'name': 'boo'}\n\npassed query([\"name\", Pair(\"group\", [\"name\"])]) is almost same that one to many relation case.\nthis is detecting direction of relationship by serializer object, automatically.\n\nManyToMany relation example\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nmay to many relation is also support.\n\nmodels definition\n\n.. code:: python\n\n members_to_teams = sa.Table(\n \"members_to_teams\", Base.metadata,\n sa.Column(\"member_id\", sa.Integer, sa.ForeignKey(\"members.id\")),\n sa.Column(\"team_id\", sa.Integer, sa.ForeignKey(\"teams.id\")),\n )\n\n\n class Member(Base):\n __tablename__ = \"members\"\n id = sa.Column(sa.Integer, primary_key=True)\n name = sa.Column(sa.String(255), nullable=False)\n created_at = sa.Column(sa.DateTime())\n teams = orm.relationship(\"Team\", backref=\"members\", secondary=members_to_teams)\n\n\n class Team(Base):\n __tablename__ = \"teams\"\n id = sa.Column(sa.Integer, primary_key=True)\n name = sa.Column(sa.String(255), nullable=False)\n created_at = sa.Column(sa.DateTime())\n\n\nmany to many exmaples\n\n.. code:: python\n\n team0 = Team(name=\"foo\")\n team1 = Team(name=\"boo\")\n member0 = Member(name=\"x\")\n member1 = Member(name=\"y\")\n member2 = Member(name=\"z\")\n team0.members.append(member0)\n team0.members.append(member1)\n team1.members.append(member1)\n team1.members.append(member2)\n\n print(serializer.serialize(team0, [\"name\", \"created_at\", Pair(\"members\", [\"name\", \"created_at\"])]))\n # {'created_at': None, 'name': 'foo',\n # 'members': [{'created_at': None, 'name': 'x'},\n # {'created_at': None, 'name': 'y'}]}\n\ncall with [\"name\", \"created_at\", Pair(\"members\", [\"name\", \"created_at\"])]. so, collecting name and created.\n\nabbreviation\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\"*\" is all of fields, but excludes relationships and foreignkeys\n\n.. code:: python\n\n user = User(group_id=1, name=\"foo\", created_at=datetime(2000, 1, 1))\n result = serializer.serialize(user, [\"*\"])\n assert result == {'name': 'foo', 'created_at': '2000/01/01 00:00:00', 'id': 'this is None'}\n\nrenaming\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\npassing renaming options call factory, then renaming key-name of dict.\n\n.. code:: python\n\n factory = SerializerFactory({t.Integer: int_for_human, t.DateTime: datetime_for_human})\n target = factory({\"name\": \"Name\", \"created_at\": \"CreatedAt\", \"id\": \"Id\"})\n result = target.serialize(user, [\"*\"])\n assert result == {'Name': 'foo', 'CreatedAt': '2000/01/01 00:00:00', 'Id': 'this is None'}", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": "", "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "sqlash", "package_url": "https://pypi.org/project/sqlash/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/sqlash/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/sqlash/0.1.1/", "requires_dist": null, "requires_python": null, "summary": "sqlalchemy shorthand (dict from object)", "version": "0.1.1" }, "last_serial": 1273618, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "140a9719455e7e8a4af16f67ea01d62a", "sha256": "9cc907c7973ec04dad0f2b7bc79aca0c84ed97bf9695bce41720cea10dcfb046" }, "downloads": -1, "filename": "sqlash-0.1.tar.gz", "has_sig": false, "md5_digest": "140a9719455e7e8a4af16f67ea01d62a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5485, "upload_time": "2014-06-27T13:36:26", "url": "https://files.pythonhosted.org/packages/76/4c/4fe6817dac887f9f43ae7f19110d50b8cdcb6691c5acb4aa9d02369f3dbe/sqlash-0.1.tar.gz" } ], "0.1.1": [] }, "urls": [] }