Skip to content

Commit 5adea71

Browse files
authored
Tests: Update to Django 6.0; fall back to 5.2 on Python <3.12 (#2939)
* CI: Use Django 5.2 or 6.0 depending on Python version Affects `tests` dependency group only. * Fix stubtest * Fix tests for Django 6.0 * More stubtest fixes * More test fixes * Include Django 6.0 in test matrix * Fix tests even more * Oops, brain fart
1 parent bf3b6e5 commit 5adea71

File tree

11 files changed

+322
-49
lines changed

11 files changed

+322
-49
lines changed

.github/workflows/test.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,11 @@ jobs:
204204
matrix:
205205
python-version: ['3.10', '3.11', '3.12', '3.13']
206206
django-version: ['5.0', '5.1', '5.2']
207+
include:
208+
- python-version: '3.12'
209+
django-version: '6.0'
210+
- python-version: '3.13'
211+
django-version: '6.0'
207212
steps:
208213
- uses: actions/checkout@v6
209214
- name: Setup system dependencies

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ tests = [
4949
"pytest-shard==0.1.2",
5050
"pytest-xdist==3.8.0",
5151
# Django deps:
52-
"django==5.2.9",
52+
"django==5.2.9; python_version < '3.12'",
53+
"django==6.0; python_version >= '3.12'",
5354
"mysqlclient==2.2.7",
5455
"psycopg2-binary==2.9.11",
5556
"jinja2==3.1.6",

scripts/stubtest.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ stubtest django \
1313
--mypy-config-file mypy.ini \
1414
--allowlist scripts/stubtest/allowlist.txt \
1515
--allowlist scripts/stubtest/allowlist_todo.txt \
16-
--allowlist scripts/stubtest/allowlist_todo_django52.txt
16+
--allowlist scripts/stubtest/allowlist_todo_django52.txt \
17+
--allowlist scripts/stubtest/allowlist_todo_django60.txt

scripts/stubtest/allowlist.txt

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -235,24 +235,6 @@ django.contrib.sessions.backends.base.SessionBase.setdefault
235235
# Limited stubtest support for enums (https://github.com/python/mypy/issues/16806)
236236
django.db.migrations.operations.base.OperationCategory.__new__
237237

238-
# Ignore: ...Model.[a]save is inconsistent, stub does not have *args argument "args"
239-
# Positional arguments were deprecated in Django 5.1, we have adopted keyword-only arguments early.
240-
django.contrib.auth.base_user.AbstractBaseUser.save
241-
django.contrib.auth.models.AbstractBaseUser.save
242-
django.contrib.gis.db.models.Model.asave
243-
django.contrib.gis.db.models.Model.save
244-
django.db.models.Model.asave
245-
django.db.models.Model.save
246-
django.db.models.base.Model.asave
247-
django.db.models.base.Model.save
248-
249-
# Ignore: GeneratedField.__init__ is inconsistent, runtime argument "db_persist" has a default value but stub argument does not
250-
# The default value None never worked and has been dropped for Django 6.0:
251-
# https://code.djangoproject.com/ticket/36262
252-
django.contrib.gis.db.models.GeneratedField.__init__
253-
django.db.models.GeneratedField.__init__
254-
django.db.models.fields.generated.GeneratedField.__init__
255-
256238
# These are dynamically added when using `save(commit=False)`
257239
# See https://docs.djangoproject.com/en/5.2/topics/forms/modelforms/#the-save-method
258240
django.forms.BaseModelForm.save_m2m
@@ -276,9 +258,6 @@ django.http.request.QueryDict.pop
276258
# Django incorrectly uses a signature of `(cls, **kwargs)` when it should be `(cls, *args, **kwargs)`.
277259
django.test.selenium.SeleniumTestCase.__init_subclass__
278260

279-
# Django incorrectly uses a signature of `(self, *args, **kwargs)` when it should be `(self)`.
280-
django.forms.renderers.Jinja2DivFormRenderer.__init__
281-
282261
# mypy does not understand __getitem__ unpacking python/mypy#2220
283262
django.urls.ResolverMatch.__iter__
284263
django.urls.resolvers.ResolverMatch.__iter__

scripts/stubtest/allowlist_todo.txt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ django.contrib.admin.site
3030
django.contrib.admin.sites.site
3131
django.contrib.admin.tests.AdminSeleniumTestCase
3232
django.contrib.admin.tests.AdminSeleniumTestCase.assertCountSeleniumElements
33-
django.contrib.admin.tests.CSPMiddleware.process_response
3433
django.contrib.admin.utils.QUOTE_MAP
3534
django.contrib.admin.utils.UNQUOTE_MAP
3635
django.contrib.admin.utils.prepare_lookup_value
@@ -212,10 +211,8 @@ django.contrib.gis.db.models.ForeignObject.get_extra_descriptor_filter
212211
django.contrib.gis.db.models.ForeignObject.get_extra_restriction
213212
django.contrib.gis.db.models.ForeignObject.get_foreign_related_value
214213
django.contrib.gis.db.models.ForeignObject.get_instance_value_for_fields
215-
django.contrib.gis.db.models.ForeignObject.get_joining_columns
216214
django.contrib.gis.db.models.ForeignObject.get_local_related_value
217215
django.contrib.gis.db.models.ForeignObject.get_path_info
218-
django.contrib.gis.db.models.ForeignObject.get_reverse_joining_columns
219216
django.contrib.gis.db.models.ForeignObject.get_reverse_path_info
220217
django.contrib.gis.db.models.ForeignObject.path_infos
221218
django.contrib.gis.db.models.ForeignObject.related_accessor_class
@@ -397,7 +394,6 @@ django.core.servers.basehttp.ServerHandler.__init__
397394
django.core.servers.basehttp.ThreadedWSGIServer.__init__
398395
django.db.backends.ddl_references.Expressions
399396
django.db.backends.mysql.base.DatabaseWrapper.ops
400-
django.db.backends.mysql.features.DatabaseFeatures.can_rename_index
401397
django.db.backends.mysql.features.DatabaseFeatures.can_return_rows_from_bulk_insert
402398
django.db.backends.mysql.features.DatabaseFeatures.django_test_skips
403399
django.db.backends.mysql.features.DatabaseFeatures.minimum_database_version
@@ -546,10 +542,8 @@ django.db.models.ForeignObject.get_extra_descriptor_filter
546542
django.db.models.ForeignObject.get_extra_restriction
547543
django.db.models.ForeignObject.get_foreign_related_value
548544
django.db.models.ForeignObject.get_instance_value_for_fields
549-
django.db.models.ForeignObject.get_joining_columns
550545
django.db.models.ForeignObject.get_local_related_value
551546
django.db.models.ForeignObject.get_path_info
552-
django.db.models.ForeignObject.get_reverse_joining_columns
553547
django.db.models.ForeignObject.get_reverse_path_info
554548
django.db.models.ForeignObject.path_infos
555549
django.db.models.ForeignObject.related_accessor_class
@@ -757,10 +751,8 @@ django.db.models.fields.related.ForeignObject.get_extra_descriptor_filter
757751
django.db.models.fields.related.ForeignObject.get_extra_restriction
758752
django.db.models.fields.related.ForeignObject.get_foreign_related_value
759753
django.db.models.fields.related.ForeignObject.get_instance_value_for_fields
760-
django.db.models.fields.related.ForeignObject.get_joining_columns
761754
django.db.models.fields.related.ForeignObject.get_local_related_value
762755
django.db.models.fields.related.ForeignObject.get_path_info
763-
django.db.models.fields.related.ForeignObject.get_reverse_joining_columns
764756
django.db.models.fields.related.ForeignObject.get_reverse_path_info
765757
django.db.models.fields.related.ForeignObject.path_infos
766758
django.db.models.fields.related.ForeignObject.related_accessor_class
@@ -916,7 +908,6 @@ django.forms.models.BaseModelFormSet.model
916908
django.forms.models.ModelChoiceField.__deepcopy__
917909
django.forms.models.inlineformset_factory
918910
django.forms.models.modelformset_factory
919-
django.forms.renderers.DjangoDivFormRenderer
920911
django.forms.widgets.ChoiceWidget.template_name
921912
django.forms.widgets.Input.input_type
922913
django.forms.widgets.Media.__html__

scripts/stubtest/allowlist_todo_django52.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ django.db.backends.oracle.features.DatabaseFeatures.supports_primitives_in_json_
6161
django.db.backends.oracle.features.DatabaseFeatures.supports_tuple_lookups
6262
django.db.backends.oracle.features.DatabaseFeatures.test_collations
6363
django.db.backends.oracle.introspection.TableInfo
64-
django.db.backends.oracle.oracledb_any
6564
django.db.backends.oracle.utils.BulkInsertMapper.NCLOB
6665
django.db.backends.oracle.utils.dsn
6766
django.db.backends.postgresql.base.DatabaseWrapper.close_pool
@@ -71,7 +70,6 @@ django.db.backends.postgresql.features.DatabaseFeatures.django_test_skips
7170
django.db.backends.postgresql.features.DatabaseFeatures.supports_nulls_distinct_unique_constraints
7271
django.db.backends.postgresql.psycopg_any
7372
django.db.backends.sqlite3.base.DatabaseWrapper.transaction_modes
74-
django.db.backends.sqlite3.features.DatabaseFeatures.supports_tuple_lookups
7573
django.db.backends.sqlite3.schema.DatabaseSchemaEditor.sql_alter_column_comment
7674
django.db.backends.sqlite3.schema.DatabaseSchemaEditor.sql_alter_table_comment
7775
django.db.migrations.autodetector.MigrationAutodetector.generate_altered_constraints

0 commit comments

Comments
 (0)