{ "info": { "author": "Tom\u00e1s Fox", "author_email": "tomas.c.fox@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "# graphene-django-optimizer\n\n[![build status](https://img.shields.io/travis/tfoxy/graphene-django-optimizer.svg)](https://travis-ci.org/tfoxy/graphene-django-optimizer)\n[![coverage](https://img.shields.io/codecov/c/github/tfoxy/graphene-django-optimizer.svg)](https://codecov.io/gh/tfoxy/graphene-django-optimizer)\n[![PyPI version](https://img.shields.io/pypi/v/graphene-django-optimizer.svg)](https://pypi.org/project/graphene-django-optimizer/)\n![python version](https://img.shields.io/pypi/pyversions/graphene-django-optimizer.svg)\n![django version](https://img.shields.io/pypi/djversions/graphene-django-optimizer.svg)\n\nOptimize queries executed by [graphene-django](https://github.com/graphql-python/graphene-django) automatically, using [`select_related`](https://docs.djangoproject.com/en/2.0/ref/models/querysets/#select-related), [`prefetch_related`](https://docs.djangoproject.com/en/2.0/ref/models/querysets/#prefetch-related) and [`only`](https://docs.djangoproject.com/en/2.0/ref/models/querysets/#only) methods of Django QuerySet.\n\n\n## Install\n\n```bash\npip install graphene-django-optimizer\n```\n\n\n## Usage\n\nHaving the following schema based on [the tutorial of graphene-django](http://docs.graphene-python.org/projects/django/en/latest/tutorial-plain/#hello-graphql-schema-and-object-types) (notice the use of `gql_optimizer`)\n\n```py\n# cookbook/ingredients/schema.py\nimport graphene\n\nfrom graphene_django.types import DjangoObjectType\nimport graphene_django_optimizer as gql_optimizer\n\nfrom cookbook.ingredients.models import Category, Ingredient\n\n\nclass CategoryType(DjangoObjectType):\n class Meta:\n model = Category\n\n\nclass IngredientType(DjangoObjectType):\n class Meta:\n model = Ingredient\n\n\nclass Query(object):\n all_categories = graphene.List(CategoryType)\n all_ingredients = graphene.List(IngredientType)\n\n def resolve_all_categories(root, info):\n return gql_optimizer.query(Category.objects.all(), info)\n\n def resolve_all_ingredients(root, info):\n return gql_optimizer.query(Ingredient.objects.all(), info)\n```\n\n\nWe will show some graphql queries and the queryset that will be executed.\n\nFetching all the ingredients with the related category:\n\n```graphql\n{\n all_ingredients {\n id\n name\n category {\n id\n name\n }\n }\n}\n```\n\n```py\n# optimized queryset:\ningredients = (\n Ingredient.objects\n .select_related('category')\n .only('id', 'name', 'category__id', 'category__name')\n)\n```\n\nFetching all the categories with the related ingredients:\n\n```graphql\n{\n all_categories {\n id\n name\n ingredients {\n id\n name\n }\n }\n}\n```\n\n```py\n# optimized queryset:\ncategories = (\n Category.objects\n .only('id', 'name')\n .prefetch_related(Prefetch(\n 'ingredients',\n queryset=Ingredient.objects.only('id', 'name'),\n ))\n)\n```\n\n\n## Advanced usage\n\nSometimes we need to have a custom resolver function. In those cases, the field can't be auto optimized.\nSo we need to use `gql_optimizer.resolver_hints` decorator to indicate the optimizations.\n\nIf the resolver returns a model field, we can use the `model_field` argument:\n\n```py\nimport graphene\nimport graphene_django_optimizer as gql_optimizer\n\n\nclass ItemType(gql_optimizer.OptimizedDjangoObjectType):\n product = graphene.Field('ProductType')\n\n @gql_optimizer.resolver_hints(\n model_field='product',\n )\n def resolve_product(root, info):\n # check if user have permission for seeing the product\n if info.context.user.is_anonymous():\n return None\n return root.product\n```\n\nThis will automatically optimize any subfield of `product`.\n\nNow, if the resolver uses related fields, you can use the `select_related` argument:\n\n```py\nimport graphene\nimport graphene_django_optimizer as gql_optimizer\n\n\nclass ItemType(gql_optimizer.OptimizedDjangoObjectType):\n name = graphene.String()\n\n @gql_optimizer.resolver_hints(\n select_related=('product', 'shipping'),\n only=('product__name', 'shipping__name'),\n )\n def resolve_name(root, info):\n return '{} {}'.format(root.product.name, root.shipping.name)\n```\n\nNotice the usage of the type `OptimizedDjangoObjectType`, which enables\noptimization of any single node queries.\n\nFinally, if your field has an argument for filtering results,\nyou can use the `prefetch_related` argument with a function\nthat returns a `Prefetch` instance as the value.\n\n```py\nfrom django.db.models import Prefetch\nimport graphene\nimport graphene_django_optimizer as gql_optimizer\n\n\nclass CartType(gql_optimizer.OptimizedDjangoObjectType):\n items = graphene.List(\n 'ItemType',\n product_id=graphene.ID(),\n )\n\n @gql_optimizer.resolver_hints(\n prefetch_related=lambda info, product_id: Prefetch(\n 'items',\n queryset=gql_optimizer.query(Item.objects.filter(product_id=product_id), info),\n to_attr='gql_product_id_' + product_id,\n ),\n )\n def resolve_items(root, info, product_id):\n return getattr(root, 'gql_product_id_' + product_id)\n```\n\nWith these hints, any field can be optimized.\n\n\n### Optimize with non model fields\n\nSometimes we need to have a custom non model fields. In those cases, the optimizer would not optimize with the Django `.only()` method.\nSo if we still want to optimize with the `.only()` method, we need to use `disable_abort_only` option:\n\n```py\n\nclass IngredientType(gql_optimizer.OptimizedDjangoObjectType):\n calculated_calories = graphene.String()\n\n class Meta:\n model = Ingredient\n \n def resolve_calculated_calories(root, info):\n return get_calories_for_ingredient(root.id)\n\n\nclass Query(object):\n all_ingredients = graphene.List(IngredientType)\n\n def resolve_all_ingredients(root, info):\n return gql_optimizer.query(Ingredient.objects.all(), info, disable_abort_only=True)\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/tfoxy/graphene-django-optimizer", "keywords": "graphene django optimizer optimize graphql query prefetch select related", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "graphene-django-optimizer", "package_url": "https://pypi.org/project/graphene-django-optimizer/", "platform": "", "project_url": "https://pypi.org/project/graphene-django-optimizer/", "project_urls": { "Homepage": "https://github.com/tfoxy/graphene-django-optimizer" }, "release_url": "https://pypi.org/project/graphene-django-optimizer/0.6.1/", "requires_dist": null, "requires_python": "", "summary": "Optimize database access inside graphene queries.", "version": "0.6.1" }, "last_serial": 5959363, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "fe5376398807f9cfee152a10e5b2463f", "sha256": "4ffac1a2212cae96c28424d6b2cd9a4a35fcbcd3377ad5901ebdce0e74b24259" }, "downloads": -1, "filename": "graphene_django_optimizer-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fe5376398807f9cfee152a10e5b2463f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5698, "upload_time": "2018-05-07T02:20:21", "url": "https://files.pythonhosted.org/packages/7b/fd/f000ce14f9305d99373840e874ce2cb736374fe47fd5f321a0515ab779c2/graphene_django_optimizer-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d39288cae64a95144fe3a49d7326d4a", "sha256": "41c497483110f6cb6b349c0b69f546a28716c6a195ea035da9c2123a8cddc4ab" }, "downloads": -1, "filename": "graphene-django-optimizer-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6d39288cae64a95144fe3a49d7326d4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4463, "upload_time": "2018-05-07T02:20:23", "url": "https://files.pythonhosted.org/packages/5a/3a/81e695214499b7e74ff741b24ff686882daa0135790ceede38035753b5fb/graphene-django-optimizer-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1835dd92e7142bd027920c85cd2e90db", "sha256": "cdf505236707ab0ecb644629c401c4307e1de5609ee555d329a9a22e17a931bf" }, "downloads": -1, "filename": "graphene_django_optimizer-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1835dd92e7142bd027920c85cd2e90db", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6360, "upload_time": "2018-06-10T21:25:58", "url": "https://files.pythonhosted.org/packages/ba/01/ab0a3d17cfa2fd05f8dceed9b3c640687a07d479737dd74674edef766ae5/graphene_django_optimizer-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c62cc8764eb9ce913dc921bb3927ebde", "sha256": "7a7f25e2035f500d0777bd6d72220b2d5005291934b2ed3e02114d9cb33997b2" }, "downloads": -1, "filename": "graphene-django-optimizer-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c62cc8764eb9ce913dc921bb3927ebde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5216, "upload_time": "2018-06-10T21:25:59", "url": "https://files.pythonhosted.org/packages/a5/3e/d593e5ab163f35b1a98f7b0416cee799d5a38a23340a56651bc60f09b455/graphene-django-optimizer-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "5c53b2335a42ed3fbbd8c9e8401d5e4b", "sha256": "fb58a434a218e3ceffced5be0bc15201925fc8923de8fdf048d6da51f1e3debc" }, "downloads": -1, "filename": "graphene_django_optimizer-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5c53b2335a42ed3fbbd8c9e8401d5e4b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7100, "upload_time": "2018-08-19T15:29:56", "url": "https://files.pythonhosted.org/packages/c8/40/8292c6f8845a8fe369beb71de9b5dcba67073239759e934f274b9bad2648/graphene_django_optimizer-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "375076862bbf02b90b3b80f93aa577a9", "sha256": "bc57eece0492801cdb27380d947a043ee61088dd19ea2edf2c0c8ce67cbe98c7" }, "downloads": -1, "filename": "graphene-django-optimizer-0.3.0.tar.gz", "has_sig": false, "md5_digest": "375076862bbf02b90b3b80f93aa577a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6060, "upload_time": "2018-08-19T15:29:59", "url": "https://files.pythonhosted.org/packages/22/ff/988d19f02c729961cdc28e28273d8a78418cc222559358ee8d21f6563ad6/graphene-django-optimizer-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "a51e8153effe2415988bdd83aaddf29f", "sha256": "a600cde5e7395a82608dff750de3ae55620561b24c38f74faf82f02f5f4b482b" }, "downloads": -1, "filename": "graphene_django_optimizer-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a51e8153effe2415988bdd83aaddf29f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9043, "upload_time": "2018-09-08T23:56:45", "url": "https://files.pythonhosted.org/packages/71/c2/0d744826b363d5c0ea3e1b60e093eb808543efc9d4f9942715fbf8181d17/graphene_django_optimizer-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f42bfc19d0ac45e94dac9e6172ccb50", "sha256": "efd14af72a314f4522b61128ac4f5be3d35c070c8fa5a3f3fa7178df7d2513fc" }, "downloads": -1, "filename": "graphene-django-optimizer-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9f42bfc19d0ac45e94dac9e6172ccb50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6070, "upload_time": "2018-09-08T23:56:47", "url": "https://files.pythonhosted.org/packages/44/10/cf048e3ae2e7c517448ef720982df6dabb154e1278cdded52e720fc9b3db/graphene-django-optimizer-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "21b2173c54e9f646a617f6edbf90b8e3", "sha256": "76fd429e69b555d2aecadd85b0a7f08527ba84962160e2d7f21ab3c28f6a8301" }, "downloads": -1, "filename": "graphene_django_optimizer-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "21b2173c54e9f646a617f6edbf90b8e3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7148, "upload_time": "2018-09-13T20:18:34", "url": "https://files.pythonhosted.org/packages/50/a3/718518d45f80c3b3f3a3f3a50201e8c3cb93eceea91ac4e334e902e83684/graphene_django_optimizer-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d225b2c4bed8a2f7a8e0d8bb34869e4", "sha256": "dc49f095a57ca8d658b38aedc618376466e42f19641679563ece629b78d37cb0" }, "downloads": -1, "filename": "graphene-django-optimizer-0.3.2.tar.gz", "has_sig": false, "md5_digest": "2d225b2c4bed8a2f7a8e0d8bb34869e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6060, "upload_time": "2018-09-13T20:18:35", "url": "https://files.pythonhosted.org/packages/3b/03/63da12efcaed63f9a5947d91cb09dfe287ad69b7175f71cc986e27594e0f/graphene-django-optimizer-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "6aaea56f880a009ceca7560865354e24", "sha256": "9440045340d82ea1743d6e6d5de20433da32d69457c9dc1429dccfabe749ade1" }, "downloads": -1, "filename": "graphene_django_optimizer-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6aaea56f880a009ceca7560865354e24", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7142, "upload_time": "2018-09-14T19:37:23", "url": "https://files.pythonhosted.org/packages/ed/8e/b72ed0a9fa1c344f0be89da004d69e1a2f193a30113ea04e3614a5cda926/graphene_django_optimizer-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f1d19d53b05c87ae843f9d830edd01b8", "sha256": "3b6853885ac26d8d9976d4afd74696e634c8013f8e69daa6f6f9e1b9f6b7e562" }, "downloads": -1, "filename": "graphene-django-optimizer-0.3.3.tar.gz", "has_sig": false, "md5_digest": "f1d19d53b05c87ae843f9d830edd01b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6064, "upload_time": "2018-09-14T19:37:25", "url": "https://files.pythonhosted.org/packages/53/2d/d1d314fed5afb01ff87dc8a058b1da693787d8385b3f21c2749a53b1a236/graphene-django-optimizer-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "179b95885b667320914d597e4c8e54af", "sha256": "74404db76d8df1d05103ae9138a37d585888609e2eaaf65ce12eacb074fcc5aa" }, "downloads": -1, "filename": "graphene_django_optimizer-0.3.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "179b95885b667320914d597e4c8e54af", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7145, "upload_time": "2018-09-22T22:28:31", "url": "https://files.pythonhosted.org/packages/d4/e2/da3bb7aefd7e1c364cf38634cb59153ebd6724855e92f83aa5f2ac88ddd6/graphene_django_optimizer-0.3.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "073587861474e71fdd42cd9493776ae0", "sha256": "340744350b324a0bee57316844b540b68b112f3c92644dc0cc3b58776cef77d6" }, "downloads": -1, "filename": "graphene-django-optimizer-0.3.4.tar.gz", "has_sig": false, "md5_digest": "073587861474e71fdd42cd9493776ae0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6104, "upload_time": "2018-09-22T22:28:33", "url": "https://files.pythonhosted.org/packages/bb/8a/36c8cb0ede3e927bfab070a25b397322dee1b9673d5e8eadd38f56f82166/graphene-django-optimizer-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "77b22c6f847d42e6685768efbdc72103", "sha256": "f104e3cfba65f3aef591bf3a9859915abfa074eccb4508e5af19a90a3091f9ee" }, "downloads": -1, "filename": "graphene_django_optimizer-0.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "77b22c6f847d42e6685768efbdc72103", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7278, "upload_time": "2018-10-03T01:06:54", "url": "https://files.pythonhosted.org/packages/51/1b/c76086e6d8fc2f0719fb2d7c80430502d8cf34d195a858fd560d055e653d/graphene_django_optimizer-0.3.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e9087498a97666f6668d1f31d297b4b", "sha256": "332f48d318e18dc58f89deaf79d51a0d25e5499d04d839a255bfac24dcac42e5" }, "downloads": -1, "filename": "graphene-django-optimizer-0.3.5.tar.gz", "has_sig": false, "md5_digest": "9e9087498a97666f6668d1f31d297b4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6239, "upload_time": "2018-10-03T01:06:56", "url": "https://files.pythonhosted.org/packages/2b/1d/5c252caa9ea9df212aedb6630cca67ce9042662efa83930a06b0fab2605e/graphene-django-optimizer-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "4b8379e972ddc4032b67ad894b0cc0a0", "sha256": "e3eafbcf343a9501ced71d0a8537dda2b1fe0d7bcf9c31bf0b371556d8ee4467" }, "downloads": -1, "filename": "graphene_django_optimizer-0.3.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b8379e972ddc4032b67ad894b0cc0a0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7980, "upload_time": "2019-01-13T18:34:27", "url": "https://files.pythonhosted.org/packages/3b/ba/b3c5a8aebe5f55ba6093e30d259cdf867a498a722f6f722e2518754a9ab3/graphene_django_optimizer-0.3.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e45b71daa6a92e1d636c343164da45d", "sha256": "f55adcb5452d6d65dfce4afa5de50f6d987bb84c5dd3ccdc89b0802662852b1b" }, "downloads": -1, "filename": "graphene-django-optimizer-0.3.6.tar.gz", "has_sig": false, "md5_digest": "5e45b71daa6a92e1d636c343164da45d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7134, "upload_time": "2019-01-13T18:34:28", "url": "https://files.pythonhosted.org/packages/90/d8/42fa25d278c48bbc38739a3cbf0b59f385242454da18ff9eb789b55d81ef/graphene-django-optimizer-0.3.6.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "35c9b112e8a12ab8e57152ca82f737ea", "sha256": "9632998a7e3303ebe95a2df6dadcc1d4d137d5946e6c03a2680ce620b49408e2" }, "downloads": -1, "filename": "graphene_django_optimizer-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "35c9b112e8a12ab8e57152ca82f737ea", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10068, "upload_time": "2019-04-29T22:50:51", "url": "https://files.pythonhosted.org/packages/00/54/f4e2659b427f7c80424312851f29a33393b7d4eb28c323e2b8d794b3c508/graphene_django_optimizer-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7300148f83990c2e44fbfbf11fa6b895", "sha256": "8d1d73514ec892e6307f90f8035db47cf6b75f3a0188d58848b1d7261f056e86" }, "downloads": -1, "filename": "graphene-django-optimizer-0.4.0.tar.gz", "has_sig": false, "md5_digest": "7300148f83990c2e44fbfbf11fa6b895", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9326, "upload_time": "2019-04-29T22:51:02", "url": "https://files.pythonhosted.org/packages/70/a5/7d50555b219d698d79e761bb33b51a2fadd2c3133a57ded190ee0a1134c6/graphene-django-optimizer-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "64225c96916cf4456d9dc7fcb84f5ace", "sha256": "593828902df168b77303987c4c787fcb0816789dea25d8033c16cf735cd8924a" }, "downloads": -1, "filename": "graphene_django_optimizer-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "64225c96916cf4456d9dc7fcb84f5ace", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10074, "upload_time": "2019-06-18T03:47:46", "url": "https://files.pythonhosted.org/packages/3d/cf/4067a6c2f4f354426543e7dc14886904134b38943f55d516559b230eba3d/graphene_django_optimizer-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5be4987eb8c2b80894b52cf3fe9cd52a", "sha256": "e602293b1b3e0ffe4706ae660690134f89bd618ab762fcaa14e8b960fe3ac639" }, "downloads": -1, "filename": "graphene-django-optimizer-0.4.1.tar.gz", "has_sig": false, "md5_digest": "5be4987eb8c2b80894b52cf3fe9cd52a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9347, "upload_time": "2019-06-18T03:47:48", "url": "https://files.pythonhosted.org/packages/d9/db/3f8e43b5112cfd753b73a276a8cc3ab4a6dc262ebfb2bcb2479d8c886253/graphene-django-optimizer-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "2ed4b132e7e8c6e02db2af6791fac188", "sha256": "be7bb8147ec34adfd1e951a7b59a1030eb5ba65f4384279db70fa73a3358bacb" }, "downloads": -1, "filename": "graphene-django-optimizer-0.4.2.tar.gz", "has_sig": false, "md5_digest": "2ed4b132e7e8c6e02db2af6791fac188", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9313, "upload_time": "2019-06-24T05:31:06", "url": "https://files.pythonhosted.org/packages/63/4a/464c9c8fc9280948a412338ea426f4e73532206c70faf26da64a4722cdea/graphene-django-optimizer-0.4.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "92477c79135ba591bf1d182c4c634c2f", "sha256": "6a30ff8776ed495a23eea4cf7f9e4b65f80b10c6c9b6685571e9524a2e030d3a" }, "downloads": -1, "filename": "graphene-django-optimizer-0.5.0.tar.gz", "has_sig": false, "md5_digest": "92477c79135ba591bf1d182c4c634c2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9719, "upload_time": "2019-08-01T09:04:40", "url": "https://files.pythonhosted.org/packages/60/8c/8ad69ed3d51e4b9101388629174e56c2a85a7ed28e98bbd1e878b7c63b4e/graphene-django-optimizer-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "997d31c3f9b9b7b72eb8d90535ff0e46", "sha256": "48dd4806c1eb8597e3ba916531a68c3956d3779ebee3238d9736b795613794ef" }, "downloads": -1, "filename": "graphene-django-optimizer-0.6.0.tar.gz", "has_sig": false, "md5_digest": "997d31c3f9b9b7b72eb8d90535ff0e46", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9693, "upload_time": "2019-08-02T13:15:09", "url": "https://files.pythonhosted.org/packages/7f/76/198951fede6253f1ac467aa6ba05d836ead25c564534b759ece297d99230/graphene-django-optimizer-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "ac09f7ad14b317d9f71486c08895fb82", "sha256": "2c3902cfc739ae7f9953c9130fa4030d4f1bd9e81c820713c4270137e63f89cb" }, "downloads": -1, "filename": "graphene-django-optimizer-0.6.1.tar.gz", "has_sig": false, "md5_digest": "ac09f7ad14b317d9f71486c08895fb82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9688, "upload_time": "2019-10-11T09:25:58", "url": "https://files.pythonhosted.org/packages/b7/ee/a83c259ad3341496ec640f532562acdedca5631d739662c43bdef6fdbdff/graphene-django-optimizer-0.6.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ac09f7ad14b317d9f71486c08895fb82", "sha256": "2c3902cfc739ae7f9953c9130fa4030d4f1bd9e81c820713c4270137e63f89cb" }, "downloads": -1, "filename": "graphene-django-optimizer-0.6.1.tar.gz", "has_sig": false, "md5_digest": "ac09f7ad14b317d9f71486c08895fb82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9688, "upload_time": "2019-10-11T09:25:58", "url": "https://files.pythonhosted.org/packages/b7/ee/a83c259ad3341496ec640f532562acdedca5631d739662c43bdef6fdbdff/graphene-django-optimizer-0.6.1.tar.gz" } ] }