From b700d688d5e5d9bc8afc503bbb331ca75fd1283d Mon Sep 17 00:00:00 2001 From: Mike Manger Date: Mon, 16 Dec 2024 16:00:40 +0000 Subject: [PATCH 1/6] Update test mastrix to only target supported versions --- .github/workflows/mysql_test.yml | 20 ++++++++++---------- .github/workflows/postgres_test.yml | 20 ++++++++++---------- .github/workflows/sqlite_test.yml | 20 ++++++++++---------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.github/workflows/mysql_test.yml b/.github/workflows/mysql_test.yml index 212dddb..25ba96c 100644 --- a/.github/workflows/mysql_test.yml +++ b/.github/workflows/mysql_test.yml @@ -12,17 +12,17 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: [ 3.8, 3.9, 3.10.13, 3.11 ] - django-version: [ 3.2.21, 4.1.11, 4.2.5 ] + python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13' ] + django-version: [ 4.2.17, 5.0.10, 5.1.4 ] exclude: - - python-version: 3.8 - django-version: 4.1.11 - - python-version: 3.8 - django-version: 4.2.5 - - python-version: 3.11 - django-version: 3.2.21 - - python-version: 3.11 - django-version: 4.1.11 + - python-version: '3.9' + django-version: 5.0.10 + - python-version: '3.9' + django-version: 5.1.4 + - python-version: '3.13' + django-version: 4.2.17 + - python-version: '3.13' + django-version: 5.0.10 services: mysql: image: mysql diff --git a/.github/workflows/postgres_test.yml b/.github/workflows/postgres_test.yml index 605a8e1..274b3a9 100644 --- a/.github/workflows/postgres_test.yml +++ b/.github/workflows/postgres_test.yml @@ -12,17 +12,17 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: [ 3.8, 3.9, 3.10.13, 3.11 ] - django-version: [ 3.2.21, 4.1.11, 4.2.5 ] + python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13' ] + django-version: [ 4.2.17, 5.0.10, 5.1.4 ] exclude: - - python-version: 3.8 - django-version: 4.1.11 - - python-version: 3.8 - django-version: 4.2.5 - - python-version: 3.11 - django-version: 3.2.21 - - python-version: 3.11 - django-version: 4.1.11 + - python-version: '3.9' + django-version: 5.0.10 + - python-version: '3.9' + django-version: 5.1.4 + - python-version: '3.13' + django-version: 4.2.17 + - python-version: '3.13' + django-version: 5.0.10 services: postgres: image: postgres diff --git a/.github/workflows/sqlite_test.yml b/.github/workflows/sqlite_test.yml index 5c4d14a..8a94b1c 100644 --- a/.github/workflows/sqlite_test.yml +++ b/.github/workflows/sqlite_test.yml @@ -12,17 +12,17 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: [ 3.8, 3.9, 3.10.13, 3.11 ] - django-version: [ 3.2.21, 4.1.11, 4.2.5 ] + python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13' ] + django-version: [ 4.2.17, 5.0.10, 5.1.4 ] exclude: - - python-version: 3.8 - django-version: 4.1.11 - - python-version: 3.8 - django-version: 4.2.5 - - python-version: 3.11 - django-version: 3.2.21 - - python-version: 3.11 - django-version: 4.1.11 + - python-version: '3.9' + django-version: 5.0.10 + - python-version: '3.9' + django-version: 5.1.4 + - python-version: '3.13' + django-version: 4.2.17 + - python-version: '3.13' + django-version: 5.0.10 steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} From c55143a7f7eedfe557c9b910a20bdfb0b293959a Mon Sep 17 00:00:00 2001 From: Mike Manger Date: Mon, 16 Dec 2024 16:02:18 +0000 Subject: [PATCH 2/6] Bump action versions to fix deprication warnings --- .github/workflows/mysql_test.yml | 4 ++-- .github/workflows/postgres_test.yml | 4 ++-- .github/workflows/sqlite_test.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/mysql_test.yml b/.github/workflows/mysql_test.yml index 25ba96c..a48418f 100644 --- a/.github/workflows/mysql_test.yml +++ b/.github/workflows/mysql_test.yml @@ -40,9 +40,9 @@ jobs: --health-timeout=5s --health-retries=5 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install Dependencies diff --git a/.github/workflows/postgres_test.yml b/.github/workflows/postgres_test.yml index 274b3a9..9924f31 100644 --- a/.github/workflows/postgres_test.yml +++ b/.github/workflows/postgres_test.yml @@ -37,9 +37,9 @@ jobs: --health-timeout 5s --health-retries 5 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install Dependencies diff --git a/.github/workflows/sqlite_test.yml b/.github/workflows/sqlite_test.yml index 8a94b1c..085ac24 100644 --- a/.github/workflows/sqlite_test.yml +++ b/.github/workflows/sqlite_test.yml @@ -24,9 +24,9 @@ jobs: - python-version: '3.13' django-version: 5.0.10 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install Dependencies From c617741e4e15345da5cbcf211c52ced48df4e1c3 Mon Sep 17 00:00:00 2001 From: Mike Manger Date: Mon, 16 Dec 2024 16:24:03 +0000 Subject: [PATCH 3/6] Run GH tests on all PRs --- .github/workflows/mysql_test.yml | 1 - .github/workflows/postgres_test.yml | 1 - .github/workflows/sqlite_test.yml | 1 - 3 files changed, 3 deletions(-) diff --git a/.github/workflows/mysql_test.yml b/.github/workflows/mysql_test.yml index a48418f..843823b 100644 --- a/.github/workflows/mysql_test.yml +++ b/.github/workflows/mysql_test.yml @@ -4,7 +4,6 @@ on: push: branches: [ master ] pull_request: - branches: [ master ] jobs: test: diff --git a/.github/workflows/postgres_test.yml b/.github/workflows/postgres_test.yml index 9924f31..a4b67ed 100644 --- a/.github/workflows/postgres_test.yml +++ b/.github/workflows/postgres_test.yml @@ -4,7 +4,6 @@ on: push: branches: [ master ] pull_request: - branches: [ master ] jobs: test: diff --git a/.github/workflows/sqlite_test.yml b/.github/workflows/sqlite_test.yml index 085ac24..764ed5a 100644 --- a/.github/workflows/sqlite_test.yml +++ b/.github/workflows/sqlite_test.yml @@ -4,7 +4,6 @@ on: push: branches: [ master ] pull_request: - branches: [ master ] jobs: test: From 2b2134981525d328154d8faed7a528f2d3ded387 Mon Sep 17 00:00:00 2001 From: Mike Manger Date: Mon, 16 Dec 2024 16:31:59 +0000 Subject: [PATCH 4/6] Update requirements in pyproject --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 03ee0b0..951bad5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,14 +10,14 @@ authors = [ ] description = "Improved API for aggregating using Subquery" readme = "Readme.rst" -requires-python = ">=3.8" +requires-python = ">=3.9" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] dependencies = [ - "django>=3.2", + "django>=4.2", "sqlparse" ] From ec3494ecc1b00ae11bd329d5697c229e78d424b0 Mon Sep 17 00:00:00 2001 From: Mike Manger Date: Mon, 16 Dec 2024 16:34:10 +0000 Subject: [PATCH 5/6] Use python 3 super methods --- sql_util/aggregates.py | 12 ++++++------ sql_util/tests/test_exists.py | 10 +++++----- sql_util/tests/test_subquery.py | 12 ++++++------ 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/sql_util/aggregates.py b/sql_util/aggregates.py index 18e5c72..4687660 100644 --- a/sql_util/aggregates.py +++ b/sql_util/aggregates.py @@ -9,7 +9,7 @@ def __init__(self, queryset_or_expression, **extra): if isinstance(queryset_or_expression, QuerySet): self.queryset = queryset_or_expression self.query = self.queryset.query - super(Subquery, self).__init__(queryset_or_expression, **extra) + super().__init__(queryset_or_expression, **extra) else: expression = queryset_or_expression if not hasattr(expression, 'resolve_expression'): @@ -34,7 +34,7 @@ def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize queryset = self.get_queryset(query.clone(), True, reuse, summarize) self.queryset = queryset self.query = queryset.query - return super(Subquery, self).resolve_expression(query, allow_joins, reuse, summarize, for_save) + return super().resolve_expression(query, allow_joins, reuse, summarize, for_save) def get_queryset(self, query, allow_joins, reuse, summarize): # This is a customization hook for child classes to override the base queryset computed automatically @@ -144,7 +144,7 @@ def __init__(self, *args, **extra): self.ordering = extra.pop('ordering', None) assert self.aggregate is not None, "Error: Attempt to instantiate a " \ "SubqueryAggregate with no aggregate function" - super(SubqueryAggregate, self).__init__(*args, **extra) + super().__init__(*args, **extra) def get_queryset(self, query, allow_joins, reuse, summarize): queryset = self._get_base_queryset(query, allow_joins, reuse, summarize) @@ -207,7 +207,7 @@ class SubqueryCount(SubqueryAggregate): def __init__(self, expression, reverse='', *args, **kwargs): kwargs['output_field'] = kwargs.get('output_field', IntegerField()) - super(SubqueryCount, self).__init__(expression, reverse=reverse, *args, **kwargs) + super().__init__(expression, reverse=reverse, *args, **kwargs) class SubqueryMin(SubqueryAggregate): @@ -236,7 +236,7 @@ class Exists(Subquery): def __init__(self, *args, **kwargs): self.negated = kwargs.pop('negated', False) - super(Exists, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.output_field = BooleanField() def __invert__(self): @@ -244,7 +244,7 @@ def __invert__(self): return type(self)(self.queryset if self.queryset is not None else self.expression, negated=(not self.negated), **self.extra) def as_sql(self, compiler, connection, template=None, **extra_context): - sql, params = super(Exists, self).as_sql(compiler, connection, template, **extra_context) + sql, params = super().as_sql(compiler, connection, template, **extra_context) if self.negated: sql = 'NOT {}'.format(sql) return sql, params diff --git a/sql_util/tests/test_exists.py b/sql_util/tests/test_exists.py index 590d48d..87002dd 100644 --- a/sql_util/tests/test_exists.py +++ b/sql_util/tests/test_exists.py @@ -10,7 +10,7 @@ class TestExists(TestCase): @classmethod def setUpClass(cls): - super(TestExists, cls).setUpClass() + super().setUpClass() parents = [ Parent.objects.create(name='John'), @@ -55,7 +55,7 @@ def test_easy_negated_exists(self): class TestExistsFilter(TestCase): @classmethod def setUpClass(cls): - super(TestExistsFilter, cls).setUpClass() + super().setUpClass() publishers = [ Publisher.objects.create(name='Publisher 1', number=1), Publisher.objects.create(name='Publisher 2', number=2) @@ -113,7 +113,7 @@ class TestManyToManyExists(TestCase): @classmethod def setUpClass(cls): - super(TestManyToManyExists, cls).setUpClass() + super().setUpClass() publishers = [ Publisher.objects.create(name='Publisher 1', number=1), Publisher.objects.create(name='Publisher 2', number=2) @@ -219,7 +219,7 @@ def test_filter_last_join(self): class TestExistsReverseNames(TestCase): @classmethod def setUpClass(cls): - super(TestExistsReverseNames, cls).setUpClass() + super().setUpClass() categories = [ Category.objects.create(name='cat one'), Category.objects.create(name='cat two'), @@ -292,7 +292,7 @@ def test_name_doesnt_match_m2m(self): class TestGenericForeignKey(TestCase): @classmethod def setUpClass(cls): - super(TestGenericForeignKey, cls).setUpClass() + super().setUpClass() dogs = [ Dog.objects.create(name="Fido"), Dog.objects.create(name="Snoopy"), diff --git a/sql_util/tests/test_subquery.py b/sql_util/tests/test_subquery.py index 6670d17..808fa81 100644 --- a/sql_util/tests/test_subquery.py +++ b/sql_util/tests/test_subquery.py @@ -13,7 +13,7 @@ class TestParentChild(TestCase): @classmethod def setUpClass(cls): - super(TestParentChild, cls).setUpClass() + super().setUpClass() parents = [ Parent.objects.create(name='John'), Parent.objects.create(name='Jane') @@ -96,7 +96,7 @@ class TestManyToMany(TestCase): @classmethod def setUpClass(cls): - super(TestManyToMany, cls).setUpClass() + super().setUpClass() publishers = [ Publisher.objects.create(name='Publisher 1', number=1), Publisher.objects.create(name='Publisher 2', number=2) @@ -220,7 +220,7 @@ def test_self_join(self): class TestForeignKey(TestCase): @classmethod def setUpClass(cls): - super(TestForeignKey, cls).setUpClass() + super().setUpClass() publishers = [ Publisher.objects.create(name='Publisher 1', number=1), Publisher.objects.create(name='Publisher 2', number=2) @@ -271,7 +271,7 @@ class TestReverseForeignKey(TestCase): @classmethod def setUpClass(cls): - super(TestReverseForeignKey, cls).setUpClass() + super().setUpClass() catalogs = [ Catalog.objects.create(number='A'), Catalog.objects.create(number='B') @@ -366,7 +366,7 @@ class TestForeignKeyToField(TestCase): @classmethod def setUpClass(cls): - super(TestForeignKeyToField, cls).setUpClass() + super().setUpClass() brand = Brand.objects.create(name='Python', company_id=1337) products = [ Product.objects.create(brand=brand, num_purchases=1), @@ -384,7 +384,7 @@ class TestMultipleForeignKeyToTheSameModel(TestCase): @classmethod def setUpClass(cls): - super(TestMultipleForeignKeyToTheSameModel, cls).setUpClass() + super().setUpClass() player1 = Player.objects.create(nickname='Player 1') player2 = Player.objects.create(nickname='Player 2') From 3c9e74a0f6e6306a48b558b5854cc600d27dc7b6 Mon Sep 17 00:00:00 2001 From: Mike Manger Date: Mon, 16 Dec 2024 16:35:05 +0000 Subject: [PATCH 6/6] Use new postgres django backend for tests --- sql_util/tests/test_postgres_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql_util/tests/test_postgres_settings.py b/sql_util/tests/test_postgres_settings.py index 58fec0a..f870ff0 100644 --- a/sql_util/tests/test_postgres_settings.py +++ b/sql_util/tests/test_postgres_settings.py @@ -2,7 +2,7 @@ DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'sqlutil', 'USER': 'postgres', 'PASSWORD': 'postgres',