Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2f036ae
Bumped version; main is now 6.0 pre-alpha.
sarahboyce Dec 12, 2024
54a96b7
Added stub release notes for 6.0.
sarahboyce Dec 12, 2024
d943acf
Removed versionadded/changed annotations for 5.1.
sarahboyce Dec 12, 2024
0672116
Refs #34355 -- Removed support for positional arguments in BaseConstr…
sarahboyce Dec 12, 2024
631c744
Refs #32339 -- Removed transitional form renderers per deprecation ti…
sarahboyce Dec 12, 2024
abbeb59
Refs #34547 -- Removed DatabaseOperations.field_cast_sql() per deprec…
sarahboyce Dec 12, 2024
34efe06
Refs #22569 -- Made request required in ModelAdmin.lookup_allowed() p…
sarahboyce Dec 12, 2024
f0a3c35
Refs #34609 -- Removed support for calling format_html() without argu…
sarahboyce Dec 12, 2024
4b551c3
Refs #35090 -- Removed support for django.urls.register_converter() o…
sarahboyce Dec 12, 2024
8adee77
Refs #34380 -- Changed the URLField default scheme to https and remov…
sarahboyce Dec 12, 2024
3fbb49b
Refs #16055 -- Removed get_joining_columns()/get_reverse_joining_colu…
sarahboyce Dec 12, 2024
5e70123
Refs #33817 -- Removed support for cx_Oracle per deprecation timeline.
sarahboyce Dec 12, 2024
4b1d8eb
Removed ChoicesMeta per deprecation timeline.
sarahboyce Dec 12, 2024
7ad41f8
Refs #33651 -- Removed Prefetch.get_current_queryset() and get_prefet…
sarahboyce Dec 12, 2024
51ebe94
Refs #34462 -- Removed ModelAdmin.log_deletion() and LogEntryManager.…
sarahboyce Dec 12, 2024
fdbc60f
Refs #34983 -- Removed django.utils.itercompat per deprecation timeline.
sarahboyce Dec 13, 2024
d76a306
Removed django.contrib.gis.geoip2.GeoIP2.coords() per deprecation tim…
sarahboyce Dec 13, 2024
68dc1b3
Removed django.contrib.gis.geoip2.GeoIP2.open() per deprecation timel…
sarahboyce Dec 13, 2024
c95e254
Refs #35060 -- Removed passing positional arguments to Model.save()/a…
sarahboyce Dec 13, 2024
ff0fe5d
Refs #35058 -- Removed OGRGeometry.coord_dim setter per deprecation t…
sarahboyce Dec 13, 2024
335d3e2
Refs #35234 -- Removed CheckConstraint.check per deprecation timeline.
sarahboyce Dec 13, 2024
f7e6202
Refs #35405 -- Removed FieldCacheMixin.get_cache_name() per deprecati…
sarahboyce Dec 13, 2024
235e1b2
Refs #35326 -- Removed FileSystemStorage.OS_OPEN_FLAGS per deprecatio…
sarahboyce Dec 12, 2024
eee58f7
Advanced deprecation warnings for Django 6.0.
sarahboyce Dec 13, 2024
c4ee5d0
Increased the default PBKDF2 iterations for Django 6.0.
sarahboyce Dec 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion django/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.utils.version import get_version

VERSION = (5, 2, 0, "alpha", 0)
VERSION = (6, 0, 0, "alpha", 0)

__version__ = get_version(VERSION)

Expand Down
17 changes: 0 additions & 17 deletions django/conf/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,12 @@
import django
from django.conf import global_settings
from django.core.exceptions import ImproperlyConfigured
from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.functional import LazyObject, empty

ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
DEFAULT_STORAGE_ALIAS = "default"
STATICFILES_STORAGE_ALIAS = "staticfiles"

# RemovedInDjango60Warning.
FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG = (
"The FORMS_URLFIELD_ASSUME_HTTPS transitional setting is deprecated."
)


