Refs #27236 -- Refactored out DeprecationForHistoricalMigrationMixin.

This commit is contained in:
David Wobrock 2022-07-07 12:20:30 +02:00 committed by Mariusz Felisiak
parent 6f80050496
commit 57793b4765
2 changed files with 43 additions and 31 deletions

View File

@ -24,6 +24,7 @@ from django.utils.dateparse import (
parse_duration,
parse_time,
)
from django.utils.deprecation import DeprecationForHistoricalMigrationMixin
from django.utils.duration import duration_microseconds, duration_string
from django.utils.functional import Promise, cached_property
from django.utils.ipv6 import clean_ipv6_address
@ -111,7 +112,7 @@ def return_None():
@total_ordering
class Field(RegisterLookupMixin):
class Field(DeprecationForHistoricalMigrationMixin, RegisterLookupMixin):
"""Base class for all field types"""
# Designates whether empty strings fundamentally are allowed at the
@ -137,8 +138,7 @@ class Field(RegisterLookupMixin):
"%(date_field_label)s %(lookup_type)s."
),
}
system_check_deprecated_details = None
system_check_removed_details = None
check_type = "fields"
# Attributes that don't affect a column definition.
# These attributes are ignored when altering the field.
@ -263,7 +263,7 @@ class Field(RegisterLookupMixin):
*self._check_null_allowed_for_primary_keys(),
*self._check_backend_specific_checks(**kwargs),
*self._check_validators(),
*self._check_deprecation_details(),
*self.check_deprecation_details(),
]
def _check_field_name(self):
@ -441,33 +441,6 @@ class Field(RegisterLookupMixin):
)
return errors
def _check_deprecation_details(self):
if self.system_check_removed_details is not None:
return [
checks.Error(
self.system_check_removed_details.get(
"msg",
"%s has been removed except for support in historical "
"migrations." % self.__class__.__name__,
),
hint=self.system_check_removed_details.get("hint"),
obj=self,
id=self.system_check_removed_details.get("id", "fields.EXXX"),
)
]
elif self.system_check_deprecated_details is not None:
return [
checks.Warning(
self.system_check_deprecated_details.get(
"msg", "%s has been deprecated." % self.__class__.__name__
),
hint=self.system_check_deprecated_details.get("hint"),
obj=self,
id=self.system_check_deprecated_details.get("id", "fields.WXXX"),
)
]
return []
def get_col(self, alias, output_field=None):
if alias == self.model._meta.db_table and (
output_field is None or output_field == self

View File

@ -157,3 +157,42 @@ class MiddlewareMixin:
thread_sensitive=True,
)(request, response)
return response
class DeprecationForHistoricalMigrationMixin:
system_check_deprecated_details = None
system_check_removed_details = None
check_type = ""
def check_deprecation_details(self):
from django.core import checks
if self.system_check_removed_details is not None:
return [
checks.Error(
self.system_check_removed_details.get(
"msg",
"%s has been removed except for support in historical "
"migrations." % self.__class__.__name__,
),
hint=self.system_check_removed_details.get("hint"),
obj=self,
id=self.system_check_removed_details.get(
"id", f"{self.check_type}.EXXX"
),
)
]
elif self.system_check_deprecated_details is not None:
return [
checks.Warning(
self.system_check_deprecated_details.get(
"msg", "%s has been deprecated." % self.__class__.__name__
),
hint=self.system_check_deprecated_details.get("hint"),
obj=self,
id=self.system_check_deprecated_details.get(
"id", f"{self.check_type}.WXXX"
),
)
]
return []