Skip to content

Commit c64cdc7

Browse files
committed
Add a few method to the PackageURLQuerySetMixin contrib class
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent be73771 commit c64cdc7

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

CHANGELOG.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ Changelog
44
0.16.0 (unreleased)
55
-------------------
66

7+
- Add ``with_package_url``, ``without_package_url``, and ``order_by_package_url`` to the
8+
``PackageURLQuerySetMixin`` contrib class.
9+
710
0.15.3 (2024-07-09)
811
-------------------
912

src/packageurl/contrib/django/models.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
from packageurl.contrib.django.utils import purl_to_lookups
3333

3434

35+
PACKAGE_URL_FIELDS = ("type", "namespace", "name", "version", "qualifiers", "subpath")
36+
37+
3538
class PackageURLQuerySetMixin:
3639
"""
3740
Add Package URL filtering methods to a django.db.models.QuerySet.
@@ -53,12 +56,22 @@ def for_package_url(self, purl_str, encode=True, exact_match=False):
5356
return self.filter(**lookups)
5457
return self.none()
5558

56-
def empty_package_url(self):
57-
"""
58-
Return objects with empty Package URL.
59-
"""
59+
def with_package_url(self):
60+
"""Return objects with Package URL defined."""
61+
return self.filter(~models.Q(type="") & ~models.Q(name=""))
62+
63+
def without_package_url(self):
64+
"""Return objects with empty Package URL."""
6065
return self.filter(models.Q(type="") | models.Q(name=""))
6166

67+
def empty_package_url(self):
68+
"""Return objects with empty Package URL. Alias of without_package_url."""
69+
return self.without_package_url()
70+
71+
def order_by_package_url(self):
72+
"""Order by Package URL fields."""
73+
return self.order_by(*PACKAGE_URL_FIELDS)
74+
6275

6376
class PackageURLQuerySet(PackageURLQuerySetMixin, models.QuerySet):
6477
pass

0 commit comments

Comments
 (0)