datamodel-code-generator 0.25.9__py3-none-any.whl → 0.26.0__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.

@@ -31,6 +31,7 @@ import yaml
31
31
 
32
32
  import datamodel_code_generator.pydantic_patch # noqa: F401
33
33
  from datamodel_code_generator.format import PythonVersion
34
+ from datamodel_code_generator.model.pydantic_v2 import UnionMode
34
35
  from datamodel_code_generator.parser import DefaultPutDict, LiteralType
35
36
  from datamodel_code_generator.parser.base import Parser
36
37
  from datamodel_code_generator.types import StrictTypes
@@ -66,14 +67,9 @@ else:
66
67
  def get_version() -> str:
67
68
  package = 'datamodel-code-generator'
68
69
 
69
- try:
70
- from importlib.metadata import version
71
-
72
- return version(package)
73
- except ImportError:
74
- import pkg_resources
70
+ from importlib.metadata import version
75
71
 
76
- return pkg_resources.get_distribution(package).version
72
+ return version(package)
77
73
 
78
74
 
79
75
  def enable_debug_message() -> None: # pragma: no cover
@@ -241,7 +237,7 @@ def generate(
241
237
  input_file_type: InputFileType = InputFileType.Auto,
242
238
  output: Optional[Path] = None,
243
239
  output_model_type: DataModelType = DataModelType.PydanticBaseModel,
244
- target_python_version: PythonVersion = PythonVersion.PY_37,
240
+ target_python_version: PythonVersion = PythonVersion.PY_38,
245
241
  base_class: str = '',
246
242
  additional_imports: Optional[List[str]] = None,
247
243
  custom_template_dir: Optional[Path] = None,
@@ -304,6 +300,7 @@ def generate(
304
300
  http_query_parameters: Optional[Sequence[Tuple[str, str]]] = None,
305
301
  treat_dots_as_module: bool = False,
306
302
  use_exact_imports: bool = False,
303
+ union_mode: Optional[UnionMode] = None,
307
304
  ) -> None:
308
305
  remote_text_cache: DefaultPutDict[str, str] = DefaultPutDict()
309
306
  if isinstance(input_, str):
@@ -391,6 +388,13 @@ def generate(
391
388
  if isinstance(input_, ParseResult) and input_file_type not in RAW_DATA_TYPES:
392
389
  input_text = None
393
390
 
391
+ if union_mode is not None:
392
+ if output_model_type == DataModelType.PydanticV2BaseModel:
393
+ default_field_extras = {'union_mode': union_mode}
394
+ else: # pragma: no cover
395
+ raise Error('union_mode is only supported for pydantic_v2.BaseModel')
396
+ else:
397
+ default_field_extras = None
394
398
  from datamodel_code_generator.model import get_data_model_types
395
399
 
396
400
  data_model_types = get_data_model_types(output_model_type, target_python_version)
@@ -466,6 +470,7 @@ def generate(
466
470
  http_query_parameters=http_query_parameters,
467
471
  treat_dots_as_module=treat_dots_as_module,
468
472
  use_exact_imports=use_exact_imports,
473
+ default_field_extras=default_field_extras,
469
474
  **kwargs,
470
475
  )
471
476
 
@@ -33,6 +33,8 @@ import argcomplete
33
33
  import black
34
34
  from pydantic import BaseModel
35
35
 
36
+ from datamodel_code_generator.model.pydantic_v2 import UnionMode
37
+
36
38
  if TYPE_CHECKING:
37
39
  from argparse import Namespace
38
40
 
@@ -248,7 +250,7 @@ class Config(BaseModel):
248
250
  output: Optional[Path] = None
249
251
  debug: bool = False
250
252
  disable_warnings: bool = False
251
- target_python_version: PythonVersion = PythonVersion.PY_37
253
+ target_python_version: PythonVersion = PythonVersion.PY_38
252
254
  base_class: str = ''
253
255
  additional_imports: Optional[List[str]] = (None,)
254
256
  custom_template_dir: Optional[Path] = None
@@ -310,6 +312,7 @@ class Config(BaseModel):
310
312
  http_query_parameters: Optional[Sequence[Tuple[str, str]]] = None
311
313
  treat_dot_as_module: bool = False
312
314
  use_exact_imports: bool = False
315
+ union_mode: Optional[UnionMode] = None
313
316
 
314
317
  def merge_args(self, args: Namespace) -> None:
315
318
  set_args = {
@@ -508,6 +511,7 @@ def main(args: Optional[Sequence[str]] = None) -> Exit:
508
511
  http_query_parameters=config.http_query_parameters,
509
512
  treat_dots_as_module=config.treat_dot_as_module,
510
513
  use_exact_imports=config.use_exact_imports,
514
+ union_mode=config.union_mode,
511
515
  )
512
516
  return Exit.OK
513
517
  except InvalidClassNameError as e:
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING
7
7
 
8
8
  from datamodel_code_generator import DataModelType, InputFileType, OpenAPIScope
9
9
  from datamodel_code_generator.format import PythonVersion
10
+ from datamodel_code_generator.model.pydantic_v2 import UnionMode
10
11
  from datamodel_code_generator.parser import LiteralType
11
12
  from datamodel_code_generator.types import StrictTypes
12
13
 
@@ -151,13 +152,13 @@ model_options.add_argument(
151
152
  )
152
153
  model_options.add_argument(
153
154
  '--reuse-model',
154
- help='Re-use models on the field when a module has the model with the same content',
155
+ help='Reuse models on the field when a module has the model with the same content',
155
156
  action='store_true',
156
157
  default=None,
157
158
  )
158
159
  model_options.add_argument(
159
160
  '--target-python-version',
160
- help='target python version (default: 3.7)',
161
+ help='target python version (default: 3.8)',
161
162
  choices=[v.value for v in PythonVersion],
162
163
  )
163
164
  model_options.add_argument(
@@ -361,6 +362,12 @@ field_options.add_argument(
361
362
  action='store_true',
362
363
  default=None,
363
364
  )
365
+ field_options.add_argument(
366
+ '--union-mode',
367
+ help='Union mode for only pydantic v2 field',
368
+ choices=[u.value for u in UnionMode],
369
+ default=None,
370
+ )
364
371
 
365
372
  # ======================================================================================
366
373
  # Options for templating output
@@ -492,7 +499,6 @@ general_options.add_argument(
492
499
  help='show version',
493
500
  )
494
501
 
495
-
496
502
  __all__ = [
497
503
  'arg_parser',
498
504
  'DEFAULT_ENCODING',
@@ -139,7 +139,9 @@ class CodeFormatter:
139
139
  'experimental-string-processing'
140
140
  )
141
141
  else:
142
- experimental_string_processing = config.get('preview', False) and (
142
+ experimental_string_processing = config.get(
143
+ 'preview', False
144
+ ) and ( # pragma: no cover
143
145
  config.get('unstable', False)
144
146
  or 'string_processing' in config.get('enable-unstable-feature', [])
145
147
  )
@@ -151,7 +151,7 @@ class DataTypeManager(_DataTypeManager):
151
151
 
152
152
  def __init__(
153
153
  self,
154
- python_version: PythonVersion = PythonVersion.PY_37,
154
+ python_version: PythonVersion = PythonVersion.PY_38,
155
155
  use_standard_collections: bool = False,
156
156
  use_generic_container_types: bool = False,
157
157
  strict_types: Optional[Sequence[StrictTypes]] = None,
@@ -4,7 +4,7 @@ from typing import Iterable, Optional, Tuple
4
4
 
5
5
  from pydantic import BaseModel as _BaseModel
6
6
 
7
- from .base_model import BaseModel, DataModelField
7
+ from .base_model import BaseModel, DataModelField, UnionMode
8
8
  from .root_model import RootModel
9
9
  from .types import DataTypeManager
10
10
 
@@ -31,4 +31,5 @@ __all__ = [
31
31
  'RootModel',
32
32
  'dump_resolve_reference_action',
33
33
  'DataTypeManager',
34
+ 'UnionMode',
34
35
  ]
@@ -1,7 +1,7 @@
1
1
  import re
2
+ from enum import Enum
2
3
  from pathlib import Path
3
4
  from typing import (
4
- TYPE_CHECKING,
5
5
  Any,
6
6
  ClassVar,
7
7
  DefaultDict,
@@ -13,6 +13,7 @@ from typing import (
13
13
  )
14
14
 
15
15
  from pydantic import Field
16
+ from typing_extensions import Literal
16
17
 
17
18
  from datamodel_code_generator.model.base import UNDEFINED, DataModelFieldBase
18
19
  from datamodel_code_generator.model.pydantic.base_model import (
@@ -28,13 +29,10 @@ from datamodel_code_generator.model.pydantic_v2.imports import IMPORT_CONFIG_DIC
28
29
  from datamodel_code_generator.reference import Reference
29
30
  from datamodel_code_generator.util import field_validator, model_validator
30
31
 
31
- if TYPE_CHECKING:
32
- from typing_extensions import Literal
33
- else:
34
- try:
35
- from typing import Literal
36
- except ImportError: # pragma: no cover
37
- from typing_extensions import Literal
32
+
33
+ class UnionMode(Enum):
34
+ smart = 'smart'
35
+ left_to_right = 'left_to_right'
38
36
 
39
37
 
40
38
  class Constraints(_Constraints):
@@ -133,6 +131,12 @@ class DataModelField(DataModelFieldV1):
133
131
  # unique_items is not supported in pydantic 2.0
134
132
  data.pop('unique_items', None)
135
133
 
134
+ if 'union_mode' in data:
135
+ if self.data_type.is_union:
136
+ data['union_mode'] = data.pop('union_mode').value
137
+ else:
138
+ data.pop('union_mode')
139
+
136
140
  # **extra is not supported in pydantic 2.0
137
141
  json_schema_extra = {
138
142
  k: v for k, v in data.items() if k not in self._DEFAULT_FIELD_KEYS
@@ -143,17 +147,9 @@ class DataModelField(DataModelFieldV1):
143
147
  data.pop(key)
144
148
 
145
149
  def _process_annotated_field_arguments(
146
- self, field_arguments: List[str]
150
+ self,
151
+ field_arguments: List[str],
147
152
  ) -> List[str]:
148
- if not self.required or self.const:
149
- if self.use_default_kwarg: # pragma: no cover
150
- return [
151
- f'default={repr(self.default)}',
152
- *field_arguments,
153
- ]
154
- else:
155
- # TODO: Allow '=' style default for v1?
156
- return [f'{repr(self.default)}', *field_arguments]
157
153
  return field_arguments
158
154
 
159
155
 
@@ -1,12 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, Any, ClassVar, Optional
3
+ from typing import Any, ClassVar, Literal, Optional
4
4
 
5
5
  from datamodel_code_generator.model.pydantic_v2.base_model import BaseModel
6
6
 
7
- if TYPE_CHECKING:
8
- from typing_extensions import Literal
9
-
10
7
 
11
8
  class RootModel(BaseModel):
12
9
  TEMPLATE_FILE_PATH: ClassVar[str] = 'pydantic_v2/RootModel.jinja2'
@@ -24,7 +24,7 @@ class {{ class_name }}({{ base_class }}):{% if comment is defined %} # {{ comme
24
24
  {%- else %}
25
25
  {{ field.name }}: {{ field.type_hint }}
26
26
  {%- endif %}
27
- {%- if (not field.required or field.data_type.is_optional or field.nullable) and not field.annotated
27
+ {%- if not (field.required or (field.represented_default == 'None' and field.strip_default_none)) or field.data_type.is_optional
28
28
  %} = {{ field.represented_default }}
29
29
  {%- endif -%}
30
30
  {%- endif %}
@@ -52,7 +52,7 @@ def type_map_factory(
52
52
  class DataTypeManager(_DataTypeManager):
53
53
  def __init__(
54
54
  self,
55
- python_version: PythonVersion = PythonVersion.PY_37,
55
+ python_version: PythonVersion = PythonVersion.PY_38,
56
56
  use_standard_collections: bool = False,
57
57
  use_generic_container_types: bool = False,
58
58
  strict_types: Optional[Sequence[StrictTypes]] = None,
@@ -342,7 +342,7 @@ class Parser(ABC):
342
342
  additional_imports: Optional[List[str]] = None,
343
343
  custom_template_dir: Optional[Path] = None,
344
344
  extra_template_data: Optional[DefaultDict[str, Dict[str, Any]]] = None,
345
- target_python_version: PythonVersion = PythonVersion.PY_37,
345
+ target_python_version: PythonVersion = PythonVersion.PY_38,
346
346
  dump_resolve_reference_action: Optional[Callable[[Iterable[str]], str]] = None,
347
347
  validation: bool = False,
348
348
  field_constraints: bool = False,
@@ -402,6 +402,7 @@ class Parser(ABC):
402
402
  http_query_parameters: Optional[Sequence[Tuple[str, str]]] = None,
403
403
  treat_dots_as_module: bool = False,
404
404
  use_exact_imports: bool = False,
405
+ default_field_extras: Optional[Dict[str, Any]] = None,
405
406
  ) -> None:
406
407
  self.data_type_manager: DataTypeManager = data_type_manager_type(
407
408
  python_version=target_python_version,
@@ -526,6 +527,7 @@ class Parser(ABC):
526
527
  self.custom_formatter = custom_formatters
527
528
  self.custom_formatters_kwargs = custom_formatters_kwargs
528
529
  self.treat_dots_as_module = treat_dots_as_module
530
+ self.default_field_extras: Optional[Dict[str, Any]] = default_field_extras
529
531
 
530
532
  @property
531
533
  def iter_source(self) -> Iterator[Source]:
@@ -98,7 +98,7 @@ class GraphQLParser(Parser):
98
98
  additional_imports: Optional[List[str]] = None,
99
99
  custom_template_dir: Optional[Path] = None,
100
100
  extra_template_data: Optional[DefaultDict[str, Dict[str, Any]]] = None,
101
- target_python_version: PythonVersion = PythonVersion.PY_37,
101
+ target_python_version: PythonVersion = PythonVersion.PY_38,
102
102
  dump_resolve_reference_action: Optional[Callable[[Iterable[str]], str]] = None,
103
103
  validation: bool = False,
104
104
  field_constraints: bool = False,
@@ -156,6 +156,7 @@ class GraphQLParser(Parser):
156
156
  http_query_parameters: Optional[Sequence[Tuple[str, str]]] = None,
157
157
  treat_dots_as_module: bool = False,
158
158
  use_exact_imports: bool = False,
159
+ default_field_extras: Optional[Dict[str, Any]] = None,
159
160
  ) -> None:
160
161
  super().__init__(
161
162
  source=source,
@@ -225,6 +226,7 @@ class GraphQLParser(Parser):
225
226
  http_query_parameters=http_query_parameters,
226
227
  treat_dots_as_module=treat_dots_as_module,
227
228
  use_exact_imports=use_exact_imports,
229
+ default_field_extras=default_field_extras,
228
230
  )
229
231
 
230
232
  self.data_model_scalar_type = data_model_scalar_type
@@ -294,6 +296,22 @@ class GraphQLParser(Parser):
294
296
  has_default=True,
295
297
  )
296
298
 
299
+ def _get_default(
300
+ self,
301
+ field: Union[graphql.GraphQLField, graphql.GraphQLInputField],
302
+ final_data_type: DataType,
303
+ required: bool,
304
+ ) -> Any:
305
+ if isinstance(field, graphql.GraphQLInputField): # pragma: no cover
306
+ if field.default_value == graphql.pyutils.Undefined: # pragma: no cover
307
+ return None
308
+ return field.default_value
309
+ if required is False:
310
+ if final_data_type.is_list:
311
+ return None
312
+
313
+ return None
314
+
297
315
  def parse_scalar(self, scalar_graphql_object: graphql.GraphQLScalarType) -> None:
298
316
  self.results.append(
299
317
  self.data_model_scalar_type(
@@ -381,22 +399,16 @@ class GraphQLParser(Parser):
381
399
  required = (not self.force_optional_for_required_fields) and (
382
400
  not final_data_type.is_optional
383
401
  )
384
- extras = {}
385
402
 
386
- if hasattr(field, 'default_value'): # pragma: no cover
387
- if field.default_value == graphql.pyutils.Undefined: # pragma: no cover
388
- default = None
389
- else: # pragma: no cover
390
- default = field.default_value
391
- else:
392
- if required is False:
393
- if final_data_type.is_list:
394
- default = 'list'
395
- extras = {'default_factory': 'list'}
396
- else:
397
- default = None
398
- else:
399
- default = None
403
+ default = self._get_default(field, final_data_type, required)
404
+ extras = (
405
+ {}
406
+ if self.default_field_extras is None
407
+ else self.default_field_extras.copy()
408
+ )
409
+
410
+ if field.description is not None: # pragma: no cover
411
+ extras['description'] = field.description
400
412
 
401
413
  return self.data_model_field_type(
402
414
  name=field_name,
@@ -407,7 +419,7 @@ class GraphQLParser(Parser):
407
419
  alias=alias,
408
420
  strip_default_none=self.strip_default_none,
409
421
  use_annotated=self.use_annotated,
410
- use_field_description=field.description is not None,
422
+ use_field_description=self.use_field_description,
411
423
  use_default_kwarg=self.use_default_kwarg,
412
424
  original_name=field_name,
413
425
  has_default=default is not None,
@@ -384,7 +384,7 @@ class JsonSchemaParser(Parser):
384
384
  additional_imports: Optional[List[str]] = None,
385
385
  custom_template_dir: Optional[Path] = None,
386
386
  extra_template_data: Optional[DefaultDict[str, Dict[str, Any]]] = None,
387
- target_python_version: PythonVersion = PythonVersion.PY_37,
387
+ target_python_version: PythonVersion = PythonVersion.PY_38,
388
388
  dump_resolve_reference_action: Optional[Callable[[Iterable[str]], str]] = None,
389
389
  validation: bool = False,
390
390
  field_constraints: bool = False,
@@ -442,6 +442,7 @@ class JsonSchemaParser(Parser):
442
442
  http_query_parameters: Optional[Sequence[Tuple[str, str]]] = None,
443
443
  treat_dots_as_module: bool = False,
444
444
  use_exact_imports: bool = False,
445
+ default_field_extras: Optional[Dict[str, Any]] = None,
445
446
  ) -> None:
446
447
  super().__init__(
447
448
  source=source,
@@ -511,6 +512,7 @@ class JsonSchemaParser(Parser):
511
512
  http_query_parameters=http_query_parameters,
512
513
  treat_dots_as_module=treat_dots_as_module,
513
514
  use_exact_imports=use_exact_imports,
515
+ default_field_extras=default_field_extras,
514
516
  )
515
517
 
516
518
  self.remote_object_cache: DefaultPutDict[str, Dict[str, Any]] = DefaultPutDict()
@@ -534,20 +536,23 @@ class JsonSchemaParser(Parser):
534
536
 
535
537
  def get_field_extras(self, obj: JsonSchemaObject) -> Dict[str, Any]:
536
538
  if self.field_include_all_keys:
537
- return {
539
+ extras = {
538
540
  self.get_field_extra_key(
539
541
  k.lstrip('x-') if k in self.field_extra_keys_without_x_prefix else k
540
542
  ): v
541
543
  for k, v in obj.extras.items()
542
544
  }
543
545
  else:
544
- return {
546
+ extras = {
545
547
  self.get_field_extra_key(
546
548
  k.lstrip('x-') if k in self.field_extra_keys_without_x_prefix else k
547
549
  ): v
548
550
  for k, v in obj.extras.items()
549
551
  if k in self.field_keys
550
552
  }
553
+ if self.default_field_extras:
554
+ extras.update(self.default_field_extras)
555
+ return extras
551
556
 
552
557
  @cached_property
553
558
  def schema_paths(self) -> List[Tuple[str, List[str]]]:
@@ -165,7 +165,7 @@ class OpenAPIParser(JsonSchemaParser):
165
165
  additional_imports: Optional[List[str]] = None,
166
166
  custom_template_dir: Optional[Path] = None,
167
167
  extra_template_data: Optional[DefaultDict[str, Dict[str, Any]]] = None,
168
- target_python_version: PythonVersion = PythonVersion.PY_37,
168
+ target_python_version: PythonVersion = PythonVersion.PY_38,
169
169
  dump_resolve_reference_action: Optional[Callable[[Iterable[str]], str]] = None,
170
170
  validation: bool = False,
171
171
  field_constraints: bool = False,
@@ -224,6 +224,7 @@ class OpenAPIParser(JsonSchemaParser):
224
224
  http_query_parameters: Optional[Sequence[Tuple[str, str]]] = None,
225
225
  treat_dots_as_module: bool = False,
226
226
  use_exact_imports: bool = False,
227
+ default_field_extras: Optional[Dict[str, Any]] = None,
227
228
  ):
228
229
  super().__init__(
229
230
  source=source,
@@ -293,6 +294,7 @@ class OpenAPIParser(JsonSchemaParser):
293
294
  http_query_parameters=http_query_parameters,
294
295
  treat_dots_as_module=treat_dots_as_module,
295
296
  use_exact_imports=use_exact_imports,
297
+ default_field_extras=default_field_extras,
296
298
  )
297
299
  self.open_api_scopes: List[OpenAPIScope] = openapi_scopes or [
298
300
  OpenAPIScope.Schemas
@@ -17,5 +17,6 @@ def patched_evaluate_forwardref(
17
17
  )
18
18
 
19
19
 
20
- if '3.12' in sys.version: # pragma: no cover
20
+ # Patch only Python3.12
21
+ if sys.version_info >= (3, 12):
21
22
  pydantic.typing.evaluate_forwardref = patched_evaluate_forwardref
@@ -261,7 +261,7 @@ class DataType(_BaseModel):
261
261
  is_func: bool = False
262
262
  kwargs: Optional[Dict[str, Any]] = None
263
263
  import_: Optional[Import] = None
264
- python_version: PythonVersion = PythonVersion.PY_37
264
+ python_version: PythonVersion = PythonVersion.PY_38
265
265
  is_optional: bool = False
266
266
  is_dict: bool = False
267
267
  is_list: bool = False
@@ -567,7 +567,7 @@ class Types(Enum):
567
567
  class DataTypeManager(ABC):
568
568
  def __init__(
569
569
  self,
570
- python_version: PythonVersion = PythonVersion.PY_37,
570
+ python_version: PythonVersion = PythonVersion.PY_38,
571
571
  use_standard_collections: bool = False,
572
572
  use_generic_container_types: bool = False,
573
573
  strict_types: Optional[Sequence[StrictTypes]] = None,
@@ -1,8 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import copy
4
+ from functools import cached_property # noqa: F401
4
5
  from pathlib import Path
5
- from typing import TYPE_CHECKING, Any, Callable, Dict, TypeVar
6
+ from typing import ( # noqa: F401
7
+ TYPE_CHECKING,
8
+ Any,
9
+ Callable,
10
+ Dict,
11
+ Protocol,
12
+ TypeVar,
13
+ runtime_checkable,
14
+ )
6
15
 
7
16
  import pydantic
8
17
  from packaging import version
@@ -15,46 +24,18 @@ PYDANTIC_VERSION = version.parse(
15
24
  PYDANTIC_V2: bool = PYDANTIC_VERSION >= version.parse('2.0b3')
16
25
 
17
26
  if TYPE_CHECKING:
18
- cached_property = property
19
- from yaml import SafeLoader
20
-
21
- Protocol = object
22
- runtime_checkable: Callable[..., Any]
27
+ from typing import Literal
23
28
 
24
- from typing_extensions import Literal
29
+ from yaml import SafeLoader
25
30
 
26
31
  def load_toml(path: Path) -> Dict[str, Any]: ...
27
32
 
28
33
  else:
29
- try:
30
- from typing import Protocol
31
- except ImportError:
32
- from typing_extensions import Protocol # noqa
33
- try:
34
- from typing import runtime_checkable
35
- except ImportError:
36
- from typing_extensions import runtime_checkable # noqa
37
34
  try:
38
35
  from yaml import CSafeLoader as SafeLoader
39
36
  except ImportError: # pragma: no cover
40
37
  from yaml import SafeLoader
41
38
 
42
- try:
43
- from functools import cached_property
44
- except ImportError:
45
- _NOT_FOUND = object()
46
-
47
- class cached_property:
48
- def __init__(self, func: Callable) -> None:
49
- self.func: Callable = func
50
- self.__doc__: Any = func.__doc__
51
-
52
- def __get__(self, instance: Any, owner: Any = None) -> Any:
53
- value = instance.__dict__.get(self.func.__name__, _NOT_FOUND)
54
- if value is _NOT_FOUND: # pragma: no cover
55
- value = instance.__dict__[self.func.__name__] = self.func(instance)
56
- return value
57
-
58
39
  try:
59
40
  import tomllib
60
41
 
@@ -1 +1 @@
1
- version: str = '0.25.9'
1
+ version: str = '0.26.0'
@@ -1,17 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datamodel-code-generator
3
- Version: 0.25.9
3
+ Version: 0.26.0
4
4
  Summary: Datamodel Code Generator
5
5
  Home-page: https://github.com/koxudaxi/datamodel-code-generator
6
6
  License: MIT
7
7
  Author: Koudai Aono
8
8
  Author-email: koxudaxi@gmail.com
9
- Requires-Python: >=3.7,<4.0
9
+ Requires-Python: >=3.8,<4.0
10
10
  Classifier: Development Status :: 4 - Beta
11
11
  Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Natural Language :: English
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.7
15
14
  Classifier: Programming Language :: Python :: 3.8
16
15
  Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
@@ -386,61 +385,64 @@ This method needs the [http extra option](#http-extra-option)
386
385
 
387
386
  The `datamodel-codegen` command:
388
387
 
388
+ <!-- start command help -->
389
389
  ```bash
390
- usage:
390
+ usage:
391
391
  datamodel-codegen [options]
392
392
 
393
393
  Generate Python data models from schema definitions or structured data
394
394
 
395
395
  Options:
396
+ --additional-imports ADDITIONAL_IMPORTS
397
+ Custom imports for output (delimited list input). For example
398
+ "datetime.date,datetime.datetime"
399
+ --custom-formatters CUSTOM_FORMATTERS
400
+ List of modules with custom formatter (delimited list input).
396
401
  --http-headers HTTP_HEADER [HTTP_HEADER ...]
397
- Set headers in HTTP requests to the remote host.
398
- (example: "Authorization: Basic dXNlcjpwYXNz")
399
- --http-ignore-tls Disable verification of the remote host''s TLS
400
- certificate
401
- --http-query-parameters QUERY_PARAMETER [QUERY_PARAMETER ...]
402
- Set query parameters in HTTP requests to the remote host.
403
- (example: "ref=branch")
402
+ Set headers in HTTP requests to the remote host. (example:
403
+ "Authorization: Basic dXNlcjpwYXNz")
404
+ --http-ignore-tls Disable verification of the remote host''s TLS certificate
405
+ --http-query-parameters HTTP_QUERY_PARAMETERS [HTTP_QUERY_PARAMETERS ...]
406
+ Set query parameters in HTTP requests to the remote host. (example:
407
+ "ref=branch")
404
408
  --input INPUT Input file/directory (default: stdin)
405
- --input-file-type {auto,openapi,graphql,jsonschema,json,yaml,dict,csv}
409
+ --input-file-type {auto,openapi,jsonschema,json,yaml,dict,csv,graphql}
406
410
  Input file type (default: auto)
407
411
  --output OUTPUT Output file (default: stdout)
408
412
  --output-model-type {pydantic.BaseModel,pydantic_v2.BaseModel,dataclasses.dataclass,typing.TypedDict,msgspec.Struct}
409
- --url URL Input file URL. `--input` is ignored when `--url` is
410
- used
413
+ Output model type (default: pydantic.BaseModel)
414
+ --url URL Input file URL. `--input` is ignored when `--url` is used
411
415
 
412
416
  Typing customization:
413
417
  --base-class BASE_CLASS
414
418
  Base Class (default: pydantic.BaseModel)
415
419
  --enum-field-as-literal {all,one}
416
- Parse enum field as literal. all: all enum field type
417
- are Literal. one: field type is Literal when an enum
418
- has only one possible value
420
+ Parse enum field as literal. all: all enum field type are Literal.
421
+ one: field type is Literal when an enum has only one possible value
419
422
  --field-constraints Use field constraints and not con* annotations
420
423
  --set-default-enum-member
421
424
  Set enum members as default values for enum field
422
425
  --strict-types {str,bytes,int,float,bool} [{str,bytes,int,float,bool} ...]
423
426
  Use strict types
424
- --use-annotated Use typing.Annotated for Field(). Also, `--field-
425
- constraints` option will be enabled.
427
+ --use-annotated Use typing.Annotated for Field(). Also, `--field-constraints` option
428
+ will be enabled.
426
429
  --use-generic-container-types
427
- Use generic container types for type hinting
428
- (typing.Sequence, typing.Mapping). If `--use-standard-
429
- collections` option is set, then import from
430
- collections.abc instead of typing
430
+ Use generic container types for type hinting (typing.Sequence,
431
+ typing.Mapping). If `--use-standard-collections` option is set, then
432
+ import from collections.abc instead of typing
431
433
  --use-non-positive-negative-number-constrained-types
432
- Use the Non{Positive,Negative}{FloatInt} types instead
433
- of the corresponding con* constrained types.
434
+ Use the Non{Positive,Negative}{FloatInt} types instead of the
435
+ corresponding con* constrained types.
434
436
  --use-one-literal-as-default
435
437
  Use one literal as default value for one literal field
436
438
  --use-standard-collections
437
439
  Use standard collections for type hinting (list, dict)
438
- --use-subclass-enum Define Enum class as subclass with field type when
439
- enum has type (int, float, bytes, str)
440
+ --use-subclass-enum Define Enum class as subclass with field type when enum has type
441
+ (int, float, bytes, str)
440
442
  --use-union-operator Use | operator for Union type (PEP 604).
441
443
  --use-unique-items-as-set
442
- define field type as `set` when the field attribute
443
- has `uniqueItems`
444
+ define field type as `set` when the field attribute has
445
+ `uniqueItems`
444
446
 
445
447
  Field customization:
446
448
  --capitalise-enum-members, --capitalize-enum-members
@@ -450,61 +452,60 @@ Field customization:
450
452
  --field-extra-keys FIELD_EXTRA_KEYS [FIELD_EXTRA_KEYS ...]
451
453
  Add extra keys to field parameters
452
454
  --field-extra-keys-without-x-prefix FIELD_EXTRA_KEYS_WITHOUT_X_PREFIX [FIELD_EXTRA_KEYS_WITHOUT_X_PREFIX ...]
453
- Add extra keys with `x-` prefix to field parameters.
454
- The extra keys are stripped of the `x-` prefix.
455
+ Add extra keys with `x-` prefix to field parameters. The extra keys
456
+ are stripped of the `x-` prefix.
455
457
  --field-include-all-keys
456
458
  Add all keys to field parameters
457
459
  --force-optional Force optional for required fields
458
460
  --original-field-name-delimiter ORIGINAL_FIELD_NAME_DELIMITER
459
- Set delimiter to convert to snake case. This option
460
- only can be used with --snake-case-field (default: `_`
461
- )
461
+ Set delimiter to convert to snake case. This option only can be used
462
+ with --snake-case-field (default: `_` )
462
463
  --remove-special-field-name-prefix
463
- Remove field name prefix if it has a special meaning
464
- e.g. underscores
464
+ Remove field name prefix if it has a special meaning e.g.
465
+ underscores
465
466
  --snake-case-field Change camel-case field name to snake-case
466
467
  --special-field-name-prefix SPECIAL_FIELD_NAME_PREFIX
467
- Set field name prefix when first character can''t be
468
- used as Python field name (default: `field`)
468
+ Set field name prefix when first character can''t be used as Python
469
+ field name (default: `field`)
469
470
  --strip-default-none Strip default None on fields
471
+ --union-mode {smart,left_to_right}
472
+ Union mode for only pydantic v2 field
470
473
  --use-default Use default value even if a field is required
471
- --use-default-kwarg Use `default=` instead of a positional argument for
472
- Fields that have default values.
474
+ --use-default-kwarg Use `default=` instead of a positional argument for Fields that have
475
+ default values.
473
476
  --use-field-description
474
477
  Use schema description to populate field docstring
475
- --use-pendulum
476
- Use pendulum instead of `datetime` for `date`,
477
- `datetime`, and `time` data types
478
478
 
479
479
  Model customization:
480
- --allow-extra-fields Allow to pass extra fields, if this flag is not
481
- passed, extra fields are forbidden.
480
+ --allow-extra-fields Allow to pass extra fields, if this flag is not passed, extra fields
481
+ are forbidden.
482
482
  --allow-population-by-field-name
483
483
  Allow population by field name
484
484
  --class-name CLASS_NAME
485
485
  Set class name of root model
486
486
  --collapse-root-models
487
- Models generated with a root-type field will be
488
- merged into the models using that root-type model
487
+ Models generated with a root-type field will be merged into the
488
+ models using that root-type model
489
489
  --disable-appending-item-suffix
490
- Disable appending `Item` suffix to model name in an
491
- array
490
+ Disable appending `Item` suffix to model name in an array
492
491
  --disable-timestamp Disable timestamp on file headers
493
492
  --enable-faux-immutability
494
493
  Enable faux immutability
495
494
  --enable-version-header
496
495
  Enable package version on file headers
497
496
  --keep-model-order Keep generated models'' order
498
- --reuse-model Reuse models on the field when a module has the model
499
- with the same content
500
- --target-python-version {3.6,3.7,3.8,3.9,3.10,3.11}
501
- target python version (default: 3.7)
497
+ --reuse-model Reuse models on the field when a module has the model with the same
498
+ content
499
+ --target-python-version {3.6,3.7,3.8,3.9,3.10,3.11,3.12}
500
+ target python version (default: 3.8)
501
+ --treat-dot-as-module
502
+ treat dotted module names as modules
503
+ --use-exact-imports import exact types instead of modules, for example: "from .foo
504
+ import Bar" instead of "from . import foo" with "foo.Bar"
505
+ --use-pendulum use pendulum instead of datetime
502
506
  --use-schema-description
503
507
  Use schema description to populate class docstring
504
508
  --use-title-as-name use titles as class names of models
505
- --use-exact-imports Import exact types instead of modules, for example:
506
- `from .foo import Bar` instead of
507
- `from . import foo` with `foo.Bar`
508
509
 
509
510
  Template customization:
510
511
  --aliases ALIASES Alias mapping file
@@ -512,41 +513,38 @@ Template customization:
512
513
  Custom file header
513
514
  --custom-file-header-path CUSTOM_FILE_HEADER_PATH
514
515
  Custom file header file path
516
+ --custom-formatters-kwargs CUSTOM_FORMATTERS_KWARGS
517
+ A file with kwargs for custom formatters.
515
518
  --custom-template-dir CUSTOM_TEMPLATE_DIR
516
519
  Custom template directory
517
- --encoding ENCODING The encoding of input and output (default: UTF-8)
520
+ --encoding ENCODING The encoding of input and output (default: utf-8)
518
521
  --extra-template-data EXTRA_TEMPLATE_DATA
519
522
  Extra template data
520
- --use-double-quotes Model generated with double quotes. Single quotes or
521
- your black config skip_string_normalization value will
522
- be used without this option.
523
+ --use-double-quotes Model generated with double quotes. Single quotes or your black
524
+ config skip_string_normalization value will be used without this
525
+ option.
523
526
  --wrap-string-literal
524
- Wrap string literal by using black `experimental-
525
- string-processing` option (require black 20.8b0 or
526
- later)
527
- --additional-imports Custom imports for output (delimited list input).
528
- For example "datetime.date,datetime.datetime"
529
- --custom-formatters List of modules with custom formatter (delimited list input).
530
- --custom-formatters-kwargs A file with kwargs for custom formatters.
527
+ Wrap string literal by using black `experimental-string-processing`
528
+ option (require black 20.8b0 or later)
531
529
 
532
530
  OpenAPI-only options:
533
531
  --openapi-scopes {schemas,paths,tags,parameters} [{schemas,paths,tags,parameters} ...]
534
532
  Scopes of OpenAPI model generation (default: schemas)
535
- --strict-nullable Treat default field as a non-nullable field (Only
536
- OpenAPI)
533
+ --strict-nullable Treat default field as a non-nullable field (Only OpenAPI)
537
534
  --use-operation-id-as-name
538
535
  use operation id of OpenAPI as class names of models
539
- --validation Deprecated: Enable validation (Only OpenAPI). this
540
- option is deprecated. it will be removed in future
541
- releases
536
+ --validation Deprecated: Enable validation (Only OpenAPI). this option is
537
+ deprecated. it will be removed in future releases
542
538
 
543
539
  General options:
544
- --debug show debug message (require "debug". `$ pip install 'datamodel-code-generator[debug]'`)
540
+ --debug show debug message (require "debug". `$ pip install ''datamodel-code-
541
+ generator[debug]''`)
545
542
  --disable-warnings disable warnings
546
543
  --no-color disable colorized output
547
544
  --version show version
548
545
  -h, --help show this help message and exit
549
546
  ```
547
+ <!-- end command help -->
550
548
 
551
549
  ## Related projects
552
550
  ### fastapi-code-generator
@@ -1,7 +1,7 @@
1
- datamodel_code_generator/__init__.py,sha256=nCulaRL1TE7CM_1ugD6QoijWwRStbYDp5_ncwv0UYEQ,18185
2
- datamodel_code_generator/__main__.py,sha256=qk-vOZKHdNGWO58xPH8jG4arkmKT0wIPCIRjDwbguRg,19595
3
- datamodel_code_generator/arguments.py,sha256=uLSXdRCfa5To1OW69RblOS4UWYzFqjGX9PQgOWEnc5c,15335
4
- datamodel_code_generator/format.py,sha256=yTSOf3-jUO4X5NOljAjm-4xYC_uBJV3-RLXUYIvw-yw,8595
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
5
5
  datamodel_code_generator/http.py,sha256=CwLVnXO4_W_fWKJsHnJp6Q_3GuF3qjCjeAe48Ihawrs,714
6
6
  datamodel_code_generator/imports.py,sha256=EUUgdLMD_724Jhp50-hQy2C6uMSQISGbJKhUfH3iIbo,5595
7
7
  datamodel_code_generator/model/__init__.py,sha256=A0CqnL87-lY_Te-n-99ya5v7h6l4jE6hOPP_itvcWOc,3091
@@ -15,11 +15,11 @@ datamodel_code_generator/model/pydantic/base_model.py,sha256=Y2GSlcLBvQh8hrlwGE3
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=GDh1KRforpUIj58TSLSqrbKRnXi8O1qfHT8NaoUYvME,13034
19
- datamodel_code_generator/model/pydantic_v2/__init__.py,sha256=6IcvuP18MzTf3b6edPz6q1sIxzjuvmXbceQfPgkz25Q,947
20
- datamodel_code_generator/model/pydantic_v2/base_model.py,sha256=jaRPrnrc0UpcWeI7GjPjJomkh9Q9Ej6J9iEOyVq0IGM,8209
18
+ datamodel_code_generator/model/pydantic/types.py,sha256=2ghckIyBX-QmFT1GAAjKuCLyD5hjpNqmRftOlgcS5Fo,13034
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
21
  datamodel_code_generator/model/pydantic_v2/imports.py,sha256=Q6XC6iE5v4LJvQ2DOXDGFtR-FnGPsaZ56KiiTiF2bIE,191
22
- datamodel_code_generator/model/pydantic_v2/root_model.py,sha256=ZlaNHfC8PuLJ1--OYm9AXbL1A95z1F421VoraP3mo70,951
22
+ datamodel_code_generator/model/pydantic_v2/root_model.py,sha256=iApUz1uGe4hHV8RyOK8rGjaEJcnqTJZqo-0uSfyVMGc,884
23
23
  datamodel_code_generator/model/pydantic_v2/types.py,sha256=6KAJXO_SGs5bc8GQScCpowgqjaSmrn9W9iewpWIHack,1440
24
24
  datamodel_code_generator/model/rootmodel.py,sha256=8bW7emVQtDGe2iUAmqtlQb607LvTRL0TBSP66pIeNzY,202
25
25
  datamodel_code_generator/model/scalar.py,sha256=d4vqDW9OcvPR1I0lrlss2wDprWbUt9kPv767VYZi_Ks,2521
@@ -35,26 +35,26 @@ datamodel_code_generator/model/template/pydantic/BaseModel.jinja2,sha256=sYZa-47
35
35
  datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2,sha256=WDdTXYNTrkIw-B4OvPVxOaETTknLs0zdNuq_iDQ2Bcw,1000
36
36
  datamodel_code_generator/model/template/pydantic/Config.jinja2,sha256=Ik028qdqQhDfEP207TCbwVv2b5Do1-nRNDPKzBHKzwM,135
37
37
  datamodel_code_generator/model/template/pydantic/dataclass.jinja2,sha256=hM4OZTVhtOokqlPNSdh5drhBXfQLPvbyO88jipSPr5Y,629
38
- datamodel_code_generator/model/template/pydantic_v2/BaseModel.jinja2,sha256=6Swz3U3vYFGnTFY85SGTmsNUflcJI61oxdz2CgPKaDk,1091
38
+ datamodel_code_generator/model/template/pydantic_v2/BaseModel.jinja2,sha256=XdSCvA0hSdjkMtI9CA3M-2xBgieCOV-sWIfQvJPnJ4I,1119
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
42
  datamodel_code_generator/model/typed_dict.py,sha256=pzUaKLaVDF5rfxAaR1m4FqnhR00eE6AIP30oGTj67fY,4717
43
- datamodel_code_generator/model/types.py,sha256=Ti3cEtRQpBYgC4Y5ocAn6Ol-ZbnKG_P7C0nHBX9KtV8,2953
43
+ datamodel_code_generator/model/types.py,sha256=7YQqPc-_yf5LhrLomB4msyOB_1cn0kKxfDHmGfVvDmA,2953
44
44
  datamodel_code_generator/model/union.py,sha256=loaVWQi-UHkV4gLfF2JhxLcgZRMsejaoJzGvjTlp_bo,1716
45
45
  datamodel_code_generator/parser/__init__.py,sha256=zHbw6RPlJC0SAQjb-XyVlyZhcOu5PfYgPidy6jlUM8M,793
46
- datamodel_code_generator/parser/base.py,sha256=oFldzX2Qg3n7vEHzvd7QiJRuCgTg1zyyZKLySja1pac,59679
47
- datamodel_code_generator/parser/graphql.py,sha256=0LF2wOqVMCKQlNKih8px3SN1iMzGgIf4d9TT58xOuAQ,21639
48
- datamodel_code_generator/parser/jsonschema.py,sha256=RrPrZvegLvh2jFlXwT9zXA1MdUyWCsMMO8az5STB4UA,69987
49
- datamodel_code_generator/parser/openapi.py,sha256=zCQr12pRE78PSRWhwE7a-2_IaqtC8y0ukMkipJAJYi8,25812
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
50
50
  datamodel_code_generator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- datamodel_code_generator/pydantic_patch.py,sha256=XDVGIvMFrJKZmp5Zk74Id2YQeizIZ8B2WqCdUR_CB6U,560
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=Dadq241BMGcG3U23ZEsDTf3eUbuEr2K_8jxovKpWcGw,19631
54
- datamodel_code_generator/util.py,sha256=Lrjj20mmma4Glpfs42sCoGpt1cncalgUGyNZZviqWdU,3692
55
- datamodel_code_generator/version.py,sha256=HM5IyJUGiVaohscoua19eQW54vpGj8ZoKuKvZkXX8GY,24
56
- datamodel_code_generator-0.25.9.dist-info/LICENSE,sha256=K54Lwc6_jduycsy8oFFjQEeSSuEiqvVIjCGIXOMnuTQ,1068
57
- datamodel_code_generator-0.25.9.dist-info/METADATA,sha256=37duhcTb2YAa6u6tU5pMNWbUsl3BueJN-TRlpGLMs1M,24216
58
- datamodel_code_generator-0.25.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
59
- datamodel_code_generator-0.25.9.dist-info/entry_points.txt,sha256=bykbUWqOCiKfxJPGe8jpNqTqD1NG7uyRmozdnwzu7rk,76
60
- datamodel_code_generator-0.25.9.dist-info/RECORD,,
53
+ datamodel_code_generator/types.py,sha256=lVKp5TsW-8DK81jQMGUqEANr8DcI2kjdqA1VciITDAI,19631
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,,