Refs #30988 -- Removed InvalidQuery exception per deprecation timeline.

This commit is contained in:
Mariusz Felisiak 2021-01-07 20:56:49 +01:00
parent 396da8b94c
commit 68e3ca13d7
3 changed files with 3 additions and 59 deletions

View File

@ -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__():

View File

@ -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.

View File

@ -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)