{ "info": { "author": "Christo Crampton", "author_email": "christo@appointmentguru.co", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Django NoSQL\n\n![coverage](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/coverage.svg?job=coverage)\n[![PyPI version](https://badge.fury.io/py/dj-loopbreaker.svg)](https://badge.fury.io/py/django-nosql)\n\n> Stream model changes to an upstream NoSQL database\n\n**Supported backends:**\n\n* FireStore\n* Mock\n\n**Todo backends**\n\n* RethinkDB\n* Postgres (JSONField)\n* REST\n* Redis\n* etcd\n\n## Installation\n\n```\npip install django-nosql\n```\n\n## Setup\n\n### Add to installed apps:\n\n```python\nINSTALLED_APPS = [\n ...,\n 'django_nosql',\n ...\n]\n```\n\n### Configure NoSQL backends:\n\nIn settings.py:\n\n```python\n# you can have multiple backends:\nNOSQL_BACKENDS = ['firestore']\n\n# FireStore settings\nFIRESTORE_CREDENTIALS_FILE = '/path/to/credentials.json'\n```\n\n### Mark up your models:\n\nIn `models.py`\n\n```python\n\nTodo(models.model):\n # the nosql collection you'd like to use\n collection = 'todos'\n # A Django Rest Framework serializer for serializing your instance\n serializer_path = 'example_app.models.TodoSerializer'\n # inform django_nosql that you'd like to sync this model\n readonly_sync = True\n```\n\nAdd signals:\n\n```python\nfrom django_nosql.signals import (\n sync_readonly_db,\n sync_remove_readonly_db\n)\n```\n\n### Test it out:\n\nThere is an example app included in this repo.\n\nTo see the sync in action try.\n\n`python manage.py shell` or `docker-compose run --rm web python manage.py shell`\n\n```python\n\nfrom example_app.models import Todo\ntodo = Todo.objects.create(text='Setup django nosql')\n# you should see this reflected in the 'todos' collection in Firebase\n# note: you need to manually refresh the db view when adding a new collection\n# you should see the rest of these updates in realtime\n\n# try update:\ntodo.done = True\ntodo.save()\n# you should see your change reflected in firestore\n\n# delete it:\ntodo.delete()\n# it's gone from Firestore!\n```\n\n### Take it async\n\nIf you're using something like celery or django-rq, you can make your signals async by wrapping the base function in a `@shared_task`. e.g.:\n\n```python\nfrom django.db.models.signals import post_save, post_delete\nfrom django.dispatch import receiver\nfrom django.conf import settings\nfrom django_nosql.signals import (sync_readonly_db, SYNC_TYPE)\nfrom celery import shared_task\n\n# create a shared task that wraps `sync_readonly_db`\n@shared_task\ndef firebase_sync(instance, created):\n sync_readonly_db(instance, SYNC_TYPE.UPDATE, created)\n\n@shared_task\ndef firebase_sync_remove(instance):\n sync_readonly_db(instance, SYNC_TYPE.DELETE, False)\n\n# call that function in a delayed manner\n@receiver(post_save, dispatch_uid=\"django_nosql.sync\")\ndef sync_readonly_db(sender, instance, created, **kwargs):\n firebase_sync.delay(instance, created)\n\n@receiver(post_delete, dispatch_uid=\"django_nosql.sync.delete\")\ndef sync_remove_readonly_db(sender, instance, **kwargs):\n firebase_sync_remove.delay(instance)\n```\n\n\n# Contributing\n\n## Deploy to pip\n\n```\n# bumpversion:\nbumpversion {major|minor|patch}\n# push to gitlab\ngit push origin master\n# gitlab CI does the rest\n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/SchoolOrchestration/django_nosql.git", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "django_nosql", "package_url": "https://pypi.org/project/django_nosql/", "platform": "", "project_url": "https://pypi.org/project/django_nosql/", "project_urls": { "Homepage": "https://gitlab.com/SchoolOrchestration/django_nosql.git" }, "release_url": "https://pypi.org/project/django_nosql/0.0.3/", "requires_dist": null, "requires_python": "", "summary": "Stream model updates to nosql backends", "version": "0.0.3" }, "last_serial": 4431167, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "899936b00b85be149b59adf3c5e81f26", "sha256": "51b5a19767e219e981d6bc3f7251e07e3feee512ce3ddbe831da441942b67e4b" }, "downloads": -1, "filename": "django_nosql-0.0.1.tar.gz", "has_sig": false, "md5_digest": "899936b00b85be149b59adf3c5e81f26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3466, "upload_time": "2018-08-24T10:25:38", "url": "https://files.pythonhosted.org/packages/c9/7e/41a12cf8870935fc9ced2d4d2b73172b19a464f40bc6d9443c6b3629174f/django_nosql-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "5ec4351deb1cb44c31445003a149a171", "sha256": "031e273506060540e26206833ee9cbf711f540cd82b15410fde5b1886998c4f3" }, "downloads": -1, "filename": "django_nosql-0.0.2.tar.gz", "has_sig": false, "md5_digest": "5ec4351deb1cb44c31445003a149a171", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3855, "upload_time": "2018-08-24T19:36:59", "url": "https://files.pythonhosted.org/packages/c9/ac/f512c26ad96b07f60c28a62484e560b61f20983dfe0c20da4ed2d8dcf6a4/django_nosql-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "a8ec51ccb06bd9a637acc9a700f6f8a5", "sha256": "32a734e1031aa3c3bcbd15477f58f7d72185cb950d66a145db18d188af9f6cc5" }, "downloads": -1, "filename": "django_nosql-0.0.3.tar.gz", "has_sig": false, "md5_digest": "a8ec51ccb06bd9a637acc9a700f6f8a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4095, "upload_time": "2018-10-30T11:16:36", "url": "https://files.pythonhosted.org/packages/aa/d0/66eb97d172bc145110d41b9101528e109241f5c4620f9bcabf5a414ece22/django_nosql-0.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a8ec51ccb06bd9a637acc9a700f6f8a5", "sha256": "32a734e1031aa3c3bcbd15477f58f7d72185cb950d66a145db18d188af9f6cc5" }, "downloads": -1, "filename": "django_nosql-0.0.3.tar.gz", "has_sig": false, "md5_digest": "a8ec51ccb06bd9a637acc9a700f6f8a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4095, "upload_time": "2018-10-30T11:16:36", "url": "https://files.pythonhosted.org/packages/aa/d0/66eb97d172bc145110d41b9101528e109241f5c4620f9bcabf5a414ece22/django_nosql-0.0.3.tar.gz" } ] }