datamodel-code-generator 0.26.0__py3-none-any.whl → 0.26.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of datamodel-code-generator might be problematic. Click here for more details.

Files changed (31) hide show
  1. datamodel_code_generator/__init__.py +9 -2
  2. datamodel_code_generator/__main__.py +31 -1
  3. datamodel_code_generator/arguments.py +14 -1
  4. datamodel_code_generator/format.py +10 -0
  5. datamodel_code_generator/imports.py +2 -0
  6. datamodel_code_generator/model/__init__.py +5 -3
  7. datamodel_code_generator/model/base.py +3 -0
  8. datamodel_code_generator/model/dataclass.py +65 -4
  9. datamodel_code_generator/model/enum.py +2 -0
  10. datamodel_code_generator/model/msgspec.py +2 -0
  11. datamodel_code_generator/model/pydantic/base_model.py +4 -0
  12. datamodel_code_generator/model/pydantic/types.py +17 -2
  13. datamodel_code_generator/model/pydantic_v2/base_model.py +2 -0
  14. datamodel_code_generator/model/pydantic_v2/imports.py +1 -0
  15. datamodel_code_generator/model/pydantic_v2/types.py +16 -5
  16. datamodel_code_generator/model/scalar.py +2 -0
  17. datamodel_code_generator/model/template/dataclass.jinja2 +1 -1
  18. datamodel_code_generator/model/typed_dict.py +2 -0
  19. datamodel_code_generator/model/types.py +11 -8
  20. datamodel_code_generator/model/union.py +2 -0
  21. datamodel_code_generator/parser/base.py +19 -5
  22. datamodel_code_generator/parser/graphql.py +6 -0
  23. datamodel_code_generator/parser/jsonschema.py +9 -0
  24. datamodel_code_generator/parser/openapi.py +6 -0
  25. datamodel_code_generator/types.py +4 -1
  26. datamodel_code_generator/version.py +1 -1
  27. {datamodel_code_generator-0.26.0.dist-info → datamodel_code_generator-0.26.2.dist-info}/METADATA +8 -1
  28. {datamodel_code_generator-0.26.0.dist-info → datamodel_code_generator-0.26.2.dist-info}/RECORD +31 -31
  29. {datamodel_code_generator-0.26.0.dist-info → datamodel_code_generator-0.26.2.dist-info}/WHEEL +1 -1
  30. {datamodel_code_generator-0.26.0.dist-info → datamodel_code_generator-0.26.2.dist-info}/LICENSE +0 -0
  31. {datamodel_code_generator-0.26.0.dist-info → datamodel_code_generator-0.26.2.dist-info}/entry_points.txt +0 -0
@@ -30,7 +30,7 @@ from urllib.parse import ParseResult
30
30
  import yaml
31
31
 
32
32
  import datamodel_code_generator.pydantic_patch # noqa: F401
33
- from datamodel_code_generator.format import PythonVersion
33
+ from datamodel_code_generator.format import DatetimeClassType, PythonVersion
34
34
  from datamodel_code_generator.model.pydantic_v2 import UnionMode
35
35
  from datamodel_code_generator.parser import DefaultPutDict, LiteralType
36
36
  from datamodel_code_generator.parser.base import Parser
@@ -301,6 +301,8 @@ def generate(
301
301
  treat_dots_as_module: bool = False,
302
302
  use_exact_imports: bool = False,
303
303
  union_mode: Optional[UnionMode] = None,
304
+ output_datetime_class: Optional[DatetimeClassType] = None,
305
+ keyword_only: bool = False,
304
306
  ) -> None:
305
307
  remote_text_cache: DefaultPutDict[str, str] = DefaultPutDict()
306
308
  if isinstance(input_, str):
