Skip to content

Commit 6475d4d

Browse files
committed
Type reference sources
1 parent 7cf7486 commit 6475d4d

1 file changed

Lines changed: 28 additions & 2 deletions

File tree

src/datamodel_code_generator/reference.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
import inflect
4545

46-
from datamodel_code_generator.model.base import DataModel
46+
from datamodel_code_generator.model.base import DataModel, DataModelFieldBase
4747
from datamodel_code_generator.types import DataType
4848

4949

@@ -77,6 +77,32 @@ def reference(self) -> Reference | None:
7777
...
7878

7979

80+
if TYPE_CHECKING:
81+
82+
class _ReferenceSource(Protocol):
83+
"""Protocol for objects that can be assigned to Reference.source."""
84+
85+
fields: list[DataModelFieldBase]
86+
87+
@property
88+
def is_alias(self) -> bool:
89+
"""Return whether this source renders as an alias."""
90+
...
91+
92+
@property
93+
def module_name(self) -> str | None:
94+
"""Return this source module name."""
95+
...
96+
97+
@property
98+
def nullable(self) -> bool:
99+
"""Return whether this source is nullable."""
100+
...
101+
102+
else:
103+
_ReferenceSource = ReferenceChild
104+
105+
80106
class _BaseModel(BaseModel):
81107
"""Base model with field exclusion and pass-through support."""
82108

@@ -124,7 +150,7 @@ class Reference(_BaseModel):
124150
name: str
125151
duplicate_name: Optional[str] = None # noqa: UP045
126152
loaded: bool = True
127-
source: Optional[ReferenceChild] = None # noqa: UP045
153+
source: Optional[_ReferenceSource] = None # noqa: UP045
128154
children: list[ReferenceChild] = Field(default_factory=list)
129155
_exclude_fields: ClassVar[set[str]] = {"children"}
130156

0 commit comments

Comments
 (0)