{ "info": { "author": "Mike Hansen", "author_email": "mike@rover.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Utilities" ], "description": "========\nOverview\n========\n\n\n\n``django-delayed-union`` is library designed to workaround some\ndrawbacks with Django's union, intersection, and difference\noperations. In particular, once one of these operations is performed,\ncertain methods on the queryset will silently not work::\n\n >>> qs = User.objects.filter(id=1)\n >>> unioned_qs = qs.union(qs)\n >>> should_be_empty_qs = unioned_qs.exclude(id=1)\n >>> user, = list(should_be_empty_qs); user.id\n 1\n\nIn order to work around this, ``django-delayed-union`` provides\nwrappers around a collection of querysets. These wrappers implement a\nsimilar interface to ``QuerySet``, and delay performing the union,\nintersection, or difference operations until they are needed::\n\n >>> from django_delayed_union import DelayedUnionQuerySet\n >>> qs = User.objects.filter(id=1)\n >>> unioned_qs = DelayedUnionQuerySet(qs, qs)\n >>> empty_qs = unioned_qs.exclude(id=1)\n >>> list(empty_qs)\n []\n\nOperations which would typically return a new ``QuerySet`` instead\nreturn a new ``DelayedQuerySet`` with the operation applied to its\ncollection of querysets.\n\nOne example of where this code has been useful with is when the the\nMySQL query planner has chosen an inefficient query plan for the\nqueryset of a `Django REST Framework `_ view\nwhich used an ``OR`` condition. By using ``DelayedUnionQuerySet``,\nsubclasses could perform additional filters on the queryset while\nstill maintaining the efficient query plan.\n\n* Free software: BSD 3-Clause License\n\nInstallation\n============\n\n::\n\n pip install django-delayed-union\n\nDocumentation\n=============\n\nhttps://django-delayed-union.readthedocs.io/\n\nDevelopment\n===========\n\nTo run the all tests run::\n\n tox\n\nChangelog\n=========\n\n0.1.4 (2019-10-19)\n------------------\n* Added query property to delayed querysets.\n* Fixed bug with count() and select_related() in MySQL\n* Added tests for Django 3.0\n\n0.1.3 (2019-04-24)\n------------------\n* Added tests for Django 2.2\n\n0.1.2 (2018-12-14)\n------------------\n* Added support for nested unions and intersections\n\n0.1.1 (2018-07-16)\n------------------\n\n* Cached the queryset generated after applying the delayed operation.\n\n0.1.0 (2018-03-14)\n------------------\n\n* First release on PyPI.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/roverdotcom/django-delayed-union", "keywords": "", "license": "BSD 3-Clause License", "maintainer": "", "maintainer_email": "", "name": "django-delayed-union", "package_url": "https://pypi.org/project/django-delayed-union/", "platform": "", "project_url": "https://pypi.org/project/django-delayed-union/", "project_urls": { "Homepage": "https://github.com/roverdotcom/django-delayed-union" }, "release_url": "https://pypi.org/project/django-delayed-union/0.1.4/", "requires_dist": null, "requires_python": "", "summary": "A library designed to workaround some drawbacks with Django's union, intersection, and difference operations.", "version": "0.1.4" }, "last_serial": 5997790, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "8ff9c67621ed164e0be34d403702897f", "sha256": "0053a4df639f869fe683fb284ef8286c324b6ec657535a1f422cad02fe4f800b" }, "downloads": -1, "filename": "django_delayed_union-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ff9c67621ed164e0be34d403702897f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10287, "upload_time": "2018-03-26T20:16:24", "url": "https://files.pythonhosted.org/packages/ef/7a/26e6852a4a2e7d1a5c68f787cf5ee25639592319503c0bed8c425bda5ee4/django_delayed_union-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17327b4fcff32d84cd760ed4065f2205", "sha256": "f88cae25952e6330a9d48948f7b1c836c10e6e73cfc3263ee86b5d65a7fbfec5" }, "downloads": -1, "filename": "django-delayed-union-0.1.0.tar.gz", "has_sig": false, "md5_digest": "17327b4fcff32d84cd760ed4065f2205", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20581, "upload_time": "2018-03-26T20:16:25", "url": "https://files.pythonhosted.org/packages/44/bb/f915085280b8dadb11a3f8b8fb591ff58638fa522ce54925c6fdd30c529b/django-delayed-union-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "96f274c88535b4e5b423836e25989573", "sha256": "3b2b2995563354c3db50062b3dc2d26069d6c72832b9094cd30b41baa8a23f3b" }, "downloads": -1, "filename": "django_delayed_union-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "96f274c88535b4e5b423836e25989573", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8499, "upload_time": "2018-07-16T20:59:01", "url": "https://files.pythonhosted.org/packages/f3/14/c4f52e7f51f74f07bf2505cc165a8756aa7b611afe0d5bf3efca81de2ca8/django_delayed_union-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de663a25cf186191a3cb6abcf3738cce", "sha256": "d304f6a4c71625b800bbb5df3f65bdb4f0b3b42ed923bcef4e7b28fe50cd5665" }, "downloads": -1, "filename": "django-delayed-union-0.1.1.tar.gz", "has_sig": false, "md5_digest": "de663a25cf186191a3cb6abcf3738cce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20913, "upload_time": "2018-07-16T20:59:02", "url": "https://files.pythonhosted.org/packages/2e/3e/0a20267243bd954f436bb583ab39c37360941765b0f7b969fe2865ec7b2d/django-delayed-union-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a195695a8bbb717ab538885a7c1c0f58", "sha256": "2b780ceb98e0ef787c5058bdf7e08472b7e09fbc3c9bc46f4f79a77c7681a49b" }, "downloads": -1, "filename": "django-delayed-union-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a195695a8bbb717ab538885a7c1c0f58", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22297, "upload_time": "2018-12-14T12:38:35", "url": "https://files.pythonhosted.org/packages/79/27/f8c32c84dba0e6f4b257c35f1ddef9076e0a8022ac0229a53a09721162a3/django-delayed-union-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "22cb6c18d3736e7bc43bcdf9836cffec", "sha256": "b68e8c8eb0503f1911873866eb66c13349c84ebd0455be9d3e27d10d0ee3ad8e" }, "downloads": -1, "filename": "django-delayed-union-0.1.3.tar.gz", "has_sig": false, "md5_digest": "22cb6c18d3736e7bc43bcdf9836cffec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22450, "upload_time": "2019-04-24T12:19:26", "url": "https://files.pythonhosted.org/packages/29/d1/c212e6ba3fd9dc13edc013f099ff01b96e9fb728f094e52558bab5d75ec2/django-delayed-union-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "2531dbe48526a3c588138b0e65ad1371", "sha256": "0dbf99e276979581810975ad01f3fc435b2cafabd3e4bfefc9294b05c45c0b51" }, "downloads": -1, "filename": "django-delayed-union-0.1.4.tar.gz", "has_sig": false, "md5_digest": "2531dbe48526a3c588138b0e65ad1371", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23787, "upload_time": "2019-10-18T22:04:00", "url": "https://files.pythonhosted.org/packages/2b/1f/39c82bb6df688e6af48523d3ee698a09e2674fd560243006242070279c01/django-delayed-union-0.1.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2531dbe48526a3c588138b0e65ad1371", "sha256": "0dbf99e276979581810975ad01f3fc435b2cafabd3e4bfefc9294b05c45c0b51" }, "downloads": -1, "filename": "django-delayed-union-0.1.4.tar.gz", "has_sig": false, "md5_digest": "2531dbe48526a3c588138b0e65ad1371", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23787, "upload_time": "2019-10-18T22:04:00", "url": "https://files.pythonhosted.org/packages/2b/1f/39c82bb6df688e6af48523d3ee698a09e2674fd560243006242070279c01/django-delayed-union-0.1.4.tar.gz" } ] }