diff --git a/aredis_om/model/migrations/migrator.py b/aredis_om/model/migrations/migrator.py index f9cccc1..27cac65 100644 --- a/aredis_om/model/migrations/migrator.py +++ b/aredis_om/model/migrations/migrator.py @@ -47,7 +47,7 @@ async def create_index(conn: redis.Redis, index_name, schema, current_hash): f"You attempted to create an index in database {db_number}" ) try: - await conn.execute_command(f"ft.info {index_name}") + await conn.ft(index_name).info() except redis.ResponseError: await conn.execute_command(f"ft.create {index_name} {schema}") # TODO: remove "type: ignore" when type stubs will be fixed @@ -85,7 +85,7 @@ class IndexMigration: async def drop(self): try: - await self.conn.execute_command(f"FT.DROPINDEX {self.index_name}") + await self.conn.ft(self.index_name).dropindex() except redis.ResponseError: log.info("Index does not exist: %s", self.index_name) @@ -115,7 +115,7 @@ class Migrator: current_hash = hashlib.sha1(schema.encode("utf-8")).hexdigest() # nosec try: - await conn.execute_command("ft.info", cls.Meta.index_name) + await conn.ft(cls.Meta.index_name).info() except redis.ResponseError: self.migrations.append( IndexMigration( diff --git a/aredis_om/model/model.py b/aredis_om/model/model.py index 4685710..5dd3b91 100644 --- a/aredis_om/model/model.py +++ b/aredis_om/model/model.py @@ -31,6 +31,7 @@ from pydantic.fields import ModelField, Undefined, UndefinedType from pydantic.main import ModelMetaclass, validate_model from pydantic.typing import NoArgAnyCallable from pydantic.utils import Representation +from redis.commands.json.path import Path from typing_extensions import Protocol, get_args, get_origin from ulid import ULID @@ -1490,7 +1491,7 @@ class JsonModel(RedisModel, abc.ABC): db = self._get_db(pipeline) # TODO: Wrap response errors in a custom exception? - await db.execute_command("JSON.SET", self.key(), ".", self.json()) + await db.json().set(self.key(), Path.root_path(), json.loads(self.json())) return self @classmethod @@ -1535,8 +1536,8 @@ class JsonModel(RedisModel, abc.ABC): @classmethod async def get(cls, pk: Any) -> "JsonModel": - document = await cls.db().execute_command("JSON.GET", cls.make_primary_key(pk)) - if not document: + document = json.dumps(await cls.db().json().get(cls.make_key(pk))) + if document == "null": raise NotFoundError return cls.parse_raw(document) diff --git a/tests/test_json_model.py b/tests/test_json_model.py index 4d79941..7e12e32 100644 --- a/tests/test_json_model.py +++ b/tests/test_json_model.py @@ -293,7 +293,7 @@ async def test_saves_many_explicit_transaction(address, m): async with m.Member.db().pipeline(transaction=True) as pipeline: await m.Member.add(members, pipeline=pipeline) assert result == [member1, member2] - assert await pipeline.execute() == ["OK", "OK"] + assert await pipeline.execute() == [True, True] assert await m.Member.get(pk=member1.pk) == member1 assert await m.Member.get(pk=member2.pk) == member2