class SettingsReference(str):
"""
Expand Down Expand Up @@ -186,12 +180,6 @@ def __init__(self, settings_module):
setattr(self, setting, setting_value)
self._explicit_settings.add(setting)

if self.is_overridden("FORMS_URLFIELD_ASSUME_HTTPS"):
warnings.warn(
FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG,
RemovedInDjango60Warning,
)

if hasattr(time, "tzset") and self.TIME_ZONE:
# When we can, attempt to validate the timezone. If we can't find
# this file, no check happens and it's harmless.
Expand Down Expand Up @@ -236,11 +224,6 @@ def __getattr__(self, name):

def __setattr__(self, name, value):
self._deleted.discard(name)
if name == "FORMS_URLFIELD_ASSUME_HTTPS":
warnings.warn(
FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG,
RemovedInDjango60Warning,
)
super().__setattr__(name, value)

def __delattr__(self, name):
Expand Down
5 changes: 0 additions & 5 deletions django/conf/global_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,11 +218,6 @@ def gettext_noop(s):
# Default form rendering class.
FORM_RENDERER = "django.forms.renderers.DjangoTemplates"

# RemovedInDjango60Warning: It's a transitional setting helpful in early
# adoption of "https" as the new default value of forms.URLField.assume_scheme.
# Set to True to assume "https" during the Django 5.x release cycle.
FORMS_URLFIELD_ASSUME_HTTPS = False

# Default email address to use for various automated correspondence from
# the site managers.
DEFAULT_FROM_EMAIL = "webmaster@localhost"
Expand Down
49 changes: 0 additions & 49 deletions django/contrib/admin/models.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import json
import warnings

from django.conf import settings
from django.contrib.admin.utils import quote
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.urls import NoReverseMatch, reverse
from django.utils import timezone
from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.text import get_text_list
from django.utils.translation import gettext
from django.utils.translation import gettext_lazy as _
Expand All @@ -26,56 +24,9 @@
class LogEntryManager(models.Manager):
use_in_migrations = True

def log_action(
self,
user_id,
content_type_id,
object_id,
object_repr,
action_flag,
change_message="",
):
warnings.warn(
"LogEntryManager.log_action() is deprecated. Use log_actions() instead.",
RemovedInDjango60Warning,
stacklevel=2,
)
if isinstance(change_message, list):
change_message = json.dumps(change_message)
return self.model.objects.create(
user_id=user_id,
content_type_id=content_type_id,
object_id=str(object_id),
object_repr=object_repr[:200],
action_flag=action_flag,
change_message=change_message,
)

def log_actions(
self, user_id, queryset, action_flag, change_message="", *, single_object=False
):
# RemovedInDjango60Warning.
if type(self).log_action != LogEntryManager.log_action:
warnings.warn(
"The usage of log_action() is deprecated. Implement log_actions() "
"instead.",
RemovedInDjango60Warning,
stacklevel=2,
)
return [
self.log_action(
user_id=user_id,
content_type_id=ContentType.objects.get_for_model(
obj, for_concrete_model=False
).id,
object_id=obj.pk,
object_repr=str(obj),
action_flag=action_flag,
change_message=change_message,
)
for obj in queryset
]

if isinstance(change_message, list):
change_message = json.dumps(change_message)

Expand Down
45 changes: 2 additions & 43 deletions django/contrib/admin/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import enum
import json
import re
import warnings
from functools import partial, update_wrapper
from urllib.parse import parse_qsl
from urllib.parse import quote as urlquote
Expand Down Expand Up @@ -56,7 +55,6 @@
from django.template.response import SimpleTemplateResponse, TemplateResponse
from django.urls import reverse
from django.utils.decorators import method_decorator
from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.html import format_html
from django.utils.http import urlencode
from django.utils.safestring import mark_safe
Expand Down Expand Up @@ -448,9 +446,7 @@ def get_sortable_by(self, request):
else self.get_list_display(request)
)

# RemovedInDjango60Warning: when the deprecation ends, replace with:
# def lookup_allowed(self, lookup, value, request):
def lookup_allowed(self, lookup, value, request=None):
def lookup_allowed(self, lookup, value, request):
from django.contrib.admin.filters import SimpleListFilter

model = self.model
Expand Down Expand Up @@ -498,12 +494,7 @@ def lookup_allowed(self, lookup, value, request=None):
# Either a local field filter, or no fields at all.
return True
valid_lookups = {self.date_hierarchy}
# RemovedInDjango60Warning: when the deprecation ends, replace with:
# for filter_item in self.get_list_filter(request):
list_filter = (
self.get_list_filter(request) if request is not None else self.list_filter
)
for filter_item in list_filter:
for filter_item in self.get_list_filter(request):
if isinstance(filter_item, type) and issubclass(
filter_item, SimpleListFilter
):
Expand Down Expand Up @@ -974,28 +965,6 @@ def log_change(self, request, obj, message):
single_object=True,
)

def log_deletion(self, request, obj, object_repr):
"""
Log that an object will be deleted. Note that this method must be
called before the deletion.

