{ "info": { "author": "James Keys", "author_email": "james.k@cloudhm.co.th", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5" ], "description": "## Introduction\n\nResync is a Django-ORM inspired wrapper around the official rethinkdb driver's (currently undocumented) asyncio connection class.\n\n### Usage Examples\n\n```python\nimport asyncio\nimport resync\nfrom resync import fields\nfrom resync.models import Model, NestedDocument\n\nfrom myapp.auth.models import User\n\n\nclass Grommet(NestedDocument):\n \"\"\"\n Nested documents don't have a table associated, but allow you to define a\n schema for arbitrary json sub-documents in a model.\n \"\"\"\n weight = fields.FloatField()\n enabled = fields.BooleanField(default=False)\n\n\nclass Widget(Model):\n \"\"\"\n Model classes refer to a table in the database. By default, the table\n name is the lowercased name of the class.\n \"\"\"\n\n id = fields.StrField()\n grommet = fields.NestedDocumentField(Grommet)\n foo = fields.StrField()\n owner = fields.ForeignKeyField(User)\n\n\nasync def create_widget(user: User) -> None:\n \"\"\"\n Model objects can be created and manipulated like ordinary python objects,\n then saved to the database.\n \"\"\"\n new_widget = Widget(owner=user, foo='bar')\n new_widget.grommet = Grommet(weight=15.0)\n await new_widget.save()\n print(new_widget.id) # '45226082-976e-4226-b2c7-0d2c86c45b73': generated by rethinkdb\n\n\nasync def get_widget_by_id(id: str) -> Widget:\n \"\"\"\n Use the 'objects' class attribute to query the database to retrieve an\n instance.\n \"\"\"\n widget = await Widget.objects.get(id=id)\n return widget\n\n\nasync def get_all_widgets() -> typings.List[Widget]:\n \"\"\"\n Querysets can be `await`ed to get all the results in a list ...\n \"\"\"\n widgets = await Widget.objects.all()\n return widgets\n\n\nasync def send_all_widgets_to_socket(socket: aiohttp.web.WebSocketResponse) -> None:\n \"\"\"\n ... or iterated over using `async for`\n \"\"\"\n async for widget in Widget.objects.all():\n serializer = MyWidgetSerializer(widget)\n socket.send(serializer.data)\n\n\nasync def rename_all_widgets() -> None:\n \"\"\"\n Make simple changes to the database in a single query without extracting\n the objects to python code.\n \"\"\"\n await Widget.objects.all().update(foo='baz')\n\n\nasync def get_enabled_widgets_for_user(user: User) -> typings.List[Widget]:\n \"\"\"\n Querying related fields works similarly to django, returning a queryset\n that can be manipulated as normal\n \"\"\"\n ret = []\n async for widget in user.widget_set.filter(enabled=True):\n ret.append(widget)\n return ret\n\n\ndef main():\n \"\"\"\n Resync deals transparently with connections, managing a connection pool to\n reuse open connections when available.\n \"\"\"\n resync.setup({\n 'host': 'my.rethinkdb.fqdn',\n 'db': 'my_database_name',\n 'user': 'test',\n 'password': '123456'\n }) # These arguments are passed to rethinkdb.connect\n # (docs: https://www.rethinkdb.com/api/python/connect/)\n\n loop = asyncio.get_event_loop()\n fut = asyncio.ensure_future(get_all_widgets())\n loop.run_until_complete(fut)\n print(fut.result()) # List of widgets...\n\n teardown = asyncio.ensure_future(resync.teardown())\n loop.run_until_complete(teardown) # Closes all connections.\n loop.close()\n```\n\n### TODO\n\n- Tests\n- Docs\n\n### Contributors\n\n- James Keys (author) <@skolsuper>", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/codiumco/resync", "keywords": "rethink rethinkdb asyncio", "license": "BSD 3-clause", "maintainer": "", "maintainer_email": "", "name": "resync-orm", "package_url": "https://pypi.org/project/resync-orm/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/resync-orm/", "project_urls": { "Homepage": "https://github.com/codiumco/resync" }, "release_url": "https://pypi.org/project/resync-orm/0.2.2/", "requires_dist": [ "arrow", "dictdiffer", "rethinkdb" ], "requires_python": "", "summary": "An ORM-like wrapper for the rethinkdb asyncio driver", "version": "0.2.2" }, "last_serial": 2156013, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "5dbc6521ff129521b27d4466c6bffff8", "sha256": "bf57997bf74a456a5d2b145a34588220d3b628b26e8d6e50c56e276eb93ecd82" }, "downloads": -1, "filename": "resync_orm-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5dbc6521ff129521b27d4466c6bffff8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15908, "upload_time": "2016-05-31T07:28:10", "url": "https://files.pythonhosted.org/packages/81/9b/090d821823b610f3928e88da3e3ce54d0eef1457c40487548345a9f1c2b2/resync_orm-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f486fdb6d0628a26b3d0af80f16906a0", "sha256": "6d404a30687b23458d12f6216b8eae2fae5c4229bc4bd2fe2a3c30a95ab6ea86" }, "downloads": -1, "filename": "resync-orm-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f486fdb6d0628a26b3d0af80f16906a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13645, "upload_time": "2016-05-31T07:30:00", "url": "https://files.pythonhosted.org/packages/44/37/f8f4d5ba3fd133168f305ac485b7baa60d2af7754755b66da87df48b629f/resync-orm-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4e597b29eda1b6e0a8f4744d19c12999", "sha256": "d7492b440ef4f7fd5995e25e28b01f89188fd7d84d30ec49ab9937bd1c910bfe" }, "downloads": -1, "filename": "resync_orm-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4e597b29eda1b6e0a8f4744d19c12999", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16238, "upload_time": "2016-06-03T03:51:42", "url": "https://files.pythonhosted.org/packages/6f/24/e0c1ee49ed90ec5dbb61f801ccabfd75f8d46eebc549768118861b252a5e/resync_orm-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c38e92023a57ae65704b568be1159bdc", "sha256": "27f5972dfd2c04b687b37a8acf689a69ec08e93a9b7569eae943312d1ba34c1f" }, "downloads": -1, "filename": "resync-orm-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c38e92023a57ae65704b568be1159bdc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13927, "upload_time": "2016-06-03T03:51:45", "url": "https://files.pythonhosted.org/packages/13/72/85f36f14d10308c5476f9bae9b8b242b864e552b3597150b89029dc171b6/resync-orm-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f3a54c65736c9150370e87c9a772d992", "sha256": "07f6525ec0290a4fe64eb88a70175892091cac626aec30255d39e62f1b0ea8d4" }, "downloads": -1, "filename": "resync_orm-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f3a54c65736c9150370e87c9a772d992", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16307, "upload_time": "2016-06-08T01:59:54", "url": "https://files.pythonhosted.org/packages/55/4e/0b3b9eedc45a6408d335bae8e8fb304b3efa2031cc215478635d6fc07bd8/resync_orm-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f805983db588f6891017e7bbecc2f30d", "sha256": "31983a7a04d1ca1dddbc620e1b21e786ec8f5f4cf739e244a45bb7c255566f01" }, "downloads": -1, "filename": "resync-orm-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f805983db588f6891017e7bbecc2f30d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14045, "upload_time": "2016-06-08T02:00:04", "url": "https://files.pythonhosted.org/packages/c9/80/1b2f3bb957f2d7c232ade0747d752fa0e33fa4724bd5badd7211e8ea100c/resync-orm-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "3f05ebaf1e3f3ac586fe4f6b15e7f532", "sha256": "4555d82034f156e6ed6947460b02efbb58e3c90ae7f1ac9a3fbe1b35689fb61f" }, "downloads": -1, "filename": "resync_orm-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3f05ebaf1e3f3ac586fe4f6b15e7f532", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16298, "upload_time": "2016-06-08T02:14:55", "url": "https://files.pythonhosted.org/packages/5d/a7/9f95b67d7272342d8346548ef57b33d224a261c18e2cef36c833c8dc5d77/resync_orm-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3d738b06eba8fb7a6c46e823a1cbe9c", "sha256": "a499e785a688d741cf6f9842de125590dc027b1aa21e09a75b6140dfdca3ecee" }, "downloads": -1, "filename": "resync-orm-0.2.2.tar.gz", "has_sig": false, "md5_digest": "f3d738b06eba8fb7a6c46e823a1cbe9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14059, "upload_time": "2016-06-08T02:15:00", "url": "https://files.pythonhosted.org/packages/12/7e/c89a4eda0906badb7e0b42509b6268994c898bc9923ad525d071e357b645/resync-orm-0.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3f05ebaf1e3f3ac586fe4f6b15e7f532", "sha256": "4555d82034f156e6ed6947460b02efbb58e3c90ae7f1ac9a3fbe1b35689fb61f" }, "downloads": -1, "filename": "resync_orm-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3f05ebaf1e3f3ac586fe4f6b15e7f532", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16298, "upload_time": "2016-06-08T02:14:55", "url": "https://files.pythonhosted.org/packages/5d/a7/9f95b67d7272342d8346548ef57b33d224a261c18e2cef36c833c8dc5d77/resync_orm-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3d738b06eba8fb7a6c46e823a1cbe9c", "sha256": "a499e785a688d741cf6f9842de125590dc027b1aa21e09a75b6140dfdca3ecee" }, "downloads": -1, "filename": "resync-orm-0.2.2.tar.gz", "has_sig": false, "md5_digest": "f3d738b06eba8fb7a6c46e823a1cbe9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14059, "upload_time": "2016-06-08T02:15:00", "url": "https://files.pythonhosted.org/packages/12/7e/c89a4eda0906badb7e0b42509b6268994c898bc9923ad525d071e357b645/resync-orm-0.2.2.tar.gz" } ] }