@@ -395,9 +397,12 @@ def generate(
395
397
  raise Error('union_mode is only supported for pydantic_v2.BaseModel')
396
398
  else:
397
399
  default_field_extras = None
400
+
398
401
  from datamodel_code_generator.model import get_data_model_types
399
402
 
400
- data_model_types = get_data_model_types(output_model_type, target_python_version)
403
+ data_model_types = get_data_model_types(
404
+ output_model_type, target_python_version, output_datetime_class
405
+ )
401
406
  parser = parser_class(
402
407
  source=input_text or input_,
403
408
  data_model_type=data_model_types.data_model,
@@ -471,6 +476,8 @@ def generate(
471
476
  treat_dots_as_module=treat_dots_as_module,
472
477
  use_exact_imports=use_exact_imports,
473
478
  default_field_extras=default_field_extras,
479
+ target_datetime_class=output_datetime_class,
480
+ keyword_only=keyword_only,
474
481
  **kwargs,
475
482
  )
476
483
 
@@ -51,6 +51,7 @@ from datamodel_code_generator import (
51
51
  )
52
52
  from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, namespace
53
53
  from datamodel_code_generator.format import (
54
+ DatetimeClassType,
54
55
  PythonVersion,
55
56
  black_find_project_root,
56
57
  is_supported_in_black,
@@ -159,7 +160,7 @@ class Config(BaseModel):
159
160
  target_python_version: PythonVersion = values['target_python_version']
160
161
  if target_python_version == target_python_version.PY_36:
161
162
  raise Error(
162
- f'`--use-generic-container-types` can not be used with `--target-python_version` {target_python_version.PY_36.value}.\n'
163
+ f'`--use-generic-container-types` can not be used with `--target-python-version` {target_python_version.PY_36.value}.\n'
163
164
  ' The version will be not supported in a future version'
164
165
  )
165
166
  return values
@@ -183,6 +184,31 @@ class Config(BaseModel):
183
184
  ) # pragma: no cover
184
185
  return values
185
186
 
187
+ @model_validator(mode='after')
188
+ def validate_keyword_only(cls, values: Dict[str, Any]) -> Dict[str, Any]:
189
+ python_target: PythonVersion = values.get('target_python_version')
190
+ if values.get('keyword_only') and not python_target.has_kw_only_dataclass:
191
+ raise Error(
192
+ f'`--keyword-only` requires `--target-python-version` {PythonVersion.PY_310.value} or higher.'
193
+ )
194
+ return values
195
+
196
+ @model_validator(mode='after')
197
+ def validate_output_datetime_class(cls, values: Dict[str, Any]) -> Dict[str, Any]:
198
+ datetime_class_type: Optional[DatetimeClassType] = values.get(
199
+ 'output_datetime_class'
200
+ )
201
+ if (
202
+ datetime_class_type
203
+ and datetime_class_type is not DatetimeClassType.Datetime
204
+ and values.get('output_model_type') == DataModelType.DataclassesDataclass
205
+ ):
206
+ raise Error(
207
+ '`--output-datetime-class` only allows "datetime" for '
208
+ f'`--output-model-type` {DataModelType.DataclassesDataclass.value}'
209
+ )
210
+ return values
211
+
186
212
  # Pydantic 1.5.1 doesn't support each_item=True correctly
187
213
  @field_validator('http_headers', mode='before')
188
214
  def validate_http_headers(cls, value: Any) -> Optional[List[Tuple[str, str]]]:
@@ -313,6 +339,8 @@ class Config(BaseModel):
313
339
  treat_dot_as_module: bool = False
314
340
  use_exact_imports: bool = False
315
341
  union_mode: Optional[UnionMode] = None
342
+ output_datetime_class: Optional[DatetimeClassType] = None
343
+ keyword_only: bool = False
316
344
 
317
345
  def merge_args(self, args: Namespace) -> None:
318
346
  set_args = {
@@ -512,6 +540,8 @@ def main(args: Optional[Sequence[str]] = None) -> Exit:
512
540
  treat_dots_as_module=config.treat_dot_as_module,
513
541
  use_exact_imports=config.use_exact_imports,
514
542
  union_mode=config.union_mode,
543
+ output_datetime_class=config.output_datetime_class,
544
+ keyword_only=config.keyword_only,
515
545
  )
516
546
  return Exit.OK
517
547
  except InvalidClassNameError as e:
@@ -6,7 +6,7 @@ from operator import attrgetter
6
6
  from typing import TYPE_CHECKING
7
7
 
8
8
  from datamodel_code_generator import DataModelType, InputFileType, OpenAPIScope
9
- from datamodel_code_generator.format import PythonVersion
9
+ from datamodel_code_generator.format import DatetimeClassType, PythonVersion
10
10
  from datamodel_code_generator.model.pydantic_v2 import UnionMode
11
11
  from datamodel_code_generator.parser import LiteralType
12
12
  from datamodel_code_generator.types import StrictTypes
@@ -150,6 +150,12 @@ model_options.add_argument(
150
150
  action='store_true',
151
151
  default=None,
152
152
  )
153
+ model_options.add_argument(
154
+ '--keyword-only',
155
+ help='Defined models as keyword only (for example dataclass(kw_only=True)).',
156
+ action='store_true',
157
+ default=None,
158
+ )
153
159
  model_options.add_argument(
154
160
  '--reuse-model',
155
161
  help='Reuse models on the field when a module has the model with the same content',
@@ -192,6 +198,13 @@ model_options.add_argument(
192
198
  action='store_true',
193
199
  default=False,
194
200
  )
201
+ model_options.add_argument(
202
+ '--output-datetime-class',
203
+ help='Choose Datetime class between AwareDatetime, NaiveDatetime or datetime. '
204
+ 'Each output model has its default mapping (for example pydantic: datetime, dataclass: str, ...)',
205
+ choices=[i.value for i in DatetimeClassType],
206
+ default=None,
207
+ )
195
208
 
196
209
  # ======================================================================================
197
210
  # Typing options for generated models
@@ -17,6 +17,12 @@ except ImportError: # pragma: no cover
17
17
  black.mode = None
18
18
 
19
19
 
20
+ class DatetimeClassType(Enum):
21
+ Datetime = 'datetime'
22
+ Awaredatetime = 'AwareDatetime'
23
+ Naivedatetime = 'NaiveDatetime'
24
+
25
+
20
26
  class PythonVersion(Enum):
21
27
  PY_36 = '3.6'
22
28
  PY_37 = '3.7'
@@ -73,6 +79,10 @@ class PythonVersion(Enum):
73
79
  def has_typed_dict_non_required(self) -> bool:
74
80
  return self._is_py_311_or_later
75
81
 
82
+ @property
83
+ def has_kw_only_dataclass(self) -> bool:
84
+ return self._is_py_310_or_later
85
+
76
86
 
77
87
  if TYPE_CHECKING:
78
88
 
@@ -117,9 +117,11 @@ IMPORT_DICT = Import.from_full_path('typing.Dict')
117
117
  IMPORT_DECIMAL = Import.from_full_path('decimal.Decimal')
118
118
  IMPORT_DATE = Import.from_full_path('datetime.date')
119
119
  IMPORT_DATETIME = Import.from_full_path('datetime.datetime')
120
+ IMPORT_TIMEDELTA = Import.from_full_path('datetime.timedelta')
120
121
  IMPORT_PATH = Import.from_full_path('pathlib.Path')
121
122
  IMPORT_TIME = Import.from_full_path('datetime.time')
122
123
  IMPORT_UUID = Import.from_full_path('uuid.UUID')
123
124
  IMPORT_PENDULUM_DATE = Import.from_full_path('pendulum.Date')
124
125
  IMPORT_PENDULUM_DATETIME = Import.from_full_path('pendulum.DateTime')
126
+ IMPORT_PENDULUM_DURATION = Import.from_full_path('pendulum.Duration')
125
127
  IMPORT_PENDULUM_TIME = Import.from_full_path('pendulum.Time')
@@ -6,7 +6,7 @@ from ..types import DataTypeManager as DataTypeManagerABC
6
6
  from .base import ConstraintsBase, DataModel, DataModelFieldBase
7
7
 
8
8
  if TYPE_CHECKING:
9
- from .. import DataModelType, PythonVersion
9
+ from .. import DataModelType, DatetimeClassType, PythonVersion
10
10
 
11
11
 
12
12
  class DataModelSet(NamedTuple):
@@ -19,7 +19,9 @@ class DataModelSet(NamedTuple):
19
19
 
20
20
 
21
21
  def get_data_model_types(
22
- data_model_type: DataModelType, target_python_version: PythonVersion
22
+ data_model_type: DataModelType,
23
+ target_python_version: PythonVersion,
24
+ target_datetime_class: DatetimeClassType,
23
25
  ) -> DataModelSet:
24
26
  from .. import DataModelType
25
27
  from . import dataclass, msgspec, pydantic, pydantic_v2, rootmodel, typed_dict
@@ -46,7 +48,7 @@ def get_data_model_types(
46
48
  data_model=dataclass.DataClass,
47
49
  root_model=rootmodel.RootModel,
48
50
  field_model=dataclass.DataModelField,
49
- data_type_manager=DataTypeManager,
51
+ data_type_manager=dataclass.DataTypeManager,
50
52
  dump_resolve_reference_action=None,
51
53
  )
52
54
  elif data_model_type == DataModelType.TypingTypedDict:
@@ -293,7 +293,9 @@ class DataModel(TemplateBase, Nullable, ABC):
293
293
  description: Optional[str] = None,
294
294
  default: Any = UNDEFINED,
295
295
  nullable: bool = False,
296
+ keyword_only: bool = False,
296
297
  ) -> None:
298
+ self.keyword_only = keyword_only
297
299
  if not self.TEMPLATE_FILE_PATH:
298
300
  raise Exception('TEMPLATE_FILE_PATH is undefined')
299
301
 
@@ -452,6 +454,7 @@ class DataModel(TemplateBase, Nullable, ABC):
452
454
  base_class=self.base_class,
453
455
  methods=self.methods,
454
456
  description=self.description,
457
+ keyword_only=self.keyword_only,
455
458
  **self.extra_template_data,
456
459
  )
457
460
  return response
@@ -1,13 +1,32 @@
1
1
  from pathlib import Path
2
- from typing import Any, ClassVar, DefaultDict, Dict, List, Optional, Set, Tuple
3
-
4
- from datamodel_code_generator.imports import Import
2
+ from typing import (
3
+ Any,
4
+ ClassVar,
5
+ DefaultDict,
6
+ Dict,
7
+ List,
8
+ Optional,
9
+ Sequence,
10
+ Set,
11
+ Tuple,
12
+ )
13
+
14
+ from datamodel_code_generator import DatetimeClassType, PythonVersion
15
+ from datamodel_code_generator.imports import (
16
+ IMPORT_DATE,
17
+ IMPORT_DATETIME,
18
+ IMPORT_TIME,
19
+ IMPORT_TIMEDELTA,
20
+ Import,
21
+ )
5
22
  from datamodel_code_generator.model import DataModel, DataModelFieldBase
6
23
  from datamodel_code_generator.model.base import UNDEFINED
7
24
  from datamodel_code_generator.model.imports import IMPORT_DATACLASS, IMPORT_FIELD
8
25
  from datamodel_code_generator.model.pydantic.base_model import Constraints
26
+ from datamodel_code_generator.model.types import DataTypeManager as _DataTypeManager
27
+ from datamodel_code_generator.model.types import type_map_factory
9
28
  from datamodel_code_generator.reference import Reference
10
- from datamodel_code_generator.types import chain_as_tuple
29
+ from datamodel_code_generator.types import DataType, StrictTypes, Types, chain_as_tuple
11
30
 
12
31
 
13
32
  def _has_field_assignment(field: DataModelFieldBase) -> bool:
@@ -36,6 +55,7 @@ class DataClass(DataModel):
36
55
  description: Optional[str] = None,
37
56
  default: Any = UNDEFINED,
38
57
  nullable: bool = False,
58
+ keyword_only: bool = False,
39
59
  ) -> None:
