{ "info": { "author": "podhmo", "author_email": "UNKNOWN", "bugtrack_url": null, "classifiers": [ "Framework :: Django", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: Implementation :: CPython" ], "description": "django-aggressivequery\n========================================\n\n(this is experimental package)\n\nhandling select_related and prefetch_reated, semi-automatically.\n\n\n.. code-block:: python\n\n from django_aggressivequery import from_queryset\n (\n from_queryset(UserInfo.objects.filter(point__gt=0), [\"user__teams__games\"])\n .prefetch_filter(\n user__teams__games=lambda qs: qs.filter(name__contains=\"-a\")\n )\n )\n\n # almost same means\n from django.db.models import Prefetch\n (\n UserInfo.objects.filter(point__gt=0)\n .select_related(\"user\")\n .prefetch_related(\n \"user__teams\",\n Prefetch(\"user__teams__games\", queryset=Game.objects.filter(name__contains=\"-a\"))\n )\n )\n\nSQL example\n\n.. code-block:: sql\n\n SELECT\n \"userinfo\".\"id\", \"userinfo\".\"point\", \"userinfo\".\"ctime\", \"userinfo\".\"user_id\",\n \"user\".\"id\", \"user\".\"name\", \"user\".\"ctime\"\n FROM \"userinfo\"\n INNER JOIN \"user\" ON (\"userinfo\".\"user_id\" = \"user\".\"id\")\n WHERE \"userinfo\".\"point\" > 0;\n SELECT\n (\"team_users\".\"user_id\") AS \"_prefetch_related_val_user_id\",\n \"team\".\"id\", \"team\".\"name\", \"team\".\"price\", \"team\".\"ctime\"\n FROM \"team\"\n INNER JOIN \"team_users\" ON (\"team\".\"id\" = \"team_users\".\"team_id\")\n WHERE \"team_users\".\"user_id\" IN (2);\n SELECT\n \"game\".\"id\", \"game\".\"team_id\", \"game\".\"name\", \"game\".\"price\", \"game\".\"ctime\"\n FROM \"game\"\n WHERE (\"game\".\"name\" LIKE '%-a%' ESCAPE '\\' AND \"game\".\"team_id\" IN (1, 2));\n\nmodel\n\n.. code-block:: python\n\n # relation: UserInfo - User *-* Team -* Game\n class User(models.Model):\n name = models.CharField(max_length=255, default=\"\", null=False)\n ctime = models.DateTimeField()\n\n class UserInfo(models.Model):\n point = models.IntegerField(null=False, default=0)\n user = models.OneToOneField(User, related_name=\"info\")\n ctime = models.DateTimeField()\n\n class Team(models.Model):\n users = models.ManyToManyField(User, related_name=\"teams\")\n name = models.CharField(max_length=255, default=\"\", null=False)\n price = models.IntegerField(null=False, default=0)\n ctime = models.DateTimeField()\n\n class Game(models.Model):\n team = models.ForeignKey(Team, related_name=\"games\")\n name = models.CharField(max_length=255, default=\"\", null=False)\n price = models.IntegerField(null=False, default=0)\n ctime = models.DateTimeField()\n\nmore specific option\n----------------------------------------\n\nCalling `from_queryset()` with `more_specific` option, then use `Query.only()`.\n\n.. code-block:: python\n\n from django_aggressivequery import from_queryset\n (\n from_queryset(UserInfo.objects.filter(point__gt=0), [\"point\", \"user__name\", \"user__teams__name\", \"user__teams__games__name\"], more_specific=True)\n .prefetch_filter(\n user__teams__games=lambda qs: qs.filter(name__contains=\"-a\")\n )\n )\n\n\n\n\n0.3.1:\n\n- fix bug when unexpected relations are found.\n\n0.3.0:\n- fix bug that duplicated hints are occured\n- fix bug that `get_accessor_name()` method is not used\n- adding extension feature.\n- reimplementing `skip_filter()` as extension\n- implementing `custom_prefetch()` as extension\n- reimplementing `prefetch_filter()` as extension\n- (module separation)\n\n0.2.0:\n- skipping function support (`AggressiveQuery.skip_filter()`)\n\n0.1.2:\n- gentle type check, in `from_query()`\n\n0.1.1\n- remove need less join (on prefetch releated)\n\n0.1\n- first release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/podhmo/django-aggressivequery", "keywords": "django restframework return_fields", "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "django-aggressivequery", "package_url": "https://pypi.org/project/django-aggressivequery/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-aggressivequery/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/podhmo/django-aggressivequery" }, "release_url": "https://pypi.org/project/django-aggressivequery/0.3.2/", "requires_dist": null, "requires_python": null, "summary": "handling select_related and prefetch_reated, semi-automatically", "version": "0.3.2" }, "last_serial": 2242278, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "5d37f4c371996a1cc3e852c4ba842a9c", "sha256": "13993bb6868656db297e293546a61f96981d75203d34c2a8540a1058d12e3fa3" }, "downloads": -1, "filename": "django-aggressivequery-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5d37f4c371996a1cc3e852c4ba842a9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7094, "upload_time": "2016-05-29T11:01:16", "url": "https://files.pythonhosted.org/packages/d9/ac/39164f0820bde198fffd1fe8745b6a432f8c89a8b4dcb376a7f0276da85b/django-aggressivequery-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "5b69b094dc8221c17c4f1efb96044935", "sha256": "6ed45169fbf1a5da88e9082ee9f01425416e41d1ebc362a6b92a5953c020c7f7" }, "downloads": -1, "filename": "django-aggressivequery-0.1.1.tar.gz", "has_sig": false, "md5_digest": "5b69b094dc8221c17c4f1efb96044935", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7134, "upload_time": "2016-05-29T11:34:29", "url": "https://files.pythonhosted.org/packages/60/de/d654f1eb8bf952327ad7a8bd75719afa1e85709e70854588d364ecfeff57/django-aggressivequery-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "197913ee5cc032e8ab80763fa7ecb7c2", "sha256": "aa40afca43aace06931c20a3529303574595fd6eeaadb56c7ec520923c3c6312" }, "downloads": -1, "filename": "django-aggressivequery-0.1.2.tar.gz", "has_sig": false, "md5_digest": "197913ee5cc032e8ab80763fa7ecb7c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7222, "upload_time": "2016-05-29T11:42:14", "url": "https://files.pythonhosted.org/packages/e2/f9/6bb6c035d20784e80344daf053bcae6be3f01f1706def9fcfb12fa42f700/django-aggressivequery-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8b5307b379606d38abfedbed725d9029", "sha256": "3d99697c5a96ea91f838cf9e688d84340664f481dcbf1603b703d7a2f6ceb68e" }, "downloads": -1, "filename": "django_aggressivequery-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8b5307b379606d38abfedbed725d9029", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 9597, "upload_time": "2016-06-18T10:26:51", "url": "https://files.pythonhosted.org/packages/df/10/53d7e0f741202c899675f443d2cf88a29fa67dcd9fd2244f07974dce767c/django_aggressivequery-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5404ebd742a840c735016ed9cb0a1385", "sha256": "f7590d8dad750f97577fb725a78497826078205060ac570932683bb82a9de97a" }, "downloads": -1, "filename": "django-aggressivequery-0.2.0.tar.gz", "has_sig": false, "md5_digest": "5404ebd742a840c735016ed9cb0a1385", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7574, "upload_time": "2016-06-18T10:26:42", "url": "https://files.pythonhosted.org/packages/10/c5/c1d335f8e4999695c9078a17d7f17313a1bcdcfde731bd75710fc8bf79bf/django-aggressivequery-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c9ed49abe90d057a3b82ea792a53cf39", "sha256": "9c90eabb6cc2e9df6cdf73ea6399158c0d0516c6bd1da29ab9593d5d94d16652" }, "downloads": -1, "filename": "django_aggressivequery-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c9ed49abe90d057a3b82ea792a53cf39", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 13139, "upload_time": "2016-06-21T00:16:52", "url": "https://files.pythonhosted.org/packages/2f/d7/14de886845dcc4c98f9c259f88da89633563768ca85e0c9c7872d35dfa3f/django_aggressivequery-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf9307ff2ad79d7628d26ddda086d0b7", "sha256": "68869856fbb445d41001edba7b0ccaece0154729f691ef5146bdaebffa7dfd4d" }, "downloads": -1, "filename": "django-aggressivequery-0.3.0.tar.gz", "has_sig": false, "md5_digest": "cf9307ff2ad79d7628d26ddda086d0b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9615, "upload_time": "2016-06-21T00:16:47", "url": "https://files.pythonhosted.org/packages/43/d1/928a2e3ae243efd7b3f1bf9576aaa3511afe76a770986822c5799e63b193/django-aggressivequery-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "073fdee3438e1f03968bbfbdd2ac3a6c", "sha256": "32913dd808eec37adfbf82b55e3ca4046e8c210ec04f850159670d44891e2ee5" }, "downloads": -1, "filename": "django_aggressivequery-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "073fdee3438e1f03968bbfbdd2ac3a6c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 13215, "upload_time": "2016-07-11T18:42:17", "url": "https://files.pythonhosted.org/packages/85/d9/801a477d7c31cc5e290571d1f02d2b9eb5529b0dc8b71b40c7ff83fefdd8/django_aggressivequery-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "072898ff6a88d21efe9d0c60a97cdbf2", "sha256": "2458cf7b975f3cefe14609a77258e4044bd2fb6c5da0b6a952530aa7caa523c9" }, "downloads": -1, "filename": "django-aggressivequery-0.3.1.tar.gz", "has_sig": false, "md5_digest": "072898ff6a88d21efe9d0c60a97cdbf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9676, "upload_time": "2016-07-11T18:41:57", "url": "https://files.pythonhosted.org/packages/18/1d/8578bc119e265d12a644eb1a628572e08a19a5bdafa60e5c86d943368376/django-aggressivequery-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "d8d2bdd45bdeafd8536b279d65ec065c", "sha256": "e7b281c2570cb20a0ed73ce856d7ca35aa4b917e1d7820c9a9c7e6c892bc98c6" }, "downloads": -1, "filename": "django_aggressivequery-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d8d2bdd45bdeafd8536b279d65ec065c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 13215, "upload_time": "2016-07-25T12:07:33", "url": "https://files.pythonhosted.org/packages/b3/87/5fb6cda467ae90873f1fa6d84ea979ae468fb74ad1ec9ef0e76407b9da26/django_aggressivequery-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "540582712aa4542cdcc34eda493fd30d", "sha256": "c02bac3f2c6420eecdef36312b1d45366fb724c4e7033f3296bd51c22fa2fa00" }, "downloads": -1, "filename": "django-aggressivequery-0.3.2.tar.gz", "has_sig": false, "md5_digest": "540582712aa4542cdcc34eda493fd30d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9684, "upload_time": "2016-07-25T12:07:30", "url": "https://files.pythonhosted.org/packages/9d/7b/9b243369f422f974862a7734e45ab0a12582bfa7b4166d57e4a1d88b625a/django-aggressivequery-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d8d2bdd45bdeafd8536b279d65ec065c", "sha256": "e7b281c2570cb20a0ed73ce856d7ca35aa4b917e1d7820c9a9c7e6c892bc98c6" }, "downloads": -1, "filename": "django_aggressivequery-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d8d2bdd45bdeafd8536b279d65ec065c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 13215, "upload_time": "2016-07-25T12:07:33", "url": "https://files.pythonhosted.org/packages/b3/87/5fb6cda467ae90873f1fa6d84ea979ae468fb74ad1ec9ef0e76407b9da26/django_aggressivequery-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "540582712aa4542cdcc34eda493fd30d", "sha256": "c02bac3f2c6420eecdef36312b1d45366fb724c4e7033f3296bd51c22fa2fa00" }, "downloads": -1, "filename": "django-aggressivequery-0.3.2.tar.gz", "has_sig": false, "md5_digest": "540582712aa4542cdcc34eda493fd30d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9684, "upload_time": "2016-07-25T12:07:30", "url": "https://files.pythonhosted.org/packages/9d/7b/9b243369f422f974862a7734e45ab0a12582bfa7b4166d57e4a1d88b625a/django-aggressivequery-0.3.2.tar.gz" } ] }