The default implementation creates an admin LogEntry object.
"""
warnings.warn(
"ModelAdmin.log_deletion() is deprecated. Use log_deletions() instead.",
RemovedInDjango60Warning,
stacklevel=2,
)
from django.contrib.admin.models import DELETION, LogEntry

return LogEntry.objects.log_action(
user_id=request.user.pk,
content_type_id=get_content_type_for_model(obj).pk,
object_id=obj.pk,
object_repr=object_repr,
action_flag=DELETION,
)

def log_deletions(self, request, queryset):
"""
Log that objects will be deleted. Note that this method must be called
Expand All @@ -1005,16 +974,6 @@ def log_deletions(self, request, queryset):
"""
from django.contrib.admin.models import DELETION, LogEntry

# RemovedInDjango60Warning.
if type(self).log_deletion != ModelAdmin.log_deletion:
warnings.warn(
"The usage of log_deletion() is deprecated. Implement log_deletions() "
"instead.",
RemovedInDjango60Warning,
stacklevel=2,
)
return [self.log_deletion(request, obj, str(obj)) for obj in queryset]

return LogEntry.objects.log_actions(
user_id=request.user.pk,
queryset=queryset,
Expand Down
15 changes: 1 addition & 14 deletions django/contrib/admin/views/main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import warnings
from datetime import datetime, timedelta

from django import forms
Expand Down Expand Up @@ -33,9 +32,7 @@
from django.db.models.constants import LOOKUP_SEP
from django.db.models.expressions import Combinable
from django.urls import reverse
from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.http import urlencode
from django.utils.inspect import func_supports_parameter
from django.utils.timezone import make_aware
from django.utils.translation import gettext

Expand Down Expand Up @@ -178,19 +175,9 @@ def get_filters(self, request):
may_have_duplicates = False
has_active_filters = False

supports_request = func_supports_parameter(
self.model_admin.lookup_allowed, "request"
)
if not supports_request:
warnings.warn(
f"`request` must be added to the signature of "
f"{self.model_admin.__class__.__qualname__}.lookup_allowed().",
RemovedInDjango60Warning,
)
for key, value_list in lookup_params.items():
for value in value_list:
params = (key, value, request) if supports_request else (key, value)
if not self.model_admin.lookup_allowed(*params):
if not self.model_admin.lookup_allowed(key, value, request):
raise DisallowedModelAdminLookup(f"Filtering by {key} not allowed")

filter_specs = []
Expand Down
4 changes: 1 addition & 3 deletions django/contrib/auth/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,7 @@ def get_urls(self):
),
] + super().get_urls()

# RemovedInDjango60Warning: when the deprecation ends, replace with:
# def lookup_allowed(self, lookup, value, request):
def lookup_allowed(self, lookup, value, request=None):
def lookup_allowed(self, lookup, value, request):
# Don't allow lookups involving passwords.
return not lookup.startswith("password") and super().lookup_allowed(
lookup, value, request
Expand Down
7 changes: 2 additions & 5 deletions django/contrib/auth/base_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,8 @@ class Meta:
def __str__(self):
return self.get_username()

# RemovedInDjango60Warning: When the deprecation ends, replace with:
# def save(self, **kwargs):
# super().save(**kwargs)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
def save(self, **kwargs):
super().save(**kwargs)
if self._password is not None:
password_validation.password_changed(self._password, self)
self._password = None
Expand Down
2 changes: 1 addition & 1 deletion django/contrib/auth/hashers.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ class PBKDF2PasswordHasher(BasePasswordHasher):
"""