40
60
  super().__init__(
41
61
  reference=reference,
@@ -50,6 +70,7 @@ class DataClass(DataModel):
50
70
  description=description,
51
71
  default=default,
52
72
  nullable=nullable,
73
+ keyword_only=keyword_only,
53
74
  )
54
75
 
55
76
 
@@ -118,3 +139,43 @@ class DataModelField(DataModelFieldBase):
118
139
  f'{k}={v if k == "default_factory" else repr(v)}' for k, v in data.items()
119
140
  ]
120
141
  return f'field({", ".join(kwargs)})'
142
+
143
+
144
+ class DataTypeManager(_DataTypeManager):
145
+ def __init__(
146
+ self,
147
+ python_version: PythonVersion = PythonVersion.PY_38,
148
+ use_standard_collections: bool = False,
149
+ use_generic_container_types: bool = False,
150
+ strict_types: Optional[Sequence[StrictTypes]] = None,
151
+ use_non_positive_negative_number_constrained_types: bool = False,
152
+ use_union_operator: bool = False,
153
+ use_pendulum: bool = False,
154
+ target_datetime_class: DatetimeClassType = DatetimeClassType.Datetime,
155
+ ):
156
+ super().__init__(
157
+ python_version,
158
+ use_standard_collections,
159
+ use_generic_container_types,
160
+ strict_types,
161
+ use_non_positive_negative_number_constrained_types,
162
+ use_union_operator,
163
+ use_pendulum,
164
+ target_datetime_class,
165
+ )
166
+
167
+ datetime_map = (
168
+ {
169
+ Types.time: self.data_type.from_import(IMPORT_TIME),
170
+ Types.date: self.data_type.from_import(IMPORT_DATE),
171
+ Types.date_time: self.data_type.from_import(IMPORT_DATETIME),
172
+ Types.timedelta: self.data_type.from_import(IMPORT_TIMEDELTA),
173
+ }
174
+ if target_datetime_class is DatetimeClassType.Datetime
175
+ else {}
176
+ )
177
+
178
+ self.type_map: Dict[Types, DataType] = {
179
+ **type_map_factory(self.data_type),
180
+ **datetime_map,
181
+ }
@@ -47,6 +47,7 @@ class Enum(DataModel):
47
47
  type_: Optional[Types] = None,
48
48
  default: Any = UNDEFINED,
49
49
  nullable: bool = False,
50
+ keyword_only: bool = False,
50
51
  ):
51
52
  super().__init__(
52
53
  reference=reference,
@@ -61,6 +62,7 @@ class Enum(DataModel):
61
62
  description=description,
62
63
  default=default,
63
64
  nullable=nullable,
65
+ keyword_only=keyword_only,
64
66
  )
65
67
 
66
68
  if not base_classes and type_:
@@ -86,6 +86,7 @@ class Struct(DataModel):
86
86
  description: Optional[str] = None,
87
87
  default: Any = UNDEFINED,
88
88
  nullable: bool = False,
89
+ keyword_only: bool = False,
89
90
  ) -> None:
90
91
  super().__init__(
91
92
  reference=reference,
@@ -100,6 +101,7 @@ class Struct(DataModel):
100
101
  description=description,
101
102
  default=default,
102
103
  nullable=nullable,
104
+ keyword_only=keyword_only,
103
105
  )
104
106
 
105
107
 
@@ -225,6 +225,7 @@ class BaseModelBase(DataModel, ABC):
225
225
  description: Optional[str] = None,
226
226
  default: Any = UNDEFINED,
227
227
  nullable: bool = False,
228
+ keyword_only: bool = False,
228
229
  ) -> None:
229
230
  methods: List[str] = [field.method for field in fields if field.method]
230
231
 
@@ -241,6 +242,7 @@ class BaseModelBase(DataModel, ABC):
241
242
  description=description,
242
243
  default=default,
243
244
  nullable=nullable,
245
+ keyword_only=keyword_only,
244
246
  )
245
247
 
246
248
  @cached_property
@@ -275,6 +277,7 @@ class BaseModel(BaseModelBase):
275
277
  description: Optional[str] = None,
276
278
  default: Any = UNDEFINED,
277
279
  nullable: bool = False,
280
+ keyword_only: bool = False,
278
281
  ) -> None:
279
282
  super().__init__(
280
283
  reference=reference,
@@ -288,6 +291,7 @@ class BaseModel(BaseModelBase):
288
291
  description=description,
289
292
  default=default,
290
293
  nullable=nullable,
294
+ keyword_only=keyword_only,
291
295
  )
292
296
  config_parameters: Dict[str, Any] = {}
293
297
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from decimal import Decimal
4
4
  from typing import Any, ClassVar, Dict, Optional, Sequence, Set, Type
5
5
 
