From 82406f0dbf3c271f327b49917321ba0dc1624143 Mon Sep 17 00:00:00 2001 From: Steve Lorello <42971704+slorello89@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:59:12 -0500 Subject: [PATCH] enhancing primary key check to be compatible with sqlmodel (#672) --- aredis_om/model/model.py | 6 +++--- tests/test_json_model.py | 13 +++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/aredis_om/model/model.py b/aredis_om/model/model.py index c8dbe26d..8018ec8a 100644 --- a/aredis_om/model/model.py +++ b/aredis_om/model/model.py @@ -1542,7 +1542,7 @@ def validate_primary_key(cls): else: field_info = field.field_info - if getattr(field_info, "primary_key", None): + if getattr(field_info, "primary_key", None) is True: primary_keys += 1 if primary_keys == 0: raise RedisModelError("You must define a primary key for the model") @@ -1823,7 +1823,7 @@ def schema_for_fields(cls): else: field_info = field.field_info - if getattr(field_info, "primary_key", None): + if getattr(field_info, "primary_key", None) is True: if issubclass(_type, str): redisearch_field = ( f"{name} TAG SEPARATOR {SINGLE_VALUE_TAG_FIELD_SEPARATOR}" @@ -2018,7 +2018,7 @@ def schema_for_fields(cls): field_info = field.field_info else: field_info = field - if getattr(field_info, "primary_key", None): + if getattr(field_info, "primary_key", None) is True: if issubclass(_type, str): redisearch_field = f"$.{name} AS {name} TAG SEPARATOR {SINGLE_VALUE_TAG_FIELD_SEPARATOR}" else: diff --git a/tests/test_json_model.py b/tests/test_json_model.py index 92440dd9..5677d9e8 100644 --- a/tests/test_json_model.py +++ b/tests/test_json_model.py @@ -1160,6 +1160,18 @@ class TestLiterals(JsonModel): assert rematerialized.pk == item.pk + +@py_test_mark_asyncio +async def test_two_false_pks(): + from pydantic_core import PydanticUndefined as Undefined + + class SomeModel(JsonModel): + field1: str = Field(index=True, primary_key=Undefined) + field2: str = Field(index=True, primary_key=Undefined) + + SomeModel(field1="foo", field2="bar") + +@py_test_mark_asyncio async def test_child_class_expression_proxy(): # https://github.com/redis/redis-om-python/issues/669 seeing weird issue with child classes initalizing all their undefined members as ExpressionProxies class Model(JsonModel): @@ -1183,6 +1195,7 @@ class Child(Model): assert rematerialized.age != 19 assert rematerialized.bio is None +@py_test_mark_asyncio async def test_merged_model_error(): class Player(EmbeddedJsonModel): username: str = Field(index=True)