{ "info": { "author": "Fahmi Al-Najjar", "author_email": "fahmi.najjar@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Elasticsearch Utilities\nElasticsearch utilities for Django projects to analyze queries, create documents, sync data and connect to ES.\n\n# Required configurations\nAdd the following configurations to Django project settings:\n- `ES_SYNC_FEATURE` (**Required:** Boolean)\n- `ELASTICSEARCH_HOST` (**Required:** String)\n- `ELASTICSEARCH_USERNAME` (**Optional:** String)\n- `ELASTICSEARCH_PASSWORD` (**Optional:** String)\n\n# Syncing data with Elasticsearch\n\n#### Steps to index a Django model into Elasticsearch:\n\n1- create a new file inside any Django app called `es_indices.py` and insert this code into it with your modifications:\n\n```python3\nfrom es_utils.analyzers import arabic_analyzer\nfrom es_utils.document import ESDocument\nfrom elasticsearch_dsl import (\n connections,\n Document,\n Text,\n Completion\n)\n\n\nclass ProgramIndex(ESDocument):\n \"\"\"\n This class is used to map the programs with Elasticsearch index.\n \"\"\"\n\n class Index:\n name = 'programs'\n\n # the fields you want to index with their types\n\n id = Text()\n\n # support autocomplete for this field\n name_en = Text(fields={'completion': Completion()})\n\n # add arabic analyzer to this field\n about_ar = Text(analyzer=arabic_analyzer)\n about_en = Text()\n\n # nested object\n category = Object(properties={\n 'name_en': Text(),\n 'name_ar': Text()\n })\n\n # ...\n # ...\n\n```\n\n2- Add the `indexing` function to your model in `models.py` file:\n\n```python3\nfrom cms.djangoapps.program.es_indices import ProgramIndex\nfrom es_utils.helpers import es_indexing\n\n\nclass Program(models.Model):\n name_en = models.CharField(max_length=255)\n about_en = models.CharField(max_length=255)\n ..\n ..\n\n @es_indexing\n def indexing(self):\n attrs = dict(\n meta={'id': self.id},\n metadata={\n 'filters': {'type': self.program_type, 'status': self.status},\n 'sorting': {'name': self.name_en, 'type': self.program_type, 'start_date': self.start}\n },\n id=self.id,\n slug=self.slug,\n name_en=self.name_en,\n type=self.program_type,\n about_en=self.about_en,\n\n # nested dict\n category=dict(\n name_en=self.category.name_en,\n name_ar=self.category.name_ar\n ),\n )\n return ProgramIndex, attrs\n```\n\n3- Add a `post_save` and `post_delete` signals and connect them with the model:\n```python3\nfrom cms.djangoapps.program.models import Program\nfrom cms.djangoapps.program import es_indices\nfrom django.db.models.signals import post_save, post_delete\nfrom elasticsearch_dsl import Search\nfrom es_utils.connection import connection\nfrom es_utils.helpers import delete_es_document\n\n\ndef index_program(sender, instance, created, **kwargs):\n if instance.can_index():\n instance.indexing(new=created)\n elif not created:\n index_name = es_indices.ProgramIndex._index._name\n delete_es_document(document.id, index_name)\n\n\ndef delete_program(sender, instance, **kwargs):\n index_name = es_indices.ProgramIndex._index._name\n delete_es_document(instance.id, index_name)\n\n\nfor cls_name in settings.ES_SYNC_MODELS:\n Cls = getattr(models, cls_name)\n signals.post_save.connect(index_program, sender=Cls)\n signals.post_delete.connect(delete_program, sender=Cls)\n\n```\n\n\n# Compatibility\n- Django >= 1.8.\n- Python3.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Edraak/django-es-utils", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "django-es-utils", "package_url": "https://pypi.org/project/django-es-utils/", "platform": "", "project_url": "https://pypi.org/project/django-es-utils/", "project_urls": { "Homepage": "https://github.com/Edraak/django-es-utils" }, "release_url": "https://pypi.org/project/django-es-utils/1.0.3/", "requires_dist": [ "Django (==1.8)", "requests", "urllib3 (<1.22,>=1.21.1)", "elasticsearch (==6.3.0)", "elasticsearch-dsl (==6.2.1)", "ElasticMock (==1.3.2)" ], "requires_python": "", "summary": "Elasticsearch utilities for Django projects.", "version": "1.0.3" }, "last_serial": 4608235, "releases": { "0.0.3": [ { "comment_text": "", "digests": { "md5": "848483207f332c95a01534829af272ea", "sha256": "0b3d3f89f1170ffb0c370b4ad3c1d713a9e71056f971e49075a78fff25d3a3a5" }, "downloads": -1, "filename": "django_es_utils-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "848483207f332c95a01534829af272ea", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7786, "upload_time": "2018-12-17T12:25:34", "url": "https://files.pythonhosted.org/packages/b3/39/b0915893aaa3cf82614149ea922fedea0a733d7b0e9a93dd851ec255d26c/django_es_utils-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f77fef4fa9a292c0e7af6d252a73c8fe", "sha256": "b7ffe7e4e98160bd735b151961d41cd5eca1139c9164e4d4eb229a5c4e5d9a48" }, "downloads": -1, "filename": "django_es_utils-0.0.3.tar.gz", "has_sig": false, "md5_digest": "f77fef4fa9a292c0e7af6d252a73c8fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5736, "upload_time": "2018-12-17T12:25:36", "url": "https://files.pythonhosted.org/packages/c1/66/8baf93224e0f45a980400645e0e7cd9e9c2e03f83cfc628e7b4377f0d64e/django_es_utils-0.0.3.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "9fe5f236598582557c339cdfcaa7520a", "sha256": "c1d4d91fc70759c4a857d022feb07936781ad848ca53e788e1f62d564adee15b" }, "downloads": -1, "filename": "django_es_utils-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "9fe5f236598582557c339cdfcaa7520a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7672, "upload_time": "2018-11-13T14:45:37", "url": "https://files.pythonhosted.org/packages/cf/ea/213855b7b272c094f9d76f087e3c4a875e61bab9b43ea63271bc8304f2c4/django_es_utils-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0387fdfed2eff3dcca8ba6ca750c13b7", "sha256": "5a94538c7964d5c94aad68312f5a89556320af6520c909d7ca4533cee3246176" }, "downloads": -1, "filename": "django_es_utils-1.0.3.tar.gz", "has_sig": false, "md5_digest": "0387fdfed2eff3dcca8ba6ca750c13b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5619, "upload_time": "2018-11-13T14:45:38", "url": "https://files.pythonhosted.org/packages/f4/b8/5c96ac08a29a213c1df7ff9954735cda348aad13e0ce0c32f0e4cdef0e49/django_es_utils-1.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9fe5f236598582557c339cdfcaa7520a", "sha256": "c1d4d91fc70759c4a857d022feb07936781ad848ca53e788e1f62d564adee15b" }, "downloads": -1, "filename": "django_es_utils-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "9fe5f236598582557c339cdfcaa7520a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7672, "upload_time": "2018-11-13T14:45:37", "url": "https://files.pythonhosted.org/packages/cf/ea/213855b7b272c094f9d76f087e3c4a875e61bab9b43ea63271bc8304f2c4/django_es_utils-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0387fdfed2eff3dcca8ba6ca750c13b7", "sha256": "5a94538c7964d5c94aad68312f5a89556320af6520c909d7ca4533cee3246176" }, "downloads": -1, "filename": "django_es_utils-1.0.3.tar.gz", "has_sig": false, "md5_digest": "0387fdfed2eff3dcca8ba6ca750c13b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5619, "upload_time": "2018-11-13T14:45:38", "url": "https://files.pythonhosted.org/packages/f4/b8/5c96ac08a29a213c1df7ff9954735cda348aad13e0ce0c32f0e4cdef0e49/django_es_utils-1.0.3.tar.gz" } ] }