6
- from datamodel_code_generator.format import PythonVersion
6
+ from datamodel_code_generator.format import DatetimeClassType, PythonVersion
7
7
  from datamodel_code_generator.imports import (
8
8
  IMPORT_ANY,
9
9
  IMPORT_DATE,
@@ -12,8 +12,10 @@ from datamodel_code_generator.imports import (
12
12
  IMPORT_PATH,
13
13
  IMPORT_PENDULUM_DATE,
14
14
  IMPORT_PENDULUM_DATETIME,
15
+ IMPORT_PENDULUM_DURATION,
15
16
  IMPORT_PENDULUM_TIME,
16
17
  IMPORT_TIME,
18
+ IMPORT_TIMEDELTA,
17
19
  IMPORT_UUID,
18
20
  )
19
21
  from datamodel_code_generator.model.pydantic.imports import (
@@ -57,6 +59,7 @@ def type_map_factory(
57
59
  strict_types: Sequence[StrictTypes],
58
60
  pattern_key: str,
59
61
  use_pendulum: bool,
62
+ target_datetime_class: DatetimeClassType,
60
63
  ) -> Dict[Types, DataType]:
61
64
  data_type_int = data_type(type='int')
62
65
  data_type_float = data_type(type='float')
@@ -75,6 +78,7 @@ def type_map_factory(
75
78
  Types.binary: data_type(type='bytes'),
76
79
  Types.date: data_type.from_import(IMPORT_DATE),
77
80
  Types.date_time: data_type.from_import(IMPORT_DATETIME),
81
+ Types.timedelta: data_type.from_import(IMPORT_TIMEDELTA),
78
82
  Types.path: data_type.from_import(IMPORT_PATH),
79
83
  Types.password: data_type.from_import(IMPORT_SECRET_STR),
80
84
  Types.email: data_type.from_import(IMPORT_EMAIL_STR),
@@ -108,6 +112,7 @@ def type_map_factory(
108
112
  result[Types.date] = data_type.from_import(IMPORT_PENDULUM_DATE)
109
113
  result[Types.date_time] = data_type.from_import(IMPORT_PENDULUM_DATETIME)
110
114
  result[Types.time] = data_type.from_import(IMPORT_PENDULUM_TIME)
115
+ result[Types.timedelta] = data_type.from_import(IMPORT_PENDULUM_DURATION)
111
116
 
112
117
  return result
113
118
 
@@ -158,6 +163,7 @@ class DataTypeManager(_DataTypeManager):
158
163
  use_non_positive_negative_number_constrained_types: bool = False,
159
164
  use_union_operator: bool = False,
160
165
  use_pendulum: bool = False,
166
+ target_datetime_class: Optional[DatetimeClassType] = None,
161
167
  ):
162
168
  super().__init__(
163
169
  python_version,
@@ -167,12 +173,14 @@ class DataTypeManager(_DataTypeManager):
167
173
  use_non_positive_negative_number_constrained_types,
168
174
  use_union_operator,
169
175
  use_pendulum,
176
+ target_datetime_class,
170
177
  )
171
178
 
172
179
  self.type_map: Dict[Types, DataType] = self.type_map_factory(
173
180
  self.data_type,
174
181
  strict_types=self.strict_types,
175
182
  pattern_key=self.PATTERN_KEY,
183
+ target_datetime_class=target_datetime_class,
176
184
  )
177
185
  self.strict_type_map: Dict[StrictTypes, DataType] = strict_type_map_factory(
178
186
  self.data_type,
@@ -196,8 +204,15 @@ class DataTypeManager(_DataTypeManager):
196
204
  data_type: Type[DataType],
197
205
  strict_types: Sequence[StrictTypes],
198
206
  pattern_key: str,
207
+ target_datetime_class: DatetimeClassType,
199
208
  ) -> Dict[Types, DataType]:
200
- return type_map_factory(data_type, strict_types, pattern_key, self.use_pendulum)
209
+ return type_map_factory(
210
+ data_type,
211
+ strict_types,
212
+ pattern_key,
213
+ self.use_pendulum,
214
+ self.target_datetime_class,
215
+ )
201
216
 
202
217
  def transform_kwargs(
203
218
  self, kwargs: Dict[str, Any], filter_: Set[str]
@@ -183,6 +183,7 @@ class BaseModel(BaseModelBase):
183
183
  description: Optional[str] = None,
184
184
  default: Any = UNDEFINED,
185
185
  nullable: bool = False,
186
+ keyword_only: bool = False,
186
187
  ) -> None:
187
188
  super().__init__(
188
189
  reference=reference,
@@ -196,6 +197,7 @@ class BaseModel(BaseModelBase):
196
197
  description=description,
197
198
  default=default,
198
199
  nullable=nullable,
200
+ keyword_only=keyword_only,
199
201
  )
200
202
  config_parameters: Dict[str, Any] = {}
201
203
 
@@ -2,3 +2,4 @@ from datamodel_code_generator.imports import Import
2
2
 
3
3
  IMPORT_CONFIG_DICT = Import.from_full_path('pydantic.ConfigDict')
4
4
  IMPORT_AWARE_DATETIME = Import.from_full_path('pydantic.AwareDatetime')
5
+ IMPORT_NAIVE_DATETIME = Import.from_full_path('pydantic.NaiveDatetime')
@@ -1,10 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import ClassVar, Dict, Sequence, Type
3
+ from typing import ClassVar, Dict, Optional, Sequence, Type
4
4
 
5
+ from datamodel_code_generator.format import DatetimeClassType
5
6
  from datamodel_code_generator.model.pydantic import DataTypeManager as _DataTypeManager
6
7
  from datamodel_code_generator.model.pydantic.imports import IMPORT_CONSTR
7
- from datamodel_code_generator.model.pydantic_v2.imports import IMPORT_AWARE_DATETIME
8
+ from datamodel_code_generator.model.pydantic_v2.imports import (
9
+ IMPORT_AWARE_DATETIME,
10
+ IMPORT_NAIVE_DATETIME,
11
+ )
8
12
  from datamodel_code_generator.types import DataType, StrictTypes, Types
9
13
 
10
14
 
@@ -16,9 +20,12 @@ class DataTypeManager(_DataTypeManager):
16
20
  data_type: Type[DataType],
17
21
  strict_types: Sequence[StrictTypes],
18
22
  pattern_key: str,
23
+ target_datetime_class: Optional[DatetimeClassType] = None,
19
24
  ) -> Dict[Types, DataType]:
20
- return {
21
- **super().type_map_factory(data_type, strict_types, pattern_key),
25
+ result = {
26
+ **super().type_map_factory(
27
+ data_type, strict_types, pattern_key, target_datetime_class
28
+ ),
22
29
  Types.hostname: self.data_type.from_import(
23
30
  IMPORT_CONSTR,
24
31
  strict=StrictTypes.str in strict_types,
@@ -28,5 +35,9 @@ class DataTypeManager(_DataTypeManager):
28
35
  **({'strict': True} if StrictTypes.str in strict_types else {}),
29
36
  },
30
37
  ),
31
- Types.date_time: data_type.from_import(IMPORT_AWARE_DATETIME),
32
38
  }
39
+ if target_datetime_class == DatetimeClassType.Awaredatetime:
40
+ result[Types.date_time] = data_type.from_import(IMPORT_AWARE_DATETIME)
41
+ if target_datetime_class == DatetimeClassType.Naivedatetime:
42
+ result[Types.date_time] = data_type.from_import(IMPORT_NAIVE_DATETIME)
43
+ return result
@@ -46,6 +46,7 @@ class DataTypeScalar(DataModel):
46
46
  description: Optional[str] = None,
47
47
  default: Any = UNDEFINED,
48
48
  nullable: bool = False,
49
+ keyword_only: bool = False,
49
50
  ):
50
51
  extra_template_data = extra_template_data or defaultdict(dict)
51
52
 
@@ -75,4 +76,5 @@ class DataTypeScalar(DataModel):
75
76
  description=description,
76
77
  default=default,
77
78
  nullable=nullable,
79
+ keyword_only=keyword_only,
78
80
  )
@@ -1,7 +1,7 @@
1
1
  {% for decorator in decorators -%}
2
2
  {{ decorator }}
3
3
  {% endfor -%}
4
- @dataclass
4
+ @dataclass{%- if keyword_only -%}(kw_only=True){%- endif %}
5
5
  {%- if base_class %}
6
6
  class {{ class_name }}({{ base_class }}):
7
7
  {%- else %}
@@ -63,6 +63,7 @@ class TypedDict(DataModel):
63
63
  description: Optional[str] = None,
64
64
  default: Any = UNDEFINED,
65
65
  nullable: bool = False,
66
+ keyword_only: bool = False,
66
67
  ) -> None:
67
68
  super().__init__(
68
69
  reference=reference,
@@ -77,6 +78,7 @@ class TypedDict(DataModel):
77
78
  description=description,
78
79
  default=default,
79
80
  nullable=nullable,
81
+ keyword_only=keyword_only,
80
82
  )
81
83
 
82
84
  @property
@@ -1,14 +1,16 @@
1
1
  from typing import Any, Dict, Optional, Sequence, Type
2
2
 
3
- from datamodel_code_generator import PythonVersion
4
- from datamodel_code_generator.imports import IMPORT_ANY, IMPORT_DECIMAL
3
+ from datamodel_code_generator import DatetimeClassType, PythonVersion
4
+ from datamodel_code_generator.imports import (
5
+ IMPORT_ANY,
6
+ IMPORT_DECIMAL,
7
+ IMPORT_TIMEDELTA,
8
+ )
5
9
  from datamodel_code_generator.types import DataType, StrictTypes, Types
6
10
  from datamodel_code_generator.types import DataTypeManager as _DataTypeManager
