Refs #30988 -- Removed InvalidQuery exception per deprecation timeline.
This commit is contained in:
parent
396da8b94c
commit
68e3ca13d7
|
@ -8,13 +8,11 @@ circular import difficulties.
|
|||
import copy
|
||||
import functools
|
||||
import inspect
|
||||
import warnings
|
||||
from collections import namedtuple
|
||||
|
||||
from django.core.exceptions import FieldDoesNotExist, FieldError
|
||||
from django.core.exceptions import FieldError
|
||||
from django.db.models.constants import LOOKUP_SEP
|
||||
from django.utils import tree
|
||||
from django.utils.deprecation import RemovedInDjango40Warning
|
||||
|
||||
# PathInfo is used when converting lookups (fk__somecol). The contents
|
||||
# describe the relation in Model terms (model Options and Fields for both
|
||||
|
@ -22,32 +20,6 @@ from django.utils.deprecation import RemovedInDjango40Warning
|
|||
PathInfo = namedtuple('PathInfo', 'from_opts to_opts target_fields join_field m2m direct filtered_relation')
|
||||
|
||||
|
||||
class InvalidQueryType(type):
|
||||
@property
|
||||
def _subclasses(self):
|
||||
return (FieldDoesNotExist, FieldError)
|
||||
|
||||
def __warn(self):
|
||||
warnings.warn(
|
||||
'The InvalidQuery exception class is deprecated. Use '
|
||||
'FieldDoesNotExist or FieldError instead.',
|
||||
category=RemovedInDjango40Warning,
|
||||
stacklevel=4,
|
||||
)
|
||||
|
||||
def __instancecheck__(self, instance):
|
||||
self.__warn()
|
||||
return isinstance(instance, self._subclasses) or super().__instancecheck__(instance)
|
||||
|
||||
def __subclasscheck__(self, subclass):
|
||||
self.__warn()
|
||||
return issubclass(subclass, self._subclasses) or super().__subclasscheck__(subclass)
|
||||
|
||||
|
||||
class InvalidQuery(Exception, metaclass=InvalidQueryType):
|
||||
pass
|
||||
|
||||
|
||||
def subclasses(cls):
|
||||
yield cls
|
||||
for subclass in cls.__subclasses__():
|
||||
|
|
|
@ -271,3 +271,5 @@ to remove usage of these features.
|
|||
|
||||
* The :lookup:`isnull` lookup no longer allows using non-boolean values as the
|
||||
right-hand side.
|
||||
|
||||
* The ``django.db.models.query_utils.InvalidQuery`` exception class is removed.
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
from contextlib import contextmanager
|
||||
|
||||
from django.core.exceptions import FieldDoesNotExist, FieldError
|
||||
from django.db.models.query_utils import InvalidQuery
|
||||
from django.test import SimpleTestCase
|
||||
from django.utils.deprecation import RemovedInDjango40Warning
|
||||
|
||||
|
||||
class InvalidQueryTests(SimpleTestCase):
|
||||
@contextmanager
|
||||
def assert_warns(self):
|
||||
msg = (
|
||||
'The InvalidQuery exception class is deprecated. Use '
|
||||
'FieldDoesNotExist or FieldError instead.'
|
||||
)
|
||||
with self.assertWarnsMessage(RemovedInDjango40Warning, msg):
|
||||
yield
|
||||
|
||||
def test_type(self):
|
||||
self.assertIsInstance(InvalidQuery(), InvalidQuery)
|
||||
|
||||
def test_isinstance(self):
|
||||
for exception in (FieldError, FieldDoesNotExist):
|
||||
with self.assert_warns(), self.subTest(exception.__name__):
|
||||
self.assertIsInstance(exception(), InvalidQuery)
|
||||
|
||||
def test_issubclass(self):
|
||||
for exception in (FieldError, FieldDoesNotExist, InvalidQuery):
|
||||
with self.assert_warns(), self.subTest(exception.__name__):
|
||||
self.assertIs(issubclass(exception, InvalidQuery), True)
|
Loading…
Reference in New Issue