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 copy
import functools import functools
import inspect import inspect
import warnings
from collections import namedtuple 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.db.models.constants import LOOKUP_SEP
from django.utils import tree from django.utils import tree
from django.utils.deprecation import RemovedInDjango40Warning
# PathInfo is used when converting lookups (fk__somecol). The contents # PathInfo is used when converting lookups (fk__somecol). The contents
# describe the relation in Model terms (model Options and Fields for both # 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') 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): def subclasses(cls):
yield cls yield cls
for subclass in cls.__subclasses__(): 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 * The :lookup:`isnull` lookup no longer allows using non-boolean values as the
right-hand side. 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)