algorithm = "pbkdf2_sha256"
iterations = 1_000_000
iterations = 1_200_000
digest = hashlib.sha256

def encode(self, password, salt, iterations=None):
Expand Down
24 changes: 0 additions & 24 deletions django/contrib/contenttypes/fields.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import functools
import itertools
import warnings
from collections import defaultdict

from asgiref.sync import sync_to_async
Expand All @@ -21,7 +20,6 @@
from django.db.models.sql import AND
from django.db.models.sql.where import WhereNode
from django.db.models.utils import AltersData
from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.functional import cached_property


Expand Down Expand Up @@ -159,17 +157,6 @@ def get_content_type(self, obj=None, id=None, using=None, model=None):
# This should never happen. I love comments like this, don't you?
raise Exception("Impossible arguments to GFK.get_content_type!")

def get_prefetch_queryset(self, instances, queryset=None):
warnings.warn(
"get_prefetch_queryset() is deprecated. Use get_prefetch_querysets() "
"instead.",
RemovedInDjango60Warning,
stacklevel=2,
)
if queryset is None:
return self.get_prefetch_querysets(instances)
return self.get_prefetch_querysets(instances, [queryset])

def get_prefetch_querysets(self, instances, querysets=None):
custom_queryset_dict = {}
if querysets is not None:
Expand Down Expand Up @@ -626,17 +613,6 @@ def get_queryset(self):
queryset = super().get_queryset()
return self._apply_rel_filters(queryset)

def get_prefetch_queryset(self, instances, queryset=None):
warnings.warn(
"get_prefetch_queryset() is deprecated. Use get_prefetch_querysets() "
"instead.",
RemovedInDjango60Warning,
stacklevel=2,
)
if queryset is None:
return self.get_prefetch_querysets(instances)
return self.get_prefetch_querysets(instances, [queryset])

def get_prefetch_querysets(self, instances, querysets=None):
if querysets and len(querysets) != 1:
raise ValueError(
Expand Down
3 changes: 2 additions & 1 deletion django/contrib/gis/db/backends/oracle/adapter.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import oracledb

from django.contrib.gis.db.backends.base.adapter import WKTAdapter
from django.contrib.gis.geos import GeometryCollection, Polygon
from django.db.backends.oracle.oracledb_any import oracledb


class OracleSpatialAdapter(WKTAdapter):
Expand Down
3 changes: 2 additions & 1 deletion django/contrib/gis/db/backends/oracle/introspection.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import oracledb

from django.db.backends.oracle.introspection import DatabaseIntrospection
from django.db.backends.oracle.oracledb_any import oracledb
from django.utils.functional import cached_property


Expand Down
12 changes: 0 additions & 12 deletions django/contrib/gis/gdal/geometries.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
"""

import sys
import warnings
from binascii import b2a_hex
from ctypes import byref, c_char_p, c_double, c_ubyte, c_void_p, string_at

Expand All @@ -52,7 +51,6 @@
from django.contrib.gis.gdal.prototypes import srs as srs_api
from django.contrib.gis.gdal.srs import CoordTransform, SpatialReference
from django.contrib.gis.geometry import hex_regex, json_regex, wkt_regex
from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.encoding import force_bytes


Expand Down Expand Up @@ -215,16 +213,6 @@ def coord_dim(self):
"Return the coordinate dimension of the Geometry."
return capi.get_coord_dim(self.ptr)

# RemovedInDjango60Warning
@coord_dim.setter
def coord_dim(self, dim):
"Set the coordinate dimension of this Geometry."
msg = "coord_dim setter is deprecated. Use set_3d() instead."
warnings.warn(msg, RemovedInDjango60Warning, stacklevel=2)
if dim not in (2, 3):
raise ValueError("Geometry dimension must be either 2 or 3")
capi.set_coord_dim(self.ptr, dim)

@property
def geom_count(self):
"Return the number of elements in this Geometry."
Expand Down
Loading
Loading