From 3f1bda3ba2ba610a1f6fa54923cf77a281c25f62 Mon Sep 17 00:00:00 2001 From: Zachary Collins Date: Tue, 28 Feb 2023 12:01:22 -0800 Subject: [PATCH 1/3] __iexact reduce call has default value now. --- src/sentry/db/models/query.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sentry/db/models/query.py b/src/sentry/db/models/query.py index de587fde6c614a..29a6a0c9e8418d 100644 --- a/src/sentry/db/models/query.py +++ b/src/sentry/db/models/query.py @@ -170,8 +170,10 @@ def in_iexact(column: str, values: Any) -> Q: from operator import or_ query = f"{column}__iexact" + # if values is empty, have a default value for the reduce call that will essentially resolve a colum in [] + query_in = f"{column}__in" - return reduce(or_, [Q(**{query: v}) for v in values]) + return reduce(or_, [Q(**{query: v}) for v in values], Q(**{query_in: []})) def in_icontains(column: str, values: Any) -> Q: From 119e6cbb7208b1793c690acdfed0ca0ab96d3d8f Mon Sep 17 00:00:00 2001 From: Zachary Collins Date: Tue, 28 Feb 2023 12:07:41 -0800 Subject: [PATCH 2/3] Adding test. --- tests/sentry/utils/test_query.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/sentry/utils/test_query.py b/tests/sentry/utils/test_query.py index 7e9030fe8b76cc..7488c873b1cb81 100644 --- a/tests/sentry/utils/test_query.py +++ b/tests/sentry/utils/test_query.py @@ -1,8 +1,20 @@ -from sentry.models import Team, User +from sentry.db.models.query import in_iexact +from sentry.models import Organization, Team, User from sentry.testutils import TestCase from sentry.utils.query import RangeQuerySetWrapper, bulk_delete_objects +class InIexactQueryTest(TestCase): + def test_basic(self): + self.create_organization(slug="SlugA") + self.create_organization(slug="slugB") + self.create_organization(slug="slugc") + + assert Organization.objects.filter(in_iexact("slug", ["sluga", "slugb"])).count() == 2 + assert Organization.objects.filter(in_iexact("slug", ["slugC"])).count() == 1 + assert Organization.objects.filter(in_iexact("slug", [])).count() == 0 + + class RangeQuerySetWrapperTest(TestCase): def test_basic(self): total = 10 From a37d397d259daee92cb03d42a9b49661c96eabae Mon Sep 17 00:00:00 2001 From: Zachary Collins Date: Tue, 28 Feb 2023 12:16:34 -0800 Subject: [PATCH 3/3] Typo --- src/sentry/db/models/query.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sentry/db/models/query.py b/src/sentry/db/models/query.py index 29a6a0c9e8418d..156743cec510b4 100644 --- a/src/sentry/db/models/query.py +++ b/src/sentry/db/models/query.py @@ -170,7 +170,7 @@ def in_iexact(column: str, values: Any) -> Q: from operator import or_ query = f"{column}__iexact" - # if values is empty, have a default value for the reduce call that will essentially resolve a colum in [] + # if values is empty, have a default value for the reduce call that will essentially resolve a column in [] query_in = f"{column}__in" return reduce(or_, [Q(**{query: v}) for v in values], Q(**{query_in: []}))