erdantic
erdantic copied to clipboard
Support Python 3.12's type statements for declaring type aliases
Python 3.12 introduced a new syntax "type statements" for declaring type aliases.
erdantic currently handles the old simple assignment syntax for type aliases, but not type statements.
Works
from typing import List
import erdantic as erd
from pydantic import BaseModel
import rich
class MyInnerModel(BaseModel):
field: str
MyAlias = List[MyInnerModel]
print(type(MyAlias))
#> <class 'typing._GenericAlias'>
class MyOuterModel(BaseModel):
aliased_field: MyAlias
diagram = erd.create(MyOuterModel)
rich.print(diagram)
#> EntityRelationshipDiagram(
#> models={'__main__.MyInnerModel': ModelInfo(...), '__main__.MyOuterModel': ModelInfo(...)},
#> edges={'__main__.MyOuterModel-aliased_field-__main__.MyInnerModel': Edge(...)}
#> )
Does not work
from typing import List
import erdantic as erd
from pydantic import BaseModel
import rich
class MyInnerModel(BaseModel):
field: str
type MyAlias = List[MyInnerModel]
print(type(MyAlias))
#> <class 'typing.TypeAliasType'>
class MyOuterModel(BaseModel):
aliased_field: MyAlias
diagram = erd.create(MyOuterModel)
rich.print(diagram)
#> EntityRelationshipDiagram(models={'__main__.MyOuterModel': ModelInfo(...)}, edges={})