diff options
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/messages/storage/base.py | 5 | ||||
| -rw-r--r-- | django/contrib/postgres/constraints.py | 15 | ||||
| -rw-r--r-- | django/core/validators.py | 3 | ||||
| -rw-r--r-- | django/db/models/base.py | 2 | ||||
| -rw-r--r-- | django/db/models/constraints.py | 21 | ||||
| -rw-r--r-- | django/db/models/expressions.py | 4 | ||||
| -rw-r--r-- | django/db/models/indexes.py | 4 | ||||
| -rw-r--r-- | django/db/models/query.py | 4 | ||||
| -rw-r--r-- | django/db/models/query_utils.py | 3 | ||||
| -rw-r--r-- | django/template/context.py | 10 |
10 files changed, 39 insertions, 32 deletions
diff --git a/django/contrib/messages/storage/base.py b/django/contrib/messages/storage/base.py index fd5d0c24aa..b2eeac77f4 100644 --- a/django/contrib/messages/storage/base.py +++ b/django/contrib/messages/storage/base.py @@ -25,8 +25,9 @@ class Message: self.extra_tags = str(self.extra_tags) if self.extra_tags is not None else None def __eq__(self, other): - return isinstance(other, Message) and self.level == other.level and \ - self.message == other.message + if not isinstance(other, Message): + return NotImplemented + return self.level == other.level and self.message == other.message def __str__(self): return str(self.message) diff --git a/django/contrib/postgres/constraints.py b/django/contrib/postgres/constraints.py index 2fcb076ecf..67e415ddcf 100644 --- a/django/contrib/postgres/constraints.py +++ b/django/contrib/postgres/constraints.py @@ -89,13 +89,14 @@ class ExclusionConstraint(BaseConstraint): return path, args, kwargs def __eq__(self, other): - return ( - isinstance(other, self.__class__) and - self.name == other.name and - self.index_type == other.index_type and - self.expressions == other.expressions and - self.condition == other.condition - ) + if isinstance(other, self.__class__): + return ( + self.name == other.name and + self.index_type == other.index_type and + self.expressions == other.expressions and + self.condition == other.condition + ) + return super().__eq__(other) def __repr__(self): return '<%s: index_type=%s, expressions=%s%s>' % ( diff --git a/django/core/validators.py b/django/core/validators.py index 2e00ca3ff3..38345a844f 100644 --- a/django/core/validators.py +++ b/django/core/validators.py @@ -324,8 +324,9 @@ class BaseValidator: raise ValidationError(self.message, code=self.code, params=params) def __eq__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented return ( - isinstance(other, self.__class__) and self.limit_value == other.limit_value and self.message == other.message and self.code == other.code diff --git a/django/db/models/base.py b/django/db/models/base.py index 0b8425aa85..0a5e5ff673 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -522,7 +522,7 @@ class Model(metaclass=ModelBase): def __eq__(self, other): if not isinstance(other, Model): - return False + return NotImplemented if self._meta.concrete_model != other._meta.concrete_model: return False my_pk = self.pk diff --git a/django/db/models/constraints.py b/django/db/models/constraints.py index e7f81d3ee9..fe0d42a168 100644 --- a/django/db/models/constraints.py +++ b/django/db/models/constraints.py @@ -54,11 +54,9 @@ class CheckConstraint(BaseConstraint): return "<%s: check='%s' name=%r>" % (self.__class__.__name__, self.check, self.name) def __eq__(self, other): - return ( - isinstance(other, CheckConstraint) and - self.name == other.name and - self.check == other.check - ) + if isinstance(other, CheckConstraint): + return self.name == other.name and self.check == other.check + return super().__eq__(other) def deconstruct(self): path, args, kwargs = super().deconstruct() @@ -106,12 +104,13 @@ class UniqueConstraint(BaseConstraint): ) def __eq__(self, other): - return ( - isinstance(other, UniqueConstraint) and - self.name == other.name and - self.fields == other.fields and - self.condition == other.condition - ) + if isinstance(other, UniqueConstraint): + return ( + self.name == other.name and + self.fields == other.fields and + self.condition == other.condition + ) + return super().__eq__(other) def deconstruct(self): path, args, kwargs = super().deconstruct() diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py index 2b59dd301a..5df765b626 100644 --- a/django/db/models/expressions.py +++ b/django/db/models/expressions.py @@ -401,7 +401,9 @@ class BaseExpression: return tuple(identity) def __eq__(self, other): - return isinstance(other, BaseExpression) and other.identity == self.identity + if not isinstance(other, BaseExpression): + return NotImplemented + return other.identity == self.identity def __hash__(self): return hash(self.identity) diff --git a/django/db/models/indexes.py b/django/db/models/indexes.py index b156366764..49f4989462 100644 --- a/django/db/models/indexes.py +++ b/django/db/models/indexes.py @@ -112,4 +112,6 @@ class Index: ) def __eq__(self, other): - return (self.__class__ == other.__class__) and (self.deconstruct() == other.deconstruct()) + if self.__class__ == other.__class__: + return self.deconstruct() == other.deconstruct() + return NotImplemented diff --git a/django/db/models/query.py b/django/db/models/query.py index 4417c17592..794e0faae7 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -1543,7 +1543,9 @@ class Prefetch: return None def __eq__(self, other): - return isinstance(other, Prefetch) and self.prefetch_to == other.prefetch_to + if not isinstance(other, Prefetch): + return NotImplemented + return self.prefetch_to == other.prefetch_to def __hash__(self): return hash((self.__class__, self.prefetch_to)) diff --git a/django/db/models/query_utils.py b/django/db/models/query_utils.py index 7a667814f4..189fb4fa44 100644 --- a/django/db/models/query_utils.py +++ b/django/db/models/query_utils.py @@ -309,8 +309,9 @@ class FilteredRelation: self.path = [] def __eq__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented return ( - isinstance(other, self.__class__) and self.relation_name == other.relation_name and self.alias == other.alias and self.condition == other.condition diff --git a/django/template/context.py b/django/template/context.py index 8f349a3a96..f0a0cf2a00 100644 --- a/django/template/context.py +++ b/django/template/context.py @@ -124,12 +124,10 @@ class BaseContext: """ Compare two contexts by comparing theirs 'dicts' attributes. """ - return ( - isinstance(other, BaseContext) and - # because dictionaries can be put in different order - # we have to flatten them like in templates - self.flatten() == other.flatten() - ) + if not isinstance(other, BaseContext): + return NotImplemented + # flatten dictionaries because they can be put in a different order. + return self.flatten() == other.flatten() class Context(BaseContext): |
