|
19 | 19 | DataModelFieldBase, |
20 | 20 | ) |
21 | 21 | from datamodel_code_generator.model._types import WrappedDefault |
22 | | -from datamodel_code_generator.model.base import UNDEFINED |
| 22 | +from datamodel_code_generator.model.base import UNDEFINED, repr_set_sorted |
23 | 23 | from datamodel_code_generator.model.pydantic.imports import ( |
24 | 24 | IMPORT_ANYURL, |
25 | 25 | IMPORT_EXTRA, |
@@ -250,18 +250,34 @@ def __str__(self) -> str: # noqa: PLR0912 |
250 | 250 | elif self.required: |
251 | 251 | field_arguments = ["...", *field_arguments] |
252 | 252 | elif not default_factory: |
253 | | - from datamodel_code_generator.model.base import repr_set_sorted # noqa: PLC0415 |
254 | | - |
255 | 253 | default_repr = repr_set_sorted(self.default) if isinstance(self.default, set) else repr(self.default) |
256 | 254 | field_arguments = [default_repr, *field_arguments] |
257 | 255 |
|
| 256 | + if self.is_class_var: |
| 257 | + return repr_set_sorted(self.default) if isinstance(self.default, set) else repr(self.default) |
| 258 | + |
258 | 259 | return f"Field({', '.join(field_arguments)})" |
259 | 260 |
|
| 261 | + @property |
| 262 | + def is_class_var(self) -> bool: |
| 263 | + return self.extras.get("x-is-classvar") is True |
| 264 | + |
| 265 | + @property |
| 266 | + def type_hint(self) -> str: |
| 267 | + """Get the type hint including ClassVar if applicable.""" |
| 268 | + # if self.name == "name": |
| 269 | + # breakpoint() |
| 270 | + if self.is_class_var: |
| 271 | + return f"ClassVar[{super().type_hint}]" |
| 272 | + return super().type_hint |
| 273 | + |
260 | 274 | @property |
261 | 275 | def annotated(self) -> str | None: |
262 | 276 | """Get the Annotated type hint if use_annotated is enabled.""" |
263 | 277 | if not self.use_annotated or not str(self): |
264 | 278 | return None |
| 279 | + if self.is_class_var: |
| 280 | + return self.type_hint |
265 | 281 | return f"Annotated[{self.type_hint}, {self!s}]" |
266 | 282 |
|
267 | 283 | @property |
|
0 commit comments