Metadata-Version: 1.1
Name: django-delayed-union
Version: 0.1.7
Summary: A library designed to workaround some drawbacks with Django's union, intersection, and difference operations.
Home-page: https://github.com/roverdotcom/django-delayed-union
Author: Mike Hansen
Author-email: mike@rover.com
License: BSD 3-Clause License
Description: ========
        Overview
        ========
        
        
        
        ``django-delayed-union`` is library designed to workaround some
        drawbacks with Django's union, intersection, and difference
        operations.  In particular, once one of these operations is performed,
        certain methods on the queryset will silently not work::
        
          >>> qs = User.objects.filter(id=1)
          >>> unioned_qs = qs.union(qs)
          >>> should_be_empty_qs = unioned_qs.exclude(id=1)
          >>> user, = list(should_be_empty_qs); user.id
          1
        
        In order to work around this, ``django-delayed-union`` provides
        wrappers around a collection of querysets.  These wrappers implement a
        similar interface to ``QuerySet``, and delay performing the union,
        intersection, or difference operations until they are needed::
        
          >>> from django_delayed_union import DelayedUnionQuerySet
          >>> qs = User.objects.filter(id=1)
          >>> unioned_qs = DelayedUnionQuerySet(qs, qs)
          >>> empty_qs = unioned_qs.exclude(id=1)
          >>> list(empty_qs)
          []
        
        Operations which would typically return a new ``QuerySet`` instead
        return a new ``DelayedQuerySet`` with the operation applied to its
        collection of querysets.
        
        One example of where this code has been useful with is when the the
        MySQL query planner has chosen an inefficient query plan for the
        queryset of a `Django REST Framework <https://github.com/foo/>`_ view
        which used an ``OR`` condition.  By using ``DelayedUnionQuerySet``,
        subclasses could perform additional filters on the queryset while
        still maintaining the efficient query plan.
        
        * Free software: BSD 3-Clause License
        
        Installation
        ============
        
        ::
        
            pip install django-delayed-union
        
        Documentation
        =============
        
        https://django-delayed-union.readthedocs.io/
        
        Development
        ===========
        
        To run the all tests run::
        
            tox
        
        Changelog
        =========
        
        0.1.7 (2022-01-12)
        ------------------
        * Fixed setup.py metadata
        
        0.1.6 (2022-01-12)
        ------------------
        * Added support for Django 3.2 and 4.0.
        * Dropped Python 2 support.
        
        0.1.5 (2020-04-14)
        ------------------
        * Added support for Python 3.8 and Django 3.0
        
        0.1.4 (2019-10-19)
        ------------------
        * Added query property to delayed querysets.
        * Fixed bug with count() and select_related() in MySQL
        * Added tests for Django 3.0
        
        0.1.3 (2019-04-24)
        ------------------
        * Added tests for Django 2.2
        
        0.1.2 (2018-12-14)
        ------------------
        * Added support for nested unions and intersections
        
        0.1.1 (2018-07-16)
        ------------------
        
        * Cached the queryset generated after applying the delayed operation.
        
        0.1.0 (2018-03-14)
        ------------------
        
        * First release on PyPI.
        
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: Unix
Classifier: Operating System :: POSIX
Classifier: Operating System :: Microsoft :: Windows
Classifier: Framework :: Django
Classifier: Framework :: Django :: 2.2
Classifier: Framework :: Django :: 3.2
Classifier: Framework :: Django :: 4.0
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Topic :: Utilities
