From 54f00b5774de0c684a0982e487fe2bba9639153d Mon Sep 17 00:00:00 2001 From: Andrew Brookins Date: Wed, 29 Sep 2021 20:42:02 -0700 Subject: [PATCH] Remove Django-isms for embedded exceptions classes --- redis_developer/orm/model.py | 39 ++---------------------------------- tests/test_hash_model.py | 4 ++-- 2 files changed, 4 insertions(+), 39 deletions(-) diff --git a/redis_developer/orm/model.py b/redis_developer/orm/model.py index 5c40949..b2361c1 100644 --- a/redis_developer/orm/model.py +++ b/redis_developer/orm/model.py @@ -29,7 +29,7 @@ import uuid import redis from pydantic import BaseModel, validator -from pydantic.fields import FieldInfo as PydanticFieldInfo, PrivateAttr, Field +from pydantic.fields import FieldInfo as PydanticFieldInfo from pydantic.fields import ModelField, Undefined, UndefinedType from pydantic.main import ModelMetaclass from pydantic.typing import NoArgAnyCallable @@ -42,25 +42,6 @@ model_registry = {} _T = TypeVar("_T") -def subclass_exception(name, bases, module, attached_to): - """ - Create exception subclass. Used by RedisModel below. - - The exception is created in a way that allows it to be pickled, assuming - that the returned exception class will be added as an attribute to the - 'attached_to' class. - """ - return type(name, bases, { - '__module__': module, - '__qualname__': '%s.%s' % (attached_to.__qualname__, name), - }) - - -def _has_contribute_to_class(value): - # Only call contribute_to_class() if it's bound. - return not inspect.isclass(value) and hasattr(value, 'contribute_to_class') - - class TokenEscaper: """ Escape punctuation within an input string. @@ -646,7 +627,6 @@ class ModelMeta(ModelMetaclass): meta = meta or getattr(new_class, 'Meta', None) base_meta = getattr(new_class, '_meta', None) - parents = [b for b in bases if isinstance(b, ModelMeta)] if meta and meta != DefaultMeta and meta != base_meta: new_class.Meta = meta @@ -662,21 +642,6 @@ class ModelMeta(ModelMetaclass): new_class._meta = deepcopy(DefaultMeta) new_class.Meta = new_class._meta - # Not an abstract model class - if abc.ABC not in bases: - key = f"{new_class.__module__}.{new_class.__name__}" - model_registry[key] = new_class - - new_class.add_to_class( - 'NotFoundError', - subclass_exception( - 'NotFoundError', - tuple( - x.NotFoundError for x in bases if hasattr(x, '_meta') and not issubclass(x, abc.ABC) - ) or (NotFoundError,), - attrs['__module__'], - attached_to=new_class)) - # Create proxies for each model field so that we can use the field # in queries, like Model.get(Model.field_name == 1) for field_name, field in new_class.__fields__.items(): @@ -857,7 +822,7 @@ class HashModel(RedisModel, abc.ABC): def get(cls, pk: Any) -> 'HashModel': document = cls.db().hgetall(cls.make_primary_key(pk)) if not document: - raise cls.NotFoundError + raise NotFoundError return cls.parse_obj(document) @classmethod diff --git a/tests/test_hash_model.py b/tests/test_hash_model.py index d26ebfe..7f81aa6 100644 --- a/tests/test_hash_model.py +++ b/tests/test_hash_model.py @@ -12,7 +12,7 @@ from redis_developer.orm import ( HashModel, Field, ) -from redis_developer.orm.model import RedisModelError, QueryNotSupportedError +from redis_developer.orm.model import RedisModelError, QueryNotSupportedError, NotFoundError r = redis.Redis() today = datetime.date.today() @@ -311,7 +311,7 @@ def test_sorting(members): def test_not_found(): - with pytest.raises(Member.NotFoundError): + with pytest.raises(NotFoundError): # This ID does not exist. Member.get(1000)