7
11
 
8
12
 
9
- def type_map_factory(
10
- data_type: Type[DataType],
11
- ) -> Dict[Types, DataType]:
13
+ def type_map_factory(data_type: Type[DataType]) -> Dict[Types, DataType]:
12
14
  data_type_int = data_type(type='int')
13
15
  data_type_float = data_type(type='float')
14
16
  data_type_str = data_type(type='str')
@@ -27,6 +29,7 @@ def type_map_factory(
27
29
  Types.binary: data_type(type='bytes'),
28
30
  Types.date: data_type_str,
29
31
  Types.date_time: data_type_str,
32
+ Types.timedelta: data_type.from_import(IMPORT_TIMEDELTA),
30
33
  Types.password: data_type_str,
31
34
  Types.email: data_type_str,
32
35
  Types.uuid: data_type_str,
@@ -59,6 +62,7 @@ class DataTypeManager(_DataTypeManager):
59
62
  use_non_positive_negative_number_constrained_types: bool = False,
60
63
  use_union_operator: bool = False,
61
64
  use_pendulum: bool = False,
65
+ target_datetime_class: DatetimeClassType = DatetimeClassType.Datetime,
62
66
  ):
63
67
  super().__init__(
64
68
  python_version,
@@ -68,11 +72,10 @@ class DataTypeManager(_DataTypeManager):
68
72
  use_non_positive_negative_number_constrained_types,
69
73
  use_union_operator,
70
74
  use_pendulum,
75
+ target_datetime_class,
71
76
  )
72
77
 
73
- self.type_map: Dict[Types, DataType] = type_map_factory(
74
- self.data_type,
75
- )
78
+ self.type_map: Dict[Types, DataType] = type_map_factory(self.data_type)
76
79
 
77
80
  def get_data_type(
78
81
  self,
@@ -32,6 +32,7 @@ class DataTypeUnion(DataModel):
32
32
  description: Optional[str] = None,
33
33
  default: Any = UNDEFINED,
34
34
  nullable: bool = False,
35
+ keyword_only: bool = False,
35
36
  ):
36
37
  super().__init__(
37
38
  reference=reference,
@@ -46,4 +47,5 @@ class DataTypeUnion(DataModel):
46
47
  description=description,
47
48
  default=default,
48
49
  nullable=nullable,
50
+ keyword_only=keyword_only,
49
51
  )
@@ -26,7 +26,11 @@ from urllib.parse import ParseResult
26
26
 
27
27
  from pydantic import BaseModel
28
28
 
29
- from datamodel_code_generator.format import CodeFormatter, PythonVersion
29
+ from datamodel_code_generator.format import (
30
+ CodeFormatter,
31
+ DatetimeClassType,
32
+ PythonVersion,
33
+ )
30
34
  from datamodel_code_generator.imports import (
31
35
  IMPORT_ANNOTATIONS,
32
36
  IMPORT_LITERAL,
@@ -34,6 +38,7 @@ from datamodel_code_generator.imports import (
34
38
  Import,
35
39
  Imports,
36
40
  )
41
+ from datamodel_code_generator.model import dataclass as dataclass_model
37
42
  from datamodel_code_generator.model import pydantic as pydantic_model
38
43
  from datamodel_code_generator.model import pydantic_v2 as pydantic_model_v2
39
44
  from datamodel_code_generator.model.base import (
@@ -239,10 +244,11 @@ def relative(current_module: str, reference: str) -> Tuple[str, str]:
239
244
 
240
245
 
241
246
  def exact_import(from_: str, import_: str, short_name: str) -> Tuple[str, str]:
242
- if from_ == '.':
247
+ if from_ == len(from_) * '.':
243
248
  # Prevents "from . import foo" becoming "from ..foo import Foo"
249
+ # or "from .. import foo" becoming "from ...foo import Foo"
244
250
  # when our imported module has the same parent
245
- return f'.{import_}', short_name
251
+ return f'{from_}{import_}', short_name
246
252
  return f'{from_}.{import_}', short_name
247
253
 
248
254
 
@@ -403,7 +409,10 @@ class Parser(ABC):
403
409
  treat_dots_as_module: bool = False,
404
410
  use_exact_imports: bool = False,
405
411
  default_field_extras: Optional[Dict[str, Any]] = None,
412
+ target_datetime_class: DatetimeClassType = DatetimeClassType.Datetime,
413
+ keyword_only: bool = False,
406
414
  ) -> None:
415
+ self.keyword_only = keyword_only
407
416
  self.data_type_manager: DataTypeManager = data_type_manager_type(
408
417
  python_version=target_python_version,
409
418
  use_standard_collections=use_standard_collections,
@@ -411,6 +420,7 @@ class Parser(ABC):
411
420
  strict_types=strict_types,
412
421
  use_union_operator=use_union_operator,
413
422
  use_pendulum=use_pendulum,
423
+ target_datetime_class=target_datetime_class,
414
424
  )
415
425
  self.data_model_type: Type[DataModel] = data_model_type
416
426
  self.data_model_root_type: Type[DataModel] = data_model_root_type
@@ -795,7 +805,11 @@ class Parser(ABC):
795
805
  discriminator_model = data_type.reference.source
796
806
  if not isinstance( # pragma: no cover
797
807
  discriminator_model,
798
- (pydantic_model.BaseModel, pydantic_model_v2.BaseModel),
808
+ (
809
+ pydantic_model.BaseModel,
810
+ pydantic_model_v2.BaseModel,
811
+ dataclass_model.DataClass,
812
+ ),
799
813
  ):
800
814
  continue # pragma: no cover
801
815
  type_names = []
@@ -1370,8 +1384,8 @@ class Parser(ABC):
1370
1384
  )
1371
1385
  self.__set_default_enum_member(models)
1372
1386
  self.__sort_models(models, imports)
1373
- self.__set_one_literal_on_default(models)
1374
1387
  self.__apply_discriminator_type(models, imports)
1388
+ self.__set_one_literal_on_default(models)
1375
1389
 
1376
1390
  processed_models.append(
1377
1391
  Processed(module, models, init, imports, scoped_model_resolver)
@@ -46,6 +46,7 @@ except ImportError: # pragma: no cover
46
46
  "Please run `$pip install 'datamodel-code-generator[graphql]`' to generate data-model from a GraphQL schema."
47
47
  )
48
48
 
49
+ from datamodel_code_generator.format import DatetimeClassType
49
50
 
50
51
  graphql_resolver = graphql.type.introspection.TypeResolvers()
51
52
 
@@ -157,6 +158,8 @@ class GraphQLParser(Parser):
157
158
  treat_dots_as_module: bool = False,
158
159
  use_exact_imports: bool = False,
159
160
  default_field_extras: Optional[Dict[str, Any]] = None,
161
+ target_datetime_class: DatetimeClassType = DatetimeClassType.Datetime,
162
+ keyword_only: bool = False,
160
163
  ) -> None:
161
164
  super().__init__(
162
165
  source=source,
@@ -227,6 +230,8 @@ class GraphQLParser(Parser):
227
230
  treat_dots_as_module=treat_dots_as_module,
228
231
  use_exact_imports=use_exact_imports,
229
232
  default_field_extras=default_field_extras,
233
+ target_datetime_class=target_datetime_class,
234
+ keyword_only=keyword_only,
230
235
  )
231
236
 
232
237
  self.data_model_scalar_type = data_model_scalar_type
@@ -460,6 +465,7 @@ class GraphQLParser(Parser):
460
465
  extra_template_data=self.extra_template_data,
461
466
  path=self.current_source_path,
