mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Refs #30988 -- Removed InvalidQuery exception per deprecation timeline.
This commit is contained in:
		| @@ -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) | ||||
		Reference in New Issue
	
	Block a user