erdantic icon indicating copy to clipboard operation
erdantic copied to clipboard

Support Python 3.12's type statements for declaring type aliases

Open jayqi opened this issue 1 year ago • 0 comments

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={})

jayqi avatar Apr 11 '24 17:04 jayqi