462
467
  description=obj.description,
468
+ keyword_only=self.keyword_only,
463
469
  )
464
470
  self.results.append(data_model_type)
465
471
 
@@ -71,6 +71,8 @@ from datamodel_code_generator.util import (
71
71
  if PYDANTIC_V2:
72
72
  from pydantic import ConfigDict
73
73
 
74
+ from datamodel_code_generator.format import DatetimeClassType
75
+
74
76
 
75
77
  def get_model_by_path(
76
78
  schema: Union[Dict[str, Any], List[Any]], keys: Union[List[str], List[int]]
@@ -116,6 +118,7 @@ json_schema_data_formats: Dict[str, Dict[str, Types]] = {
116
118
  'binary': Types.binary,
117
119
  'date': Types.date,
118
120
  'date-time': Types.date_time,
121
+ 'duration': Types.timedelta,
119
122
  'time': Types.time,
120
123
  'password': Types.password,
121
124
  'path': Types.path,
@@ -443,6 +446,8 @@ class JsonSchemaParser(Parser):
443
446
  treat_dots_as_module: bool = False,
444
447
  use_exact_imports: bool = False,
445
448
  default_field_extras: Optional[Dict[str, Any]] = None,
449
+ target_datetime_class: DatetimeClassType = DatetimeClassType.Datetime,
450
+ keyword_only: bool = False,
446
451
  ) -> None:
447
452
  super().__init__(
448
453
  source=source,
@@ -513,6 +518,8 @@ class JsonSchemaParser(Parser):
513
518
  treat_dots_as_module=treat_dots_as_module,
514
519
  use_exact_imports=use_exact_imports,
515
520
  default_field_extras=default_field_extras,
521
+ target_datetime_class=target_datetime_class,
522
+ keyword_only=keyword_only,
516
523
  )
517
524
 
518
525
  self.remote_object_cache: DefaultPutDict[str, Dict[str, Any]] = DefaultPutDict()
@@ -803,6 +810,7 @@ class JsonSchemaParser(Parser):
803
810
  extra_template_data=self.extra_template_data,
804
811
  path=self.current_source_path,
805
812
  description=obj.description if self.use_schema_description else None,
813
+ keyword_only=self.keyword_only,
806
814
  )
807
815
  self.results.append(data_model_type)
808
816
 
@@ -1046,6 +1054,7 @@ class JsonSchemaParser(Parser):
1046
1054
  path=self.current_source_path,
1047
1055
  description=obj.description if self.use_schema_description else None,
1048
1056
  nullable=obj.type_has_null,
1057
+ keyword_only=self.keyword_only,
1049
1058
  )
1050
1059
  self.results.append(data_model_type)
1051
1060
  return self.data_type(reference=reference)
@@ -36,6 +36,7 @@ from datamodel_code_generator import (
36
36
  load_yaml,
37
37
  snooper_to_methods,
38
38
  )
39
+ from datamodel_code_generator.format import DatetimeClassType
39
40
  from datamodel_code_generator.model import DataModel, DataModelFieldBase
40
41
  from datamodel_code_generator.model import pydantic as pydantic_model
41
42
  from datamodel_code_generator.parser.base import get_special_path
@@ -225,6 +226,8 @@ class OpenAPIParser(JsonSchemaParser):
225
226
  treat_dots_as_module: bool = False,
226
227
  use_exact_imports: bool = False,
227
228
  default_field_extras: Optional[Dict[str, Any]] = None,
229
+ target_datetime_class: DatetimeClassType = DatetimeClassType.Datetime,
230
+ keyword_only: bool = False,
228
231
  ):
229
232
  super().__init__(
230
233
  source=source,
@@ -295,6 +298,8 @@ class OpenAPIParser(JsonSchemaParser):
295
298
  treat_dots_as_module=treat_dots_as_module,
296
299
  use_exact_imports=use_exact_imports,
297
300
  default_field_extras=default_field_extras,
301
+ target_datetime_class=target_datetime_class,
302
+ keyword_only=keyword_only,
298
303
  )
299
304
  self.open_api_scopes: List[OpenAPIScope] = openapi_scopes or [
300
305
  OpenAPIScope.Schemas
@@ -508,6 +513,7 @@ class OpenAPIParser(JsonSchemaParser):
508
513
  fields=fields,
509
514
  reference=reference,
510
515
  custom_base_class=self.base_class,
516
+ keyword_only=self.keyword_only,
511
517
  )
512
518
  )
513
519
 
@@ -27,7 +27,7 @@ import pydantic
27
27
  from packaging import version
28
28
  from pydantic import StrictBool, StrictInt, StrictStr, create_model
29
29
 
30
- from datamodel_code_generator.format import PythonVersion
30
+ from datamodel_code_generator.format import DatetimeClassType, PythonVersion
31
31
  from datamodel_code_generator.imports import (
32
32
  IMPORT_ABC_MAPPING,
33
33
  IMPORT_ABC_SEQUENCE,
@@ -542,6 +542,7 @@ class Types(Enum):
542
542
  binary = auto()
543
543
  date = auto()
544
544
  date_time = auto()
545
+ timedelta = auto()
545
546
  password = auto()
546
547
  path = auto()
547
548
  email = auto()
@@ -574,6 +575,7 @@ class DataTypeManager(ABC):
574
575
  use_non_positive_negative_number_constrained_types: bool = False,
575
576
  use_union_operator: bool = False,
576
577
  use_pendulum: bool = False,
578
+ target_datetime_class: Optional[DatetimeClassType] = None,
577
579
  ) -> None:
578
580
  self.python_version = python_version
579
581
  self.use_standard_collections: bool = use_standard_collections
@@ -584,6 +586,7 @@ class DataTypeManager(ABC):
584
586
  )
585
587
  self.use_union_operator: bool = use_union_operator
586
588
  self.use_pendulum: bool = use_pendulum
589
+ self.target_datetime_class: DatetimeClassType = target_datetime_class
587
590
 
