diff --git a/django-stubs/contrib/gis/db/backends/oracle/features.pyi b/django-stubs/contrib/gis/db/backends/oracle/features.pyi index 5c4571cc7..9785b6e1b 100644 --- a/django-stubs/contrib/gis/db/backends/oracle/features.pyi +++ b/django-stubs/contrib/gis/db/backends/oracle/features.pyi @@ -1,5 +1,8 @@ +from typing import Any + from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures from django.db.backends.oracle.features import DatabaseFeatures as OracleDatabaseFeatures +from django.utils.functional import cached_property class DatabaseFeatures(BaseSpatialFeatures, OracleDatabaseFeatures): supports_add_srs_entry: bool @@ -7,3 +10,5 @@ class DatabaseFeatures(BaseSpatialFeatures, OracleDatabaseFeatures): supports_geometry_field_unique_index: bool supports_perimeter_geodetic: bool supports_dwithin_distance_expr: bool + @cached_property + def django_test_skips(self) -> dict[str, Any]: ... # type: ignore[override] diff --git a/django-stubs/db/models/__init__.pyi b/django-stubs/db/models/__init__.pyi index 483225654..06c0383b9 100644 --- a/django-stubs/db/models/__init__.pyi +++ b/django-stubs/db/models/__init__.pyi @@ -91,6 +91,7 @@ from .lookups import Transform as Transform from .manager import Manager as Manager from .query import Prefetch as Prefetch from .query import QuerySet as QuerySet +from .query import aprefetch_related_objects as aprefetch_related_objects from .query import prefetch_related_objects as prefetch_related_objects from .query_utils import FilteredRelation as FilteredRelation from .query_utils import Q as Q diff --git a/django-stubs/db/models/query_utils.pyi b/django-stubs/db/models/query_utils.pyi index c6cfb2470..563072b24 100644 --- a/django-stubs/db/models/query_utils.pyi +++ b/django-stubs/db/models/query_utils.pyi @@ -13,6 +13,7 @@ from django.db.models.sql.compiler import SQLCompiler, _AsSqlType from django.db.models.sql.query import Query from django.db.models.sql.where import WhereNode from django.utils import tree +from django.utils.functional import cached_property PathInfo = namedtuple( "PathInfo", ["from_opts", "to_opts", "target_fields", "join_field", "m2m", "direct", "filtered_relation"] @@ -44,6 +45,8 @@ class Q(tree.Node): def flatten(self) -> Iterator[Incomplete]: ... def check(self, against: dict[str, Any], using: str = ...) -> bool: ... def deconstruct(self) -> tuple[str, Sequence[Any], dict[str, Any]]: ... + @cached_property + def referenced_base_fields(self) -> set[str]: ... class DeferredAttribute: field: Field diff --git a/mypy.ini b/mypy.ini index 0ac3d750f..0dd267fa9 100644 --- a/mypy.ini +++ b/mypy.ini @@ -27,5 +27,8 @@ plugins = disallow_untyped_defs = false disallow_incomplete_defs = false +[mypy-cryptography.*] +ignore_errors = true + [mypy.plugins.django-stubs] django_settings_module = scripts.django_tests_settings diff --git a/requirements.txt b/requirements.txt index 95b5eb2c0..e35b68505 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,10 +8,10 @@ pytest-shard==0.1.2 # Django deps: psycopg2-binary -Django==4.2.11; python_version < '3.10' -Django==5.0.4; python_version >= '3.10' +Django==4.2.12; python_version < '3.10' +Django==5.0.5; python_version >= '3.10' -e ./ext --e .[redis,compatible-mypy] +-e .[redis,compatible-mypy,oracle] # Overrides: mypy==1.10.0 diff --git a/scripts/stubtest/allowlist.txt b/scripts/stubtest/allowlist.txt index 44113453d..ef6a09219 100644 --- a/scripts/stubtest/allowlist.txt +++ b/scripts/stubtest/allowlist.txt @@ -393,6 +393,10 @@ django.urls.resolvers.URLPattern.lookup_str django.urls.resolvers.URLResolver.url_patterns django.urls.resolvers.URLResolver.urlconf_module django.utils.connection.BaseConnectionHandler.settings +django.db.models.Q.referenced_base_fields +django.db.models.query_utils.Q.referenced_base_fields +django.contrib.gis.db.models.Q.referenced_base_fields +django.db.backends.oracle.features.DatabaseFeatures.django_test_skips # Ignore missing inner `Meta` class, see PR #2000 for the related discussion django.contrib.auth.base_user.AbstractBaseUser.Meta diff --git a/scripts/stubtest/allowlist_todo.txt b/scripts/stubtest/allowlist_todo.txt index 45811f582..2c58335df 100644 --- a/scripts/stubtest/allowlist_todo.txt +++ b/scripts/stubtest/allowlist_todo.txt @@ -208,13 +208,9 @@ django.contrib.gis.db.backends.base.operations.BaseSpatialOperations.mariadb django.contrib.gis.db.backends.mysql.base django.contrib.gis.db.backends.mysql.features.DatabaseFeatures.unsupported_geojson_options django.contrib.gis.db.backends.mysql.introspection -django.contrib.gis.db.backends.oracle.adapter -django.contrib.gis.db.backends.oracle.base django.contrib.gis.db.backends.oracle.features.DatabaseFeatures.django_test_skips django.contrib.gis.db.backends.oracle.features.DatabaseFeatures.supports_tolerance_parameter django.contrib.gis.db.backends.oracle.features.DatabaseFeatures.unsupported_geojson_options -django.contrib.gis.db.backends.oracle.introspection -django.contrib.gis.db.backends.oracle.operations django.contrib.gis.db.backends.postgis.adapter.PostGISAdapter.prepare django.contrib.gis.db.backends.postgis.features.DatabaseFeatures.empty_intersection_returns_none django.contrib.gis.db.backends.postgis.features.DatabaseFeatures.supports_geography @@ -592,12 +588,8 @@ django.db.backends.mysql.features.DatabaseFeatures.supports_table_check_constrai django.db.backends.mysql.features.DatabaseFeatures.test_collations django.db.backends.mysql.introspection django.db.backends.mysql.schema.DatabaseSchemaEditor.sql_alter_column_comment -django.db.backends.oracle.base django.db.backends.oracle.features.DatabaseFeatures.introspected_field_types django.db.backends.oracle.features.DatabaseFeatures.supports_collation_on_charfield -django.db.backends.oracle.introspection -django.db.backends.oracle.operations -django.db.backends.oracle.utils django.db.backends.postgresql.base.DatabaseWrapper.Database django.db.backends.postgresql.base.DatabaseWrapper.ensure_role django.db.backends.postgresql.base.DatabaseWrapper.ops diff --git a/scripts/stubtest/allowlist_todo_django50.txt b/scripts/stubtest/allowlist_todo_django50.txt index 9da15e5aa..227ed3c2c 100644 --- a/scripts/stubtest/allowlist_todo_django50.txt +++ b/scripts/stubtest/allowlist_todo_django50.txt @@ -92,3 +92,12 @@ django.forms.fields_for_model django.forms.models.fields_for_model django.forms.widgets.ClearableFileInput.checked django.template.autoreload + +# Django + Oracle (new errors after 5.0.5 update) +django.db.backends.oracle.utils.dsn +django.db.backends.oracle.utils.BulkInsertMapper.NCLOB +django.db.backends.oracle.introspection.TableInfo +django.db.backends.oracle.base.DatabaseWrapper.oracledb_version +django.db.backends.oracle.base.DatabaseWrapper.ops +django.contrib.gis.db.backends.oracle.operations.OracleOperations.from_text +django.contrib.gis.db.backends.oracle.operations.OracleOperations.convert_extent diff --git a/setup.py b/setup.py index d056f7b2a..66bcca87b 100644 --- a/setup.py +++ b/setup.py @@ -34,6 +34,7 @@ def find_stub_files(name: str) -> List[str]: extras_require = { "compatible-mypy": ["mypy~=1.10.0"], "redis": ["redis"], + "oracle": ["oracledb"], } setup(