WIP on README

This commit is contained in:
Andrew Brookins 2021-10-22 08:31:08 -07:00
parent 09c91fb756
commit 7c0bea751b
7 changed files with 319 additions and 49 deletions

View file

@ -31,7 +31,7 @@ import redis
from pydantic import BaseModel, validator
from pydantic.fields import FieldInfo as PydanticFieldInfo
from pydantic.fields import ModelField, Undefined, UndefinedType
from pydantic.main import ModelMetaclass
from pydantic.main import ModelMetaclass, validate_model
from pydantic.typing import NoArgAnyCallable
from pydantic.utils import Representation
from redis.client import Pipeline
@ -1162,15 +1162,16 @@ class RedisModel(BaseModel, abc.ABC, metaclass=ModelMeta):
# TODO: Add transaction support
return [model.save() for model in models]
@classmethod
def values(cls):
"""Return raw values from Redis instead of model instances."""
raise NotImplementedError
@classmethod
def redisearch_schema(cls):
raise NotImplementedError
def check(self):
"""Run all validations."""
*_, validation_error = validate_model(self.__class__, self.__dict__)
if validation_error:
raise validation_error
class HashModel(RedisModel, abc.ABC):
def __init_subclass__(cls, **kwargs):
@ -1190,6 +1191,7 @@ class HashModel(RedisModel, abc.ABC):
)
def save(self, pipeline: Optional[Pipeline] = None) -> "HashModel":
self.check()
if pipeline is None:
db = self.db()
else:
@ -1226,6 +1228,12 @@ class HashModel(RedisModel, abc.ABC):
schema_parts = [schema_prefix] + cls.schema_for_fields()
return " ".join(schema_parts)
def update(self, **field_values):
validate_model_fields(self.__class__, field_values)
for field, value in field_values.items():
setattr(self, field, value)
self.save()
@classmethod
def schema_for_fields(cls):
schema_parts = []
@ -1312,6 +1320,7 @@ class JsonModel(RedisModel, abc.ABC):
cls.redisearch_schema()
def save(self, pipeline: Optional[Pipeline] = None) -> "JsonModel":
self.check()
if pipeline is None:
db = self.db()
else:
@ -1320,6 +1329,7 @@ class JsonModel(RedisModel, abc.ABC):
return self
def update(self, **field_values):
# TODO: Better support for embedded field models.
validate_model_fields(self.__class__, field_values)
for field, value in field_values.items():
setattr(self, field, value)