588
591
  if (
589
592
  use_generic_container_types and python_version == PythonVersion.PY_36
@@ -1 +1 @@
1
- version: str = '0.26.0'
1
+ version: str = '0.26.2'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datamodel-code-generator
3
- Version: 0.26.0
3
+ Version: 0.26.2
4
4
  Summary: Datamodel Code Generator
5
5
  Home-page: https://github.com/koxudaxi/datamodel-code-generator
6
6
  License: MIT
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.9
16
16
  Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
19
20
  Classifier: Programming Language :: Python :: Implementation :: CPython
20
21
  Provides-Extra: debug
21
22
  Provides-Extra: graphql
@@ -494,6 +495,12 @@ Model customization:
494
495
  --enable-version-header
495
496
  Enable package version on file headers
496
497
  --keep-model-order Keep generated models'' order
498
+ --keyword-only Defined models as keyword only (for example
499
+ dataclass(kw_only=True)).
500
+ --output-datetime-class {datetime,AwareDatetime,NaiveDatetime}
501
+ Choose Datetime class between AwareDatetime, NaiveDatetime or
502
+ datetime. Each output model has its default mapping, and only
503
+ pydantic and dataclass support this override"
497
504
  --reuse-model Reuse models on the field when a module has the model with the same
498
505
  content
499
506
  --target-python-version {3.6,3.7,3.8,3.9,3.10,3.11,3.12}
@@ -1,35 +1,35 @@
1
- datamodel_code_generator/__init__.py,sha256=HjG9D_8lr44liXSIOEsYYj3xgn-jEz_2iK2uwc0dJao,18517
2
- datamodel_code_generator/__main__.py,sha256=MWBehWH8aY4zqSOUUwuZ4fUBOlnuJ16ZOna4NL28HFo,19746
3
- datamodel_code_generator/arguments.py,sha256=DCiFpkhqvq5OvHNgABCtNtw6eckp0U7U5fYT1e8NCHM,15558
4
- datamodel_code_generator/format.py,sha256=keAejlYYIBdfUNbkr-IFMfro0on9ZzaqlVulNgpnKco,8653
1
+ datamodel_code_generator/__init__.py,sha256=iNtaR-iP5McYCDelHc_67DiuKlx-EU7j9rLbCJnYHII,18757
2
+ datamodel_code_generator/__main__.py,sha256=oWeH6qccmFP5DJJWqCGmtLCXCExizYbro6hUb6Q4uGk,21085
3
+ datamodel_code_generator/arguments.py,sha256=Q3LxZut72yqazXGjEG4CN1w4WFvpmldwOrgRhi_gL2o,16070
4
+ datamodel_code_generator/format.py,sha256=kA2rESd51uCDGAzTCz4wX24WitU7X1Zi68v4a_59wmc,8884
5
5
  datamodel_code_generator/http.py,sha256=CwLVnXO4_W_fWKJsHnJp6Q_3GuF3qjCjeAe48Ihawrs,714
6
- datamodel_code_generator/imports.py,sha256=EUUgdLMD_724Jhp50-hQy2C6uMSQISGbJKhUfH3iIbo,5595
7
- datamodel_code_generator/model/__init__.py,sha256=A0CqnL87-lY_Te-n-99ya5v7h6l4jE6hOPP_itvcWOc,3091
8
- datamodel_code_generator/model/base.py,sha256=3a7gTAI3e_2WMdgHyhKTWqs1qELqVb18HuwcBof-2C4,14059
9
- datamodel_code_generator/model/dataclass.py,sha256=9meJNWb-XPYYO8kDMSLhSfO6fulGWV7r3_XIM5kA71M,3965
10
- datamodel_code_generator/model/enum.py,sha256=Giehhtij2DZs2LssSJnG_CIIHsSA7Mkz471GU-Cb5kI,3338
6
+ datamodel_code_generator/imports.py,sha256=RagA3hne8OtrbZwDA7TaORQll6tKIzket-A6ShOWf8s,5728
7
+ datamodel_code_generator/model/__init__.py,sha256=-5-3m6xlNia1ROePCqmV2lvvvwyzgFS9zFGUzqQzQf8,3171
8
+ datamodel_code_generator/model/base.py,sha256=KMrVsxoQEeKhA5akGLxM-nUzHINM0GTt2t6HTF9SrKQ,14180
9
+ datamodel_code_generator/model/dataclass.py,sha256=Ebn48PRvCOCcyKhxYxgYBbRcpIvXko-VomZ6N8gKrLA,5871
10
+ datamodel_code_generator/model/enum.py,sha256=HTFMCNoHmJRHUoNqQCat3kLbtdmSVX666BubN3bcF1I,3413
11
11
  datamodel_code_generator/model/imports.py,sha256=9-0bd-DvZRjZkWMsmw-gykL8fzTd6M-vQEqS7Rm_ty4,725
12
- datamodel_code_generator/model/msgspec.py,sha256=J4U8aroVzBdMkv8CfuOf9mV3X7k83lom-CW4ATpbCfk,9093
12
+ datamodel_code_generator/model/msgspec.py,sha256=GONU6gRJ84piJpNDrmU9gTg_n_eY7Sd5KeCUQJN5IaE,9168
13
13
  datamodel_code_generator/model/pydantic/__init__.py,sha256=AYMjDCtnV4vweYqe1asTRCYdOo8IGLBhd8pEdxyY8ok,1372
14
- datamodel_code_generator/model/pydantic/base_model.py,sha256=Y2GSlcLBvQh8hrlwGE3rGLTsQLKxERBts0so5BcUP6Y,11970
14
+ datamodel_code_generator/model/pydantic/base_model.py,sha256=sTxrFItp7wpL0OxBYOGLyyjWWrzGDuV_pFeHPsSQ4Gs,12120
15
15
  datamodel_code_generator/model/pydantic/custom_root_type.py,sha256=XOeJqzUEAYE21C3hPAnRIz9iDWIjZvUOWDc9MCrpdvw,299
16
16
  datamodel_code_generator/model/pydantic/dataclass.py,sha256=sbqTmutl8Fjf1pYngfdv0NMXt904QcTRpHqmZy6GUiQ,424
17
17
  datamodel_code_generator/model/pydantic/imports.py,sha256=2nSLYwphBUMQEa0PTSNwoLjEBslu02EQb6BdZ-S51yk,2189
18
- datamodel_code_generator/model/pydantic/types.py,sha256=2ghckIyBX-QmFT1GAAjKuCLyD5hjpNqmRftOlgcS5Fo,13034
18
+ datamodel_code_generator/model/pydantic/types.py,sha256=xtkdfQc295ACRvsSig0Zo-mxCw8Xdfu2VXeDbLF_l0Y,13607
19
19
  datamodel_code_generator/model/pydantic_v2/__init__.py,sha256=4CS-uI5_4xnvxBKl-Ht1a4E_4fIsfZ8T4jdst0cbZDk,975
20
- datamodel_code_generator/model/pydantic_v2/base_model.py,sha256=kObU_n-RN7RSR7lfiH2oxjqGD8cALPxi24AHlFdFEgE,7958
21
- datamodel_code_generator/model/pydantic_v2/imports.py,sha256=Q6XC6iE5v4LJvQ2DOXDGFtR-FnGPsaZ56KiiTiF2bIE,191
20
+ datamodel_code_generator/model/pydantic_v2/base_model.py,sha256=JHUirMIITztUFtvL1vc_tkE0tRhum3f-JNydmVuzngs,8033
21
+ datamodel_code_generator/model/pydantic_v2/imports.py,sha256=n0yWg5QGDDzOseN35RJFlEbmV6oKMLQ8Kju1w4N6D08,263
22
22
  datamodel_code_generator/model/pydantic_v2/root_model.py,sha256=iApUz1uGe4hHV8RyOK8rGjaEJcnqTJZqo-0uSfyVMGc,884
23
- datamodel_code_generator/model/pydantic_v2/types.py,sha256=6KAJXO_SGs5bc8GQScCpowgqjaSmrn9W9iewpWIHack,1440
23
+ datamodel_code_generator/model/pydantic_v2/types.py,sha256=JV2m0TOPbh-1oHpN_W12KKuNf19RI-V2oehAUJtDIn4,1921
24
24
  datamodel_code_generator/model/rootmodel.py,sha256=8bW7emVQtDGe2iUAmqtlQb607LvTRL0TBSP66pIeNzY,202
25
- datamodel_code_generator/model/scalar.py,sha256=d4vqDW9OcvPR1I0lrlss2wDprWbUt9kPv767VYZi_Ks,2521
25
+ datamodel_code_generator/model/scalar.py,sha256=md13JdHahWqjuASbivhywvy4MQ8sZhCAaClhEvWrY3M,2596
26
26
  datamodel_code_generator/model/template/Enum.jinja2,sha256=k9lB8iQUsB94bPi8e3xJEd0AGk2ciWL-pSZuGY5kNPQ,378
27
27
  datamodel_code_generator/model/template/Scalar.jinja2,sha256=Ss22-mYG3Vez-pbqmW2zFzwxGVhXkbQcAVTMV7POpg8,104
28
28
  datamodel_code_generator/model/template/TypedDict.jinja2,sha256=J_Pe_CiuvTOb-EUCExXPaeTEFzn2keyrKB0wglZ8HgA,135
29
29
  datamodel_code_generator/model/template/TypedDictClass.jinja2,sha256=URwp5__WyR8G21Hoyc17aMzoast-NppXnXe19VFi5wQ,377
30
30
  datamodel_code_generator/model/template/TypedDictFunction.jinja2,sha256=KjSij5_w4ow4a12SR3orYOndmXGkIvJBBUN735bQ6G0,321
31
31
  datamodel_code_generator/model/template/Union.jinja2,sha256=sq7o--2ESUSfIL4kCfgnr5ZXPFa_VeioqbATTY-N-5I,258
32
- datamodel_code_generator/model/template/dataclass.jinja2,sha256=U-zwO9xoClVcNmNCDBnvZQo0_xcRWsPYh2QfsNMyUsQ,816
32
+ datamodel_code_generator/model/template/dataclass.jinja2,sha256=wRSy2g11Dr1GN9YUl13OZt2xg37bQyFwKn2wEsQIndE,865
33
33
  datamodel_code_generator/model/template/msgspec.jinja2,sha256=DVYCuXV5VpOx-8xiDsaqKwBzDuGAmMuD3dgWCM6-o4o,1070
34
34
  datamodel_code_generator/model/template/pydantic/BaseModel.jinja2,sha256=sYZa-47YAXqZrd5cYKVnPrsbDvLkHEJOUd7M0nAosP8,1084
35
35
  datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2,sha256=WDdTXYNTrkIw-B4OvPVxOaETTknLs0zdNuq_iDQ2Bcw,1000
@@ -39,22 +39,22 @@ datamodel_code_generator/model/template/pydantic_v2/BaseModel.jinja2,sha256=XdSC
39
39
  datamodel_code_generator/model/template/pydantic_v2/ConfigDict.jinja2,sha256=xHvBYrh__32O1xRCSl6_u5zbyYIjB8a5k8fZiTo0spY,149
40
40
  datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2,sha256=XQBlML7Hm5hN6_AExENNvVc_yxNWijcIfTTbbmegCpE,1223
41
41
  datamodel_code_generator/model/template/root.jinja2,sha256=3OTtibxLcGA-FMdR0QDCJUJQgf_kRW0OafeCTPFSFFo,162
42
- datamodel_code_generator/model/typed_dict.py,sha256=pzUaKLaVDF5rfxAaR1m4FqnhR00eE6AIP30oGTj67fY,4717
43
- datamodel_code_generator/model/types.py,sha256=7YQqPc-_yf5LhrLomB4msyOB_1cn0kKxfDHmGfVvDmA,2953
44
- datamodel_code_generator/model/union.py,sha256=loaVWQi-UHkV4gLfF2JhxLcgZRMsejaoJzGvjTlp_bo,1716
42
+ datamodel_code_generator/model/typed_dict.py,sha256=W1r3NRy8uFkYe3YVnjL9PAGZdGyoSDcd-Otq7cxFDMM,4792
43
+ datamodel_code_generator/model/types.py,sha256=T3Xxa7MToHXIH1zXHT1P6PzE49aah0IhnwkCbYVc79c,3157
44
+ datamodel_code_generator/model/union.py,sha256=4LT5E46c2OH1dvQmvRWM7mX1Pziu_oWBHwXsGsylUbY,1791
45
45
  datamodel_code_generator/parser/__init__.py,sha256=zHbw6RPlJC0SAQjb-XyVlyZhcOu5PfYgPidy6jlUM8M,793
46
- datamodel_code_generator/parser/base.py,sha256=L45svycaIX4XLMqaCl3yameLmusLXw0Exrve-1Xydb4,59825
47
- datamodel_code_generator/parser/graphql.py,sha256=LmPQZuu7VYQ3JBD6RUCqDQNlSZuqIZSwFcbZouo-4qc,22037
48
- datamodel_code_generator/parser/jsonschema.py,sha256=rVKSw5zg7MtQs-gTwhsmgHGJ5JyQGQqPhBzBTM-zdnI,70222
49
- datamodel_code_generator/parser/openapi.py,sha256=mawqfJeOqDvkX1_63uqRhLC1EaYR8QkAyZ93MneeMK8,25930
46
+ datamodel_code_generator/parser/base.py,sha256=mHnU_EJbbChqL4JrmS_MluWNfGKDBdR2PTJy_xz4YZs,60371
47
+ datamodel_code_generator/parser/graphql.py,sha256=QpLHwyCw5F51w6_Iui_cL1cAblQ74ZrRx1vfzYh0Uo0,22354
48
+ datamodel_code_generator/parser/jsonschema.py,sha256=L_QxO4lG6lzHbcVl33ImEQP6mNlZWUH3ootPMrtmHQI,70621
49
+ datamodel_code_generator/parser/openapi.py,sha256=ENpjBKcqZyjcxgVfLKMbI5sDWfQufY1JmPXzir_IwCE,26255
50
50
  datamodel_code_generator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  datamodel_code_generator/pydantic_patch.py,sha256=5UKotLqor9HixzXk463CUevyCcH2zmQljMAPRyTOxiM,570
52
52
  datamodel_code_generator/reference.py,sha256=EoalUNUP5us31bfMrHDa1iiKqxL8gHrpZKY_IxgZrOg,26347
53
- datamodel_code_generator/types.py,sha256=lVKp5TsW-8DK81jQMGUqEANr8DcI2kjdqA1VciITDAI,19631
53
+ datamodel_code_generator/types.py,sha256=Mtp-owOLiNlbbXU9tTFJH0MBFP3UYyFLL4jENdDD6es,19818
54
54
  datamodel_code_generator/util.py,sha256=OmYaVP0z0fGPnvmZQx63qmdMwFnMAIVHfTwSkExpoKk,2829
55
- datamodel_code_generator/version.py,sha256=I58_7Ue2SKeM60Nu76Yg9NVQ2egVERIo4F3HJGgMRSo,24
56
- datamodel_code_generator-0.26.0.dist-info/LICENSE,sha256=K54Lwc6_jduycsy8oFFjQEeSSuEiqvVIjCGIXOMnuTQ,1068
57
- datamodel_code_generator-0.26.0.dist-info/METADATA,sha256=zmlwGEAR-LflJhbkg2a3hgIK-LrrDytfIUX15N9G9VA,24317
58
- datamodel_code_generator-0.26.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
59
- datamodel_code_generator-0.26.0.dist-info/entry_points.txt,sha256=bykbUWqOCiKfxJPGe8jpNqTqD1NG7uyRmozdnwzu7rk,76
60
- datamodel_code_generator-0.26.0.dist-info/RECORD,,
55
+ datamodel_code_generator/version.py,sha256=2wxCCX8dkrhCy1rddbMrBMdf8znpK_gbbznigtdWVUk,24
56
+ datamodel_code_generator-0.26.2.dist-info/LICENSE,sha256=K54Lwc6_jduycsy8oFFjQEeSSuEiqvVIjCGIXOMnuTQ,1068
57
+ datamodel_code_generator-0.26.2.dist-info/METADATA,sha256=Ejj598KgHsENHFlQDdWl07onYpZG1ge38ucnRLqWZRY,24793
58
+ datamodel_code_generator-0.26.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
59
+ datamodel_code_generator-0.26.2.dist-info/entry_points.txt,sha256=bykbUWqOCiKfxJPGe8jpNqTqD1NG7uyRmozdnwzu7rk,76
60
+ datamodel_code_generator-0.26.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.0
2
+ Generator: poetry-core 1.9.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any