11from enum import Enum
2- from typing import Any , Dict , List , Type , Tuple , Union
2+ from typing import Any , Dict , List , Type , Tuple , Union , Optional
33from typing_extensions import ClassVar
44
55from pydantic import BaseModel
66
7- from .models import Model as ModelInfo , AnyData , PrimaryKey
7+ from .utils import to_constant_case
8+ from .models import Model as ModelInfo , AnyData , PrimaryKey , DMMFEnumType
89from .._compat import (
910 PYDANTIC_V2 ,
1011 ConfigDict ,
@@ -18,6 +19,7 @@ class Kind(str, Enum):
1819 alias = 'alias'
1920 union = 'union'
2021 typeddict = 'typeddict'
22+ enum = 'enum'
2123
2224
2325class PrismaType (BaseModel ):
@@ -45,6 +47,11 @@ class PrismaUnion(PrismaType):
4547 subtypes : List [PrismaType ]
4648
4749
50+ class PrismaEnum (PrismaType ):
51+ kind : Kind = Kind .enum
52+ members : List [Tuple [str , str ]]
53+
54+
4855class PrismaAlias (PrismaType ):
4956 kind : Kind = Kind .alias
5057 to : str
@@ -143,6 +150,29 @@ def order_by(self) -> PrismaType:
143150 return PrismaType .from_subtypes (subtypes , name = f'{ model } OrderByInput' )
144151
145152
153+ class ClientTypes (BaseModel ):
154+ transaction_isolation_level : Optional [PrismaEnum ]
155+
156+ @classmethod
157+ def from_data (cls , data : AnyData ) -> 'ClientTypes' :
158+ enum_types = data .dmmf .prisma_schema .enum_types .prisma
159+
160+ return cls (
161+ transaction_isolation_level = construct_enum_type (enum_types , name = 'TransactionIsolationLevel' ),
162+ )
163+
164+
165+ def construct_enum_type (dmmf_enum_types : List [DMMFEnumType ], * , name : str ) -> Optional [PrismaEnum ]:
166+ enum_type = next ((t for t in dmmf_enum_types if t .name == name ), None )
167+ if not enum_type :
168+ return None
169+
170+ return PrismaEnum (
171+ name = name ,
172+ members = [(to_constant_case (str (value )), str (value )) for value in enum_type .values ],
173+ )
174+
175+
146176model_rebuild (Schema )
147177model_rebuild (PrismaType )
148178model_rebuild (PrismaDict )
0 commit comments