diff --git a/graphene_sqlalchemy/converter.py b/graphene_sqlalchemy/converter.py index d1873c2..d3ae812 100644 --- a/graphene_sqlalchemy/converter.py +++ b/graphene_sqlalchemy/converter.py @@ -1,6 +1,7 @@ import datetime import sys import typing +import uuid import warnings from decimal import Decimal from functools import singledispatch @@ -398,6 +399,11 @@ def convert_sqlalchemy_hybrid_property_type_time(arg): return graphene.Time +@convert_sqlalchemy_hybrid_property_type.register(value_equals(uuid.UUID)) +def convert_sqlalchemy_hybrid_property_type_uuid(arg): + return graphene.UUID + + def is_union(arg) -> bool: if sys.version_info >= (3, 10): from types import UnionType diff --git a/graphene_sqlalchemy/tests/models.py b/graphene_sqlalchemy/tests/models.py index fd5d3b2..b433982 100644 --- a/graphene_sqlalchemy/tests/models.py +++ b/graphene_sqlalchemy/tests/models.py @@ -2,6 +2,7 @@ import datetime import enum +import uuid from decimal import Decimal from typing import List, Optional, Tuple @@ -267,6 +268,21 @@ def hybrid_prop_self_referential_list(self) -> List["ShoppingCart"]: def hybrid_prop_optional_self_referential(self) -> Optional["ShoppingCart"]: return None + # UUIDS + @hybrid_property + def hybrid_prop_uuid(self) -> uuid.UUID: + return uuid.uuid4() + + @hybrid_property + def hybrid_prop_uuid_list(self) -> List[uuid.UUID]: + return [ + uuid.uuid4(), + ] + + @hybrid_property + def hybrid_prop_optional_uuid(self) -> Optional[uuid.UUID]: + return None + class KeyedModel(Base): __tablename__ = "test330" diff --git a/graphene_sqlalchemy/tests/test_converter.py b/graphene_sqlalchemy/tests/test_converter.py index 812b4ce..b9a1c15 100644 --- a/graphene_sqlalchemy/tests/test_converter.py +++ b/graphene_sqlalchemy/tests/test_converter.py @@ -673,6 +673,10 @@ class Meta: "hybrid_prop_self_referential_list": graphene.List(ShoppingCartType), # Optionals "hybrid_prop_optional_self_referential": ShoppingCartType, + # UUIDs + "hybrid_prop_uuid": graphene.UUID, + "hybrid_prop_optional_uuid": graphene.UUID, + "hybrid_prop_uuid_list": graphene.List(graphene.UUID), } assert sorted(list(ShoppingCartType._meta.fields.keys())) == sorted(