public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/python-django-cacheops] rawhide: RHBZ #2458684
@ 2026-06-18 19:45 Ali Erdinc Koroglu
  0 siblings, 0 replies; only message in thread
From: Ali Erdinc Koroglu @ 2026-06-18 19:45 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/python-django-cacheops
Branch : rawhide
Commit : f27386798e238a3979b81861a7611ee8337e4d65
Author : Ali Erdinc Koroglu <ali.koroglu@oss.qualcomm.com>
Date   : 2026-06-18T22:45:29+03:00
Stats  : +61/-2 in 3 file(s)
URL    : https://src.fedoraproject.org/rpms/python-django-cacheops/c/f27386798e238a3979b81861a7611ee8337e4d65?branch=rawhide

Log:
RHBZ #2458684

---
diff --git a/fix-subquery-annotation.patch b/fix-subquery-annotation.patch
new file mode 100644
index 0000000..0125db5
--- /dev/null
+++ b/fix-subquery-annotation.patch
@@ -0,0 +1,33 @@
+From 2142bf8997b15dc1906fbfd226635449fb93f6f9 Mon Sep 17 00:00:00 2001
+From: Audrius Masalskis <audrius@gigpro.com>
+Date: Wed, 4 Mar 2026 10:29:12 +0200
+Subject: [PATCH] Fix Subquery annotation detection in dnfs() for Django 6.0+
+
+Django 6.0 resolves Subquery annotations into raw Query objects
+in qs.query.annotations. The existing isinstance(q, Subquery)
+check misses these, causing cross-table Subquery dependencies
+to be invisible to cache invalidation.
+
+Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
+---
+diff --git a/cacheops/tree.py b/cacheops/tree.py
+index 6334ac7..de2638d 100644
+--- a/cacheops/tree.py
++++ b/cacheops/tree.py
+@@ -159,9 +159,13 @@ def dnfs(qs):
+ 
+     # Add any subqueries used for annotation
+     if qs.query.annotations:
+-        subqueries = (query_dnf(getattr(q, 'query', None))
+-                      for q in qs.query.annotations.values() if isinstance(q, Subquery))
+-        dnfs_.update(join_with(lcat, subqueries))
++        sub_dnfs = []
++        for q in qs.query.annotations.values():
++            if isinstance(q, Subquery):
++                sub_dnfs.append(query_dnf(getattr(q, 'query', None)))
++            elif isinstance(q, Query):
++                sub_dnfs.append(query_dnf(q))
++        dnfs_.update(join_with(lcat, sub_dnfs) or {})
+ 
+     return dnfs_
+ 

diff --git a/python-django-cacheops.spec b/python-django-cacheops.spec
index 3c0ef9a..b2e37ad 100644
--- a/python-django-cacheops.spec
+++ b/python-django-cacheops.spec
@@ -16,13 +16,16 @@ And there is more to it:
 
 Name:           python-%{srcname}
 Version:        7.2
-Release:        4%{?dist}
+Release:        5%{?dist}
 Summary:        ORM cache with automatic granular event-driven invalidation for Django
 
 License:        BSD-3-Clause
 URL:            https://github.com/Suor/%{srcname}
 Source:         %{url}/archive/%{version}/%{srcname}-%{version}.tar.gz
 
+Patch0:		fix-subquery-annotation.patch
+Patch1:		test_subquery-dj6.patch
+
 BuildArch:      noarch
 
 BuildRequires:	python3-devel
@@ -39,7 +42,7 @@ Summary:        %{summary}
 %description -n python3-%{srcname} %{desc}
 
 %prep
-%autosetup -n %{srcname}-%{version}
+%autosetup -p1 -n %{srcname}-%{version}
 
 %generate_buildrequires
 %pyproject_buildrequires
@@ -77,6 +80,9 @@ cat $PWD/redis.log
 %doc README.rst CHANGELOG
 
 %changelog
+* Thu Jun 18 2026 Ali Erdinc Koroglu <ali.koroglu@oss.qualcomm.com> - 7.2-5
+- Backported upstream commit 2142bf8 for rhbz#2458684
+
 * Sat Jun 06 2026 Python Maint <python-maint@redhat.com> - 7.2-4
 - Rebuilt for Python 3.15
 

diff --git a/test_subquery-dj6.patch b/test_subquery-dj6.patch
new file mode 100644
index 0000000..09951e4
--- /dev/null
+++ b/test_subquery-dj6.patch
@@ -0,0 +1,20 @@
+On Django 6.0 a Subquery built from a queryset using .only('id') no
+longer auto-resolves its output_field, raising OutputFieldIsNoneError
+when used as the target of an __in lookup. Per Django's documentation,
+a Subquery used in __in must return exactly one column, which is done
+with .values('id') rather than .only('id'). This is a test-only fix;
+cacheops behaviour is unchanged.
+---
+diff --git a/tests/tests.py b/tests/tests.py
+index f450cf4..ac3c812 100644
+--- a/tests/tests.py
++++ b/tests/tests.py
+@@ -179,7 +179,7 @@ class BasicTests(BaseTestCase):
+             list(Post.objects.filter(category=2).cache())
+ 
+     def test_subquery(self):
+-        categories = Category.objects.cache().filter(title='Django').only('id')
++        categories = Category.objects.cache().filter(title='Django').values('id')
+         Post.objects.cache().filter(category__in=Subquery(categories)).count()
+ 
+     def test_rawsql(self):

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-06-18 19:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-18 19:45 [rpms/python-django-cacheops] rawhide: RHBZ #2458684 Ali Erdinc Koroglu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox