{ "info": { "author": "Artur Barseghyan", "author_email": "artur.barseghyan@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries" ], "description": "================\ngraphene-elastic\n================\n`Elasticsearch (DSL) `__\nintegration for `Graphene `__.\n\n.. image:: https://img.shields.io/pypi/v/graphene-elastic.svg\n :target: https://pypi.python.org/pypi/graphene-elastic\n :alt: PyPI Version\n\n.. image:: https://img.shields.io/pypi/pyversions/graphene-elastic.svg\n :target: https://pypi.python.org/pypi/graphene-elastic/\n :alt: Supported Python versions\n\n.. image:: https://travis-ci.org/barseghyanartur/graphene-elastic.svg?branch=master\n :target: https://travis-ci.org/barseghyanartur/graphene-elastic\n :alt: Build Status\n\n.. image:: https://readthedocs.org/projects/graphene-elastic/badge/?version=latest\n :target: http://graphene-elastic.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://img.shields.io/badge/license-GPL--2.0--only%20OR%20LGPL--2.1--or--later-blue.svg\n :target: https://github.com/barseghyanartur/graphene-elastic/#License\n :alt: GPL-2.0-only OR LGPL-2.1-or-later\n\n.. image:: https://coveralls.io/repos/github/barseghyanartur/graphene-elastic/badge.svg?branch=master\n :target: https://coveralls.io/github/barseghyanartur/graphene-elastic?branch=master\n :alt: Coverage\n\n.. note::\n\n Project status is alpha.\n\nPrerequisites\n=============\n- Graphene 2.x. *Support for Graphene 1.x is not planned, but might be considered.*\n- Python 3.6, 3.7. *Support for Python 2 is not intended.*\n- Elasticsearch 6.x, 7.x. *Support for Elasticsearch 5.x is not intended.*\n\nMain features and highlights\n============================\n- Implemented ``ElasticsearchConnectionField`` and ``ElasticsearchObjectType``\n are the core classes to work with ``graphene``.\n- Pluggable backends for searching, filtering, ordering, etc. Don't like\n existing ones? Override, extend or write your own.\n- Search backend.\n- Filter backend.\n- Ordering backend.\n- Pagination.\n- Highlighting backend.\n- Source filter backend.\n- Faceted search backend (including global aggregations).\n- Post filter backend.\n\nSee the `Road-map`_ for what's yet planned to implemented.\n\nDo you need a similar tool for Django REST Framework? Check\n`django-elasticsearch-dsl-drf\n`__.\n\nDocumentation\n=============\nDocumentation is available on `Read the Docs\n`_.\n\nInstallation\n============\nInstall latest stable version from PyPI:\n\n.. code-block:: bash\n\n pip install graphene-elastic\n\nOr latest development version from GitHub:\n\n.. code-block:: bash\n\n pip install https://github.com/barseghyanartur/graphene-elastic/archive/master.zip\n\nExamples\n========\nInstall requirements\n--------------------\n.. code-block:: sh\n\n pip install -r requirements.txt\n\nPopulate sample data\n--------------------\nThe following command will create indexes for ``User`` and ``Post`` documents\nand populate them with sample data:\n\n.. code-block:: sh\n\n ./scripts/populate_elasticsearch_data.sh\n\nSample document definition\n--------------------------\n*search_index/documents/post.py*\n\nSee `examples/search_index/documents/post.py\n`_\nfor full example.\n\n.. code-block:: python\n\n import datetime\n from elasticsearch_dsl import (\n Boolean,\n Date,\n Document,\n InnerDoc,\n Keyword,\n Nested,\n Text,\n Integer,\n )\n\n class Comment(InnerDoc):\n\n author = Text(fields={'raw': Keyword()})\n content = Text(analyzer='snowball')\n created_at = Date()\n\n def age(self):\n return datetime.datetime.now() - self.created_at\n\n\n class Post(Document):\n\n title = Text(\n fields={'raw': Keyword()}\n )\n content = Text()\n created_at = Date()\n published = Boolean()\n category = Text(\n fields={'raw': Keyword()}\n )\n comments = Nested(Comment)\n tags = Text(\n analyzer=html_strip,\n fields={'raw': Keyword(multi=True)},\n multi=True\n )\n num_views = Integer()\n\n class Index:\n name = 'blog_post'\n settings = {\n 'number_of_shards': 1,\n 'number_of_replicas': 1,\n 'blocks': {'read_only_allow_delete': None},\n }\n\nSample apps\n-----------\nSample Flask app\n~~~~~~~~~~~~~~~~\n**Run the sample Flask app:**\n\n.. code-block:: sh\n\n ./scripts/run_flask.sh\n\n**Open Flask graphiql client**\n\n.. code-block:: text\n\n http://127.0.0.1:8001/graphql\n\nSample Django app\n~~~~~~~~~~~~~~~~~\n**Run the sample Django app:**\n\n.. code-block:: sh\n\n ./scripts/run_django.sh runserver\n\n**Open Django graphiql client**\n\n.. code-block:: text\n\n http://127.0.0.1:8000/graphql\n\nConnectionField example\n~~~~~~~~~~~~~~~~~~~~~~~\nConnectionField is the most flexible and feature rich solution you have. It\nuses filter backends which you can tie to your needs the way you want in a\ndeclarative manner.\n\n**Sample schema definition**\n\n.. code-block:: python\n\n import graphene\n from graphene_elastic import (\n ElasticsearchObjectType,\n ElasticsearchConnectionField,\n )\n from graphene_elastic.filter_backends import (\n FilteringFilterBackend,\n SearchFilterBackend,\n HighlightFilterBackend,\n OrderingFilterBackend,\n DefaultOrderingFilterBackend,\n )\n from graphene_elastic.constants import (\n LOOKUP_FILTER_PREFIX,\n LOOKUP_FILTER_TERM,\n LOOKUP_FILTER_TERMS,\n LOOKUP_FILTER_WILDCARD,\n LOOKUP_QUERY_EXCLUDE,\n LOOKUP_QUERY_IN,\n )\n\n # Object type definition\n class Post(ElasticsearchObjectType):\n\n class Meta(object):\n document = PostDocument\n interfaces = (Node,)\n filter_backends = [\n FilteringFilterBackend,\n SearchFilterBackend,\n HighlightFilterBackend,\n OrderingFilterBackend,\n DefaultOrderingFilterBackend,\n ]\n\n # For `FilteringFilterBackend` backend\n filter_fields = {\n # The dictionary key (in this case `title`) is the name of\n # the corresponding GraphQL query argument. The dictionary\n # value could be simple or complex structure (in this case\n # complex). The `field` key points to the `title.raw`, which\n # is the field name in the Elasticsearch document\n # (`PostDocument`). Since `lookups` key is provided, number\n # of lookups is limited to the given set, while term is the\n # default lookup (as specified in `default_lookup`).\n 'title': {\n 'field': 'title.raw',\n # Available lookups\n 'lookups': [\n LOOKUP_FILTER_TERM,\n LOOKUP_FILTER_TERMS,\n LOOKUP_FILTER_PREFIX,\n LOOKUP_FILTER_WILDCARD,\n LOOKUP_QUERY_IN,\n LOOKUP_QUERY_EXCLUDE,\n ],\n # Default lookup\n 'default_lookup': LOOKUP_FILTER_TERM,\n },\n\n # The dictionary key (in this case `category`) is the name of\n # the corresponding GraphQL query argument. Since no lookups\n # or default_lookup is provided, defaults are used (all lookups\n # available, term is the default lookup). The dictionary value\n # (in this case `category.raw`) is the field name in the\n # Elasticsearch document (`PostDocument`).\n 'category': 'category.raw',\n\n # The dictionary key (in this case `tags`) is the name of\n # the corresponding GraphQL query argument. Since no lookups\n # or default_lookup is provided, defaults are used (all lookups\n # available, term is the default lookup). The dictionary value\n # (in this case `tags.raw`) is the field name in the\n # Elasticsearch document (`PostDocument`).\n 'tags': 'tags.raw',\n\n # The dictionary key (in this case `num_views`) is the name of\n # the corresponding GraphQL query argument. Since no lookups\n # or default_lookup is provided, defaults are used (all lookups\n # available, term is the default lookup). The dictionary value\n # (in this case `num_views`) is the field name in the\n # Elasticsearch document (`PostDocument`).\n 'num_views': 'num_views',\n }\n\n # For `SearchFilterBackend` backend\n search_fields = {\n 'title': {'boost': 4},\n 'content': {'boost': 2},\n 'category': None,\n }\n\n # For `OrderingFilterBackend` backend\n ordering_fields = {\n # The dictionary key (in this case `tags`) is the name of\n # the corresponding GraphQL query argument. The dictionary\n # value (in this case `tags.raw`) is the field name in the\n # Elasticsearch document (`PostDocument`).\n 'title': 'title.raw',\n\n # The dictionary key (in this case `created_at`) is the name of\n # the corresponding GraphQL query argument. The dictionary\n # value (in this case `created_at`) is the field name in the\n # Elasticsearch document (`PostDocument`).\n 'created_at': 'created_at',\n\n # The dictionary key (in this case `num_views`) is the name of\n # the corresponding GraphQL query argument. The dictionary\n # value (in this case `num_views`) is the field name in the\n # Elasticsearch document (`PostDocument`).\n 'num_views': 'num_views',\n }\n\n # For `DefaultOrderingFilterBackend` backend\n ordering_defaults = (\n '-num_views', # Field name in the Elasticsearch document\n 'title.raw', # Field name in the Elasticsearch document\n )\n\n # For `HighlightFilterBackend` backend\n highlight_fields = {\n 'title': {\n 'enabled': True,\n 'options': {\n 'pre_tags': [\"\"],\n 'post_tags': [\"\"],\n }\n },\n 'content': {\n 'options': {\n 'fragment_size': 50,\n 'number_of_fragments': 3\n }\n },\n 'category': {},\n }\n\n # Query definition\n class Query(graphene.ObjectType):\n all_post_documents = ElasticsearchConnectionField(Post)\n\n # Schema definition\n schema = graphene.Schema(query=Query)\n\nFilter\n^^^^^^\n\nSample queries\n++++++++++++++\n\nSince we didn't specify any lookups on `category`, by default all lookups\nare available and the default lookup would be ``term``. Note, that in the\n``{value:\"Elastic\"}`` part, the ``value`` stands for default lookup, whatever\nit has been set to.\n\n.. code-block:: javascript\n\n query PostsQuery {\n allPostDocuments(filter:{category:{value:\"Elastic\"}}) {\n edges {\n node {\n id\n title\n category\n content\n createdAt\n comments\n }\n }\n }\n }\n\nBut, we could use another lookup (in example below - ``terms``). Note, that\nin the ``{terms:[\"Elastic\", \"Python\"]}`` part, the ``terms`` is the lookup\nname.\n\n.. code-block:: javascript\n\n query PostsQuery {\n allPostDocuments(\n filter:{category:{terms:[\"Elastic\", \"Python\"]}}\n ) {\n edges {\n node {\n id\n title\n category\n content\n createdAt\n comments\n }\n }\n }\n }\n\nOr apply a ``gt`` (``range``) query in addition to filtering:\n\n.. code-block:: javascript\n\n {\n allPostDocuments(filter:{\n category:{term:\"Python\"},\n numViews:{gt:\"700\"}\n }) {\n edges {\n node {\n category\n title\n comments\n numViews\n }\n }\n }\n }\n\nImplemented filter lookups\n++++++++++++++++++++++++++\nThe following lookups are available:\n\n- ``contains``\n- ``ends_with`` (or ``endsWith`` for camelCase)\n- ``exclude``\n- ``exists``\n- ``gt``\n- ``gte``\n- ``in``\n- ``is_null`` (or ``isNull`` for camelCase)\n- ``lt``\n- ``lte``\n- ``prefix``\n- ``range``\n- ``starts_with`` (or ``startsWith`` for camelCase)\n- ``term``\n- ``terms``\n- ``wildcard``\n\nSee `dedicated documentation on filter lookups\n`__ for\nmore information.\n\nSearch\n^^^^^^\nSearch in all fields:\n\n.. code-block:: javascript\n\n query {\n allPostDocuments(\n search:{query:\"Release Box\"}\n ) {\n edges {\n node {\n category\n title\n content\n }\n }\n }\n }\n\nSearch in specific fields:\n\n.. code-block:: javascript\n\n query {\n allPostDocuments(\n search:{\n title:{value:\"Release\", boost:2},\n content:{value:\"Box\"}\n }\n ) {\n edges {\n node {\n category\n title\n content\n }\n }\n }\n }\n\nOrdering\n^^^^^^^^\nPossible choices are ``ASC`` and ``DESC``.\n\n.. code-block:: javascript\n\n query {\n allPostDocuments(\n filter:{category:{term:\"Photography\"}},\n ordering:{title:ASC}\n ) {\n edges {\n node {\n category\n title\n content\n numViews\n tags\n }\n }\n }\n }\n\nPagination\n^^^^^^^^^^\nThe ``first``, ``last``, ``before`` and ``after`` arguments are supported.\nBy default number of results is limited to 100.\n\n.. code-block:: javascript\n\n query {\n allPostDocuments(first:12) {\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n edges {\n cursor\n node {\n category\n title\n content\n numViews\n }\n }\n }\n }\n\nHighlighting\n^^^^^^^^^^^^\nSimply, list the fields you want to highlight. This works only in combination\nwith search.\n\n.. code-block:: javascript\n\n query {\n allPostDocuments(\n search:{content:{value:\"alice\"}, title:{value:\"alice\"}},\n highlight:[category, content]\n ) {\n edges {\n node {\n title\n content\n highlight\n }\n cursor\n }\n }\n }\n\nRoad-map\n========\nRoad-map and development plans.\n\nThis package was designed after `django-elasticsearch-dsl-drf\n`__.\nIt's intended to offer similar functionality in ``graphene-elastic`` (this\npackage).\n\nLots of features are planned to be released in the upcoming Beta releases:\n\n- Suggester backend.\n- Nested backend.\n- Geo-spatial backend.\n- Filter lookup ``geo_bounding_box`` (or ``geoBoundingBox`` for camelCase).\n- Filter lookup ``geo_distance`` (or ``geoDistance`` for camelCase).\n- Filter lookup ``geo_polygon`` (or ``geoPolygon`` for camelCase).\n- More-like-this backend.\n- Complex search backends, such as Simple query search.\n\nStay tuned or reach out if you want to help.\n\nTesting\n=======\nProject is covered with tests.\n\nRunning tests\n-------------\nBy defaults tests are executed against the Elasticsearch 7.x.\n\n**Run Elasticsearch 7.x with Docker**\n\n.. code-block:: bash\n\n docker-compose up elasticsearch\n\n**Install test requirements**\n\n.. code-block:: sh\n\n pip install -r requirements/test.txt\n\nTo test with all supported Python versions type:\n\n.. code-block:: sh\n\n tox\n\nTo test against specific environment, type:\n\n.. code-block:: sh\n\n tox -e py37\n\nTo test just your working environment type:\n\n.. code-block:: sh\n\n ./runtests.py\n\nTo run a single test module in your working environment type:\n\n.. code-block:: sh\n\n ./runtests.py src/graphene_elastic/tests/test_filter_backend.py\n\nTo run a single test class in a given test module in your working environment\ntype:\n\n.. code-block:: sh\n\n ./runtests.py src/graphene_elastic/tests/test_filter_backend.py::FilterBackendElasticTestCase\n\nTesting with Docker\n-------------------\n.. code-block:: sh\n\n docker-compose -f docker-compose.yml -f docker-compose-test.yml up --build test\n\nDebugging\n=========\nFor development purposes, you could use the flask app (easy to debug). Standard\n``pdb`` works (``import pdb; pdb.set_trace()``). If ``ipdb`` does not work\nwell for you, use ``ptpdb``.\n\nWriting documentation\n=====================\nKeep the following hierarchy.\n\n.. code-block:: text\n\n =====\n title\n =====\n\n header\n ======\n\n sub-header\n ----------\n\n sub-sub-header\n ~~~~~~~~~~~~~~\n\n sub-sub-sub-header\n ^^^^^^^^^^^^^^^^^^\n\n sub-sub-sub-sub-header\n ++++++++++++++++++++++\n\n sub-sub-sub-sub-sub-header\n **************************\n\nLicense\n=======\nGPL-2.0-only OR LGPL-2.1-or-later\n\nSupport\n=======\nFor any issues contact me at the e-mail given in the `Author`_ section.\n\nAuthor\n======\nArtur Barseghyan \n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/barseghyanartur/graphene-elastic", "keywords": "api graphql protocol rest relay graphene elasticsearch elasticsearch-dsl", "license": "GPL 2.0/LGPL 2.1", "maintainer": "", "maintainer_email": "", "name": "graphene-elastic", "package_url": "https://pypi.org/project/graphene-elastic/", "platform": "", "project_url": "https://pypi.org/project/graphene-elastic/", "project_urls": { "Homepage": "https://github.com/barseghyanartur/graphene-elastic" }, "release_url": "https://pypi.org/project/graphene-elastic/0.6/", "requires_dist": [ "graphene (<3,>=2.1.3)", "elasticsearch (>=6.0)", "elasticsearch-dsl (>=6.0)", "singledispatch (>=3.4.0.3)", "iso8601 (>=0.1.12)" ], "requires_python": ">=3.6", "summary": "Graphene Elasticsearch (DSL) integration", "version": "0.6" }, "last_serial": 5957519, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "3229d3f4ec2498c3b8a4e66d2a4d7c80", "sha256": "f3363c4e0e16296247e492a2210f101233c75885f9a857965489ca4184507454" }, "downloads": -1, "filename": "graphene_elastic-0.0.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3229d3f4ec2498c3b8a4e66d2a4d7c80", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 104410, "upload_time": "2019-09-03T22:34:29", "url": "https://files.pythonhosted.org/packages/0b/72/fc43bb78e4a6c936682321c269838825bee3529852b1181237f3e0850390/graphene_elastic-0.0.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1c833610503e1ec04ddeac7401ff672e", "sha256": "44ff470bad5d52e71ebc99aa3e24f16c66952e96cbbd70541041cd76d5f5233d" }, "downloads": -1, "filename": "graphene-elastic-0.0.10.tar.gz", "has_sig": false, "md5_digest": "1c833610503e1ec04ddeac7401ff672e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 73825, "upload_time": "2019-09-03T22:34:36", "url": "https://files.pythonhosted.org/packages/94/26/6ee6d4e77f76757d0b9ab56804f44da1d82393096ecc75f52a99245a7454/graphene-elastic-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "e205d2827d6c30ae1cf6c7f59c4cec87", "sha256": "a5636004f9693ca0881b49ac4be62da7c2f30c92548173f2118ad202667516dc" }, "downloads": -1, "filename": "graphene_elastic-0.0.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e205d2827d6c30ae1cf6c7f59c4cec87", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 104669, "upload_time": "2019-09-04T22:42:12", "url": "https://files.pythonhosted.org/packages/d8/68/397a9361376f5bec86a376a04c1804b3ba751121f4b7050ec189475441ce/graphene_elastic-0.0.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "393ac5f47621d69e488338a3d3d4977e", "sha256": "dcb8c54be6a57259a9b82a88c00e4e3a47e1e09a1fa1ce9328a1b06fba03c02a" }, "downloads": -1, "filename": "graphene-elastic-0.0.11.tar.gz", "has_sig": false, "md5_digest": "393ac5f47621d69e488338a3d3d4977e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 74646, "upload_time": "2019-09-04T22:42:15", "url": "https://files.pythonhosted.org/packages/18/e1/0d1bb696ae431b12b7cd0c7a303b91fa84ae9656d7657c689b7563a9fe2e/graphene-elastic-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "86d2ba0a87b10d9fa73aeaba85d59850", "sha256": "5c54c272459791ecba53c3ab6db66a25af69b7a2be9517c482406fe02e5108a7" }, "downloads": -1, "filename": "graphene_elastic-0.0.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "86d2ba0a87b10d9fa73aeaba85d59850", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 105382, "upload_time": "2019-09-05T23:35:37", "url": "https://files.pythonhosted.org/packages/56/39/043c1eeb35a13534edb52daf1e5fd6e358cfe591bfbec4e8c681c8dbe1c4/graphene_elastic-0.0.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c213e3710a7a18101945a73283440c3", "sha256": "91e125f2b616654e60f04b200175eaf82eb2f988803e735ad1ca2869ac13b707" }, "downloads": -1, "filename": "graphene-elastic-0.0.12.tar.gz", "has_sig": false, "md5_digest": "3c213e3710a7a18101945a73283440c3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 75215, "upload_time": "2019-09-05T23:35:41", "url": "https://files.pythonhosted.org/packages/ed/9d/bd0acee4ff1978fd114a388417d50328dca1e12bd3ae292e7035b2121085/graphene-elastic-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "68f00e4ba51c2d9f05c9bec2de405432", "sha256": "02d894595d012814efa90d9efa4e1e05c3b5edbb267fee240a94acd56be58b70" }, "downloads": -1, "filename": "graphene_elastic-0.0.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "68f00e4ba51c2d9f05c9bec2de405432", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 105495, "upload_time": "2019-09-06T23:05:19", "url": "https://files.pythonhosted.org/packages/3c/39/8ac9ccd15626c3b6815fa9029082adaddd6a6257c038e5e1b0b3ff3b5097/graphene_elastic-0.0.13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff6483d7ebf1e69bf0a0b6099ffc693e", "sha256": "762a609bfb12df40bf43abb552e78fad16c992e5e967a00ffa7ae3284edeefe7" }, "downloads": -1, "filename": "graphene-elastic-0.0.13.tar.gz", "has_sig": false, "md5_digest": "ff6483d7ebf1e69bf0a0b6099ffc693e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 75796, "upload_time": "2019-09-06T23:05:21", "url": "https://files.pythonhosted.org/packages/91/c9/6617f675aaee94cfc7ff4190c88ba5aca3e232592830c6be7440df85b5bc/graphene-elastic-0.0.13.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "7f718c0f2722045da1f9072ef76c7dc5", "sha256": "18e187e9bb86e5aa4cd123e616c275849b5071407921a1d3b291ce607847e9c6" }, "downloads": -1, "filename": "graphene_elastic-0.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f718c0f2722045da1f9072ef76c7dc5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 86152, "upload_time": "2019-08-28T20:45:18", "url": "https://files.pythonhosted.org/packages/70/d9/4242ec51170c176515bdb06db4210493d93b8ed2f753189d5c58a91c544d/graphene_elastic-0.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f04a8fe490fc6aff75bdad01475c3245", "sha256": "6f84083bde36d011d6a35e0c9022f51403e43cece53e9bdb39836c92f5651753" }, "downloads": -1, "filename": "graphene-elastic-0.0.4.tar.gz", "has_sig": false, "md5_digest": "f04a8fe490fc6aff75bdad01475c3245", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 60796, "upload_time": "2019-08-28T20:45:20", "url": "https://files.pythonhosted.org/packages/ec/a9/cf1a62eddd90bdc3db9e1b8c7053b5c1b7a931b4f81246d5ec80cf11e121/graphene-elastic-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "80a3a0570320372ca8a993195e329cf0", "sha256": "4a1962f616e45e546b9dcfb3d58af570fab56a3cadf5c20235457087ce990d82" }, "downloads": -1, "filename": "graphene_elastic-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "80a3a0570320372ca8a993195e329cf0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 88763, "upload_time": "2019-08-30T02:13:39", "url": "https://files.pythonhosted.org/packages/88/0c/1b4f3f98ead6f7f9ddb561f1d1e88402f401ff277ce1b6339e2f2f69f23b/graphene_elastic-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d154a19408a8b19509bc16adeac3c355", "sha256": "df4c3591c4f4dbed671b21ad9017f10011a097d0b40373edbe6bcdd76bd7f9dd" }, "downloads": -1, "filename": "graphene-elastic-0.0.5.tar.gz", "has_sig": false, "md5_digest": "d154a19408a8b19509bc16adeac3c355", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 63296, "upload_time": "2019-08-30T02:13:42", "url": "https://files.pythonhosted.org/packages/e3/cd/2c4abd1e8378c130b3f39f3f71556513eba5e1ea26eab110544d45e39574/graphene-elastic-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "814cd478de2f9279b13c7a82f695dace", "sha256": "652ea4c214f71c1d3f158cda8c7756d5361e9b22b76551ab460a58caa9e0efea" }, "downloads": -1, "filename": "graphene_elastic-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "814cd478de2f9279b13c7a82f695dace", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 90236, "upload_time": "2019-08-30T14:05:59", "url": "https://files.pythonhosted.org/packages/7e/f8/cd6fadc7ed6d135786e860e69472077a57f03c88eaf84fa34d2053914072/graphene_elastic-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35278c1c302709d844b1922d7f1b28b7", "sha256": "c93f5ee904998579acb0f15d9cbf8a25c5dac475c4d2a73d15811ccfa8de5a2b" }, "downloads": -1, "filename": "graphene-elastic-0.0.6.tar.gz", "has_sig": false, "md5_digest": "35278c1c302709d844b1922d7f1b28b7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 65463, "upload_time": "2019-08-30T14:06:01", "url": "https://files.pythonhosted.org/packages/02/30/d960d74abe57dc71a81a539e1e022a6f6340993a9f0d86da43b5fbcf4e6a/graphene-elastic-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "5402353e742139fc206a3bca5047544f", "sha256": "7fb38e01589913927b061c690eedfc80b6a3dc15ff0fbce90879861a6d067dfa" }, "downloads": -1, "filename": "graphene_elastic-0.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5402353e742139fc206a3bca5047544f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 101870, "upload_time": "2019-08-31T23:54:37", "url": "https://files.pythonhosted.org/packages/c5/44/201a9e0d034ba476e2ea5940f354b1db97f03e0f1023e2802cf569a44069/graphene_elastic-0.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f786a28ef5fb96d67b3895d06ccd20db", "sha256": "b9a2bce4efd8e6296ce9992f436c5cdfa03ed70abe349ffbc1591534d9168b13" }, "downloads": -1, "filename": "graphene-elastic-0.0.7.tar.gz", "has_sig": false, "md5_digest": "f786a28ef5fb96d67b3895d06ccd20db", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 72188, "upload_time": "2019-08-31T23:54:39", "url": "https://files.pythonhosted.org/packages/bd/26/f15e5d1f41dce2dfe333aa9dc0b7e07b4769ae6878955eed113893312c1e/graphene-elastic-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "c959161ca832e70795d09bdd8649b119", "sha256": "57b888add454afea2d6ec2f802ed419d87023a444557b7a9b1b5fbf1cbd3a118" }, "downloads": -1, "filename": "graphene_elastic-0.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c959161ca832e70795d09bdd8649b119", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 102248, "upload_time": "2019-09-01T22:08:51", "url": "https://files.pythonhosted.org/packages/68/3a/e8e4cd625e22051bcbc2d79b200940e8fe9fd2607ef527b114025ee70550/graphene_elastic-0.0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ec8920ed35afc388540d84b6185a88f", "sha256": "3fb332465f8dd977802d0fc9c8a0353826663027a9a9f77b423a9d0c540c21df" }, "downloads": -1, "filename": "graphene-elastic-0.0.8.tar.gz", "has_sig": false, "md5_digest": "2ec8920ed35afc388540d84b6185a88f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 72436, "upload_time": "2019-09-01T22:08:53", "url": "https://files.pythonhosted.org/packages/36/a9/04e76ea223557ef29ff554c0441986d0bce11849c192494fb255fd602e3f/graphene-elastic-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "cbb82c516d52adb11185673b90996e0a", "sha256": "e72acc0ef9349860400b588fbfd2d1124ebfb46fa6c6d3b0ef1334aecefe10d5" }, "downloads": -1, "filename": "graphene_elastic-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cbb82c516d52adb11185673b90996e0a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 108233, "upload_time": "2019-09-02T23:42:35", "url": "https://files.pythonhosted.org/packages/88/f9/160e804b53e11146279130f09518cb5150c50907b188320bcd90a636e7a4/graphene_elastic-0.0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a7a940f7eae4926105167cf185da074", "sha256": "5fdf431b72ab29e0e12c80e15cd8b03bfa3f79756a21d9d62489333064cad156" }, "downloads": -1, "filename": "graphene-elastic-0.0.9.tar.gz", "has_sig": false, "md5_digest": "4a7a940f7eae4926105167cf185da074", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 76841, "upload_time": "2019-09-02T23:42:39", "url": "https://files.pythonhosted.org/packages/7e/43/ec3d83b56fbd916c15c35334243e257443153bb069b32371a3d395220a82/graphene-elastic-0.0.9.tar.gz" } ], "0.1": [ { "comment_text": "", "digests": { "md5": "d300bbc22878792a8390b7b9ba0f67ae", "sha256": "8901e1b5d145ccaefe363841bc5cbe5c7bddd9ae89e4488791fab9c127ba888c" }, "downloads": -1, "filename": "graphene_elastic-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d300bbc22878792a8390b7b9ba0f67ae", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 105991, "upload_time": "2019-09-07T22:22:12", "url": "https://files.pythonhosted.org/packages/41/72/0b68d7e1950b700bf93c3eee059504bff74f0610e1ebb3889f0d502b5ea1/graphene_elastic-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c17e9238f88eabc091be5ff5bd3472d", "sha256": "fa87c013071666edba46f169eb1c09c40fe8ed9c308d76883a71a829ab76f4f6" }, "downloads": -1, "filename": "graphene-elastic-0.1.tar.gz", "has_sig": false, "md5_digest": "0c17e9238f88eabc091be5ff5bd3472d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 76138, "upload_time": "2019-09-07T22:22:14", "url": "https://files.pythonhosted.org/packages/f6/5a/7da66809a80275a3dd7679a7c9e00a72f00c5604db382c02512050721dc5/graphene-elastic-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "b1a686b21c1bcee0094d21146e2604a7", "sha256": "da98af68e8a05140b220950cb88dd07cc48eff7887c2ad9c94e6447b71034486" }, "downloads": -1, "filename": "graphene_elastic-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b1a686b21c1bcee0094d21146e2604a7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 114679, "upload_time": "2019-09-18T00:04:25", "url": "https://files.pythonhosted.org/packages/ac/62/58d5983ac03f09581e395ae6fd647f64ae312640aa59623fda7ab77b1bfa/graphene_elastic-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d74163b777c6eb9d8fbaf2dd6c5e6eda", "sha256": "eabaaf7e6e278459cc4e0a7536e886bd766f6064c74b1a857ee24c4ce7705bfb" }, "downloads": -1, "filename": "graphene-elastic-0.2.tar.gz", "has_sig": false, "md5_digest": "d74163b777c6eb9d8fbaf2dd6c5e6eda", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 82396, "upload_time": "2019-09-18T00:04:28", "url": "https://files.pythonhosted.org/packages/78/1f/98730afc9456f9d4b3750a9e50a4904356df8f2bfba958ec8d96418fa7f1/graphene-elastic-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "40acc9c5cc44d333d139ae09b677fc4c", "sha256": "e02927ca8ccb4f7732e8d5720be539dba60b46abd286cc9a1d564e630ee86e70" }, "downloads": -1, "filename": "graphene_elastic-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "40acc9c5cc44d333d139ae09b677fc4c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 118408, "upload_time": "2019-09-20T00:15:07", "url": "https://files.pythonhosted.org/packages/71/2c/3e2c3119f275fa3858320853541756d66bd9adbeea4e7d5dad3884ad326c/graphene_elastic-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "acf59ec1beb540ba029b304527da3ad5", "sha256": "7a2c52d9773bc31bd1e0a844591f6a39a45ad590f7a8a9cd60cb67183b7a559a" }, "downloads": -1, "filename": "graphene-elastic-0.3.tar.gz", "has_sig": false, "md5_digest": "acf59ec1beb540ba029b304527da3ad5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 83102, "upload_time": "2019-09-20T00:15:10", "url": "https://files.pythonhosted.org/packages/08/cd/c661e9eb5684f18dd0319ac73314b01ce0dbcc8deae5dccba5c25fdd9f98/graphene-elastic-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "450bf6605bdc30359c5370f6c6326180", "sha256": "cd8afa3ab7197ddbcb9e811ae7c8042d0d228516d1b0972a32e72b7a4e1f9802" }, "downloads": -1, "filename": "graphene_elastic-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "450bf6605bdc30359c5370f6c6326180", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 83035, "upload_time": "2019-09-22T22:32:08", "url": "https://files.pythonhosted.org/packages/a7/1c/5a6b98c953ba488046627c6c9472663d51ab441c4cf9a3f5d0970c22f3d4/graphene_elastic-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e81eb27f43cf5fc18922b818bc79829", "sha256": "f8b216834429d33cb5286a5f851653ac65165f34c694b95805ae0e161c35a8bb" }, "downloads": -1, "filename": "graphene-elastic-0.4.tar.gz", "has_sig": false, "md5_digest": "7e81eb27f43cf5fc18922b818bc79829", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 63229, "upload_time": "2019-09-22T22:32:10", "url": "https://files.pythonhosted.org/packages/d7/a6/cdfdaf2ed510809d436ec5a69287cee3e7754418c87902d88e41cee04e44/graphene-elastic-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "73b0364ecc826b7d7ffd2d6b98b5307c", "sha256": "ec4cbcbbb68ded904d3260d6db0c98db0371c4a31f690c2ad6c0ed08e77cdbdf" }, "downloads": -1, "filename": "graphene_elastic-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "73b0364ecc826b7d7ffd2d6b98b5307c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 90443, "upload_time": "2019-09-28T23:53:20", "url": "https://files.pythonhosted.org/packages/37/a4/df5e18f006b09cd7e4beb37923678c50ccd2a2b25e1a885c872a274cbab9/graphene_elastic-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b84e334e85ce4a409088b4403ba19d0", "sha256": "bada996607f7c047456f31de1086382a7f0bef26f9e405bb8ad550ed6bb8369b" }, "downloads": -1, "filename": "graphene-elastic-0.5.tar.gz", "has_sig": false, "md5_digest": "8b84e334e85ce4a409088b4403ba19d0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 65928, "upload_time": "2019-09-28T23:53:23", "url": "https://files.pythonhosted.org/packages/7a/89/92c3f110c43a792b94eb48d2d84cd5d698bc91f2f190fc5601655115ecd2/graphene-elastic-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "604b5f32915a0f90d4dfaee7fa0660e3", "sha256": "8c1f869aa126788fe07e8ba44ec34b9dd3cac2ee9cb34cdc6b60590d10d58f1e" }, "downloads": -1, "filename": "graphene_elastic-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "604b5f32915a0f90d4dfaee7fa0660e3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 91243, "upload_time": "2019-10-10T23:32:26", "url": "https://files.pythonhosted.org/packages/15/c2/b35a629553f8e5c64eedc7ae030eaa906799f5e22474123358b0ef072f56/graphene_elastic-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "489c00af411dfaacc3afd0488afe986d", "sha256": "0a94fbffac83cdb744bbd0922738c7b463fffccb0da47adc7547d6293838181f" }, "downloads": -1, "filename": "graphene-elastic-0.6.tar.gz", "has_sig": false, "md5_digest": "489c00af411dfaacc3afd0488afe986d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 66737, "upload_time": "2019-10-10T23:32:29", "url": "https://files.pythonhosted.org/packages/27/15/ce069e6e1cdf5fd37c4c39ebcb0731f872ca3455d1cb801ce138d1d13628/graphene-elastic-0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "604b5f32915a0f90d4dfaee7fa0660e3", "sha256": "8c1f869aa126788fe07e8ba44ec34b9dd3cac2ee9cb34cdc6b60590d10d58f1e" }, "downloads": -1, "filename": "graphene_elastic-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "604b5f32915a0f90d4dfaee7fa0660e3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 91243, "upload_time": "2019-10-10T23:32:26", "url": "https://files.pythonhosted.org/packages/15/c2/b35a629553f8e5c64eedc7ae030eaa906799f5e22474123358b0ef072f56/graphene_elastic-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "489c00af411dfaacc3afd0488afe986d", "sha256": "0a94fbffac83cdb744bbd0922738c7b463fffccb0da47adc7547d6293838181f" }, "downloads": -1, "filename": "graphene-elastic-0.6.tar.gz", "has_sig": false, "md5_digest": "489c00af411dfaacc3afd0488afe986d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 66737, "upload_time": "2019-10-10T23:32:29", "url": "https://files.pythonhosted.org/packages/27/15/ce069e6e1cdf5fd37c4c39ebcb0731f872ca3455d1cb801ce138d1d13628/graphene-elastic-0.6.tar.gz" } ] }