datamodel-code-generator 0.25.8__tar.gz → 0.25.9__tar.gz

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 (60) hide show
  1. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/PKG-INFO +5 -5
  2. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/README.md +4 -4
  3. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/__main__.py +0 -4
  4. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/arguments.py +1 -1
  5. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/parser/base.py +59 -21
  6. datamodel_code_generator-0.25.9/datamodel_code_generator/version.py +1 -0
  7. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/pyproject.toml +2 -2
  8. datamodel_code_generator-0.25.8/datamodel_code_generator/version.py +0 -1
  9. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/LICENSE +0 -0
  10. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/__init__.py +0 -0
  11. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/format.py +0 -0
  12. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/http.py +0 -0
  13. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/imports.py +0 -0
  14. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/__init__.py +0 -0
  15. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/base.py +0 -0
  16. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/dataclass.py +0 -0
  17. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/enum.py +0 -0
  18. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/imports.py +0 -0
  19. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/msgspec.py +0 -0
  20. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic/__init__.py +0 -0
  21. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic/base_model.py +0 -0
  22. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic/custom_root_type.py +0 -0
  23. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic/dataclass.py +0 -0
  24. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic/imports.py +0 -0
  25. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic/types.py +0 -0
  26. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic_v2/__init__.py +0 -0
  27. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic_v2/base_model.py +0 -0
  28. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic_v2/imports.py +0 -0
  29. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic_v2/root_model.py +0 -0
  30. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/pydantic_v2/types.py +0 -0
  31. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/rootmodel.py +0 -0
  32. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/scalar.py +0 -0
  33. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/Enum.jinja2 +0 -0
  34. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/Scalar.jinja2 +0 -0
  35. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/TypedDict.jinja2 +0 -0
  36. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/TypedDictClass.jinja2 +0 -0
  37. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/TypedDictFunction.jinja2 +0 -0
  38. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/Union.jinja2 +0 -0
  39. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/dataclass.jinja2 +0 -0
  40. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/msgspec.jinja2 +0 -0
  41. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/pydantic/BaseModel.jinja2 +0 -0
  42. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2 +0 -0
  43. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/pydantic/Config.jinja2 +0 -0
  44. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/pydantic/dataclass.jinja2 +0 -0
  45. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/pydantic_v2/BaseModel.jinja2 +0 -0
  46. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/pydantic_v2/ConfigDict.jinja2 +0 -0
  47. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2 +0 -0
  48. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/template/root.jinja2 +0 -0
  49. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/typed_dict.py +0 -0
  50. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/types.py +0 -0
  51. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/model/union.py +0 -0
  52. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/parser/__init__.py +0 -0
  53. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/parser/graphql.py +0 -0
  54. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/parser/jsonschema.py +0 -0
  55. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/parser/openapi.py +0 -0
  56. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/py.typed +0 -0
  57. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/pydantic_patch.py +0 -0
  58. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/reference.py +0 -0
  59. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/types.py +0 -0
  60. {datamodel_code_generator-0.25.8 → datamodel_code_generator-0.25.9}/datamodel_code_generator/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datamodel-code-generator
3
- Version: 0.25.8
3
+ Version: 0.25.9
4
4
  Summary: Datamodel Code Generator
5
5
  Home-page: https://github.com/koxudaxi/datamodel-code-generator
6
6
  License: MIT
@@ -396,7 +396,7 @@ Options:
396
396
  --http-headers HTTP_HEADER [HTTP_HEADER ...]
397
397
  Set headers in HTTP requests to the remote host.
398
398
  (example: "Authorization: Basic dXNlcjpwYXNz")
399
- --http-ignore-tls Disable verification of the remote host's TLS
399
+ --http-ignore-tls Disable verification of the remote host''s TLS
400
400
  certificate
401
401
  --http-query-parameters QUERY_PARAMETER [QUERY_PARAMETER ...]
402
402
  Set query parameters in HTTP requests to the remote host.
@@ -464,7 +464,7 @@ Field customization:
464
464
  e.g. underscores
465
465
  --snake-case-field Change camel-case field name to snake-case
466
466
  --special-field-name-prefix SPECIAL_FIELD_NAME_PREFIX
467
- Set field name prefix when first character can't be
467
+ Set field name prefix when first character can''t be
468
468
  used as Python field name (default: `field`)
469
469
  --strip-default-none Strip default None on fields
470
470
  --use-default Use default value even if a field is required
@@ -485,7 +485,7 @@ Model customization:
485
485
  Set class name of root model
486
486
  --collapse-root-models
487
487
  Models generated with a root-type field will be
488
- mergedinto the models using that root-type model
488
+ merged into the models using that root-type model
489
489
  --disable-appending-item-suffix
490
490
  Disable appending `Item` suffix to model name in an
491
491
  array
@@ -494,7 +494,7 @@ Model customization:
494
494
  Enable faux immutability
495
495
  --enable-version-header
496
496
  Enable package version on file headers
497
- --keep-model-order Keep generated models' order
497
+ --keep-model-order Keep generated models'' order
498
498
  --reuse-model Reuse models on the field when a module has the model
499
499
  with the same content
500
500
  --target-python-version {3.6,3.7,3.8,3.9,3.10,3.11}
@@ -351,7 +351,7 @@ Options:
351
351
  --http-headers HTTP_HEADER [HTTP_HEADER ...]
352
352
  Set headers in HTTP requests to the remote host.
353
353
  (example: "Authorization: Basic dXNlcjpwYXNz")
354
- --http-ignore-tls Disable verification of the remote host's TLS
354
+ --http-ignore-tls Disable verification of the remote host''s TLS
355
355
  certificate
356
356
  --http-query-parameters QUERY_PARAMETER [QUERY_PARAMETER ...]
357
357
  Set query parameters in HTTP requests to the remote host.
@@ -419,7 +419,7 @@ Field customization:
419
419
  e.g. underscores
420
420
  --snake-case-field Change camel-case field name to snake-case
421
421
  --special-field-name-prefix SPECIAL_FIELD_NAME_PREFIX
422
- Set field name prefix when first character can't be
422
+ Set field name prefix when first character can''t be
423
423
  used as Python field name (default: `field`)
424
424
  --strip-default-none Strip default None on fields
425
425
  --use-default Use default value even if a field is required
@@ -440,7 +440,7 @@ Model customization:
440
440
  Set class name of root model
441
441
  --collapse-root-models
442
442
  Models generated with a root-type field will be
443
- mergedinto the models using that root-type model
443
+ merged into the models using that root-type model
444
444
  --disable-appending-item-suffix
445
445
  Disable appending `Item` suffix to model name in an
446
446
  array
@@ -449,7 +449,7 @@ Model customization:
449
449
  Enable faux immutability
450
450
  --enable-version-header
451
451
  Enable package version on file headers
452
- --keep-model-order Keep generated models' order
452
+ --keep-model-order Keep generated models'' order
453
453
  --reuse-model Reuse models on the field when a module has the model
454
454
  with the same content
455
455
  --target-python-version {3.6,3.7,3.8,3.9,3.10,3.11}
@@ -218,16 +218,12 @@ class Config(BaseModel):
218
218
  def validate_additional_imports(cls, values: Dict[str, Any]) -> Dict[str, Any]:
219
219
  if values.get('additional_imports') is not None:
220
220
  values['additional_imports'] = values.get('additional_imports').split(',')
221
- else:
222
- values['additional_imports'] = []
223
221
  return values
224
222
 
225
223
  @model_validator(mode='before')
226
224
  def validate_custom_formatters(cls, values: Dict[str, Any]) -> Dict[str, Any]:
227
225
  if values.get('custom_formatters') is not None:
228
226
  values['custom_formatters'] = values.get('custom_formatters').split(',')
229
- else:
230
- values['custom_formatters'] = []
231
227
  return values
232
228
 
233
229
  if PYDANTIC_V2:
@@ -116,7 +116,7 @@ model_options.add_argument(
116
116
  '--collapse-root-models',
117
117
  action='store_true',
118
118
  default=None,
119
- help='Models generated with a root-type field will be merged'
119
+ help='Models generated with a root-type field will be merged '
120
120
  'into the models using that root-type model',
121
121
  )
122
122
  model_options.add_argument(
@@ -556,6 +556,8 @@ class Parser(ABC):
556
556
  additional_imports = []
557
557
 
558
558
  for additional_import_string in additional_imports:
559
+ if additional_import_string is None:
560
+ continue
559
561
  new_import = Import.from_full_path(additional_import_string)
560
562
  self.imports.append(new_import)
561
563
 
@@ -664,7 +666,7 @@ class Parser(ABC):
664
666
  for model in models:
665
667
  class_name: str = model.class_name
666
668
  generated_name: str = scoped_model_resolver.add(
667
- model.path, class_name, unique=True, class_name=True
669
+ [model.path], class_name, unique=True, class_name=True
668
670
  ).name
669
671
  if class_name != generated_name:
670
672
  model.class_name = generated_name
@@ -686,7 +688,7 @@ class Parser(ABC):
686
688
  init: bool,
687
689
  ) -> None:
688
690
  for model in models:
689
- scoped_model_resolver.add(model.path, model.class_name)
691
+ scoped_model_resolver.add([model.path], model.class_name)
690
692
  for model in models:
691
693
  before_import = model.imports
692
694
  imports.append(before_import)
@@ -958,7 +960,11 @@ class Parser(ABC):
958
960
  models.remove(duplicate)
959
961
 
960
962
  def __collapse_root_models(
961
- self, models: List[DataModel], unused_models: List[DataModel], imports: Imports
963
+ self,
964
+ models: List[DataModel],
965
+ unused_models: List[DataModel],
966
+ imports: Imports,
967
+ scoped_model_resolver: ModelResolver,
962
968
  ) -> None:
963
969
  if not self.collapse_root_models:
964
970
  return None
@@ -1033,6 +1039,31 @@ class Parser(ABC):
1033
1039
  ]
1034
1040
  else: # pragma: no cover
1035
1041
  continue
1042
+
1043
+ for d in root_type_field.data_type.data_types:
1044
+ if d.reference is None:
1045
+ continue
1046
+ from_, import_ = full_path = relative(
1047
+ model.module_name, d.full_name
1048
+ )
1049
+ if from_ and import_:
1050
+ alias = scoped_model_resolver.add(full_path, import_)
1051
+ d.alias = (
1052
+ alias.name
1053
+ if d.reference.short_name == import_
1054
+ else f'{alias.name}.{d.reference.short_name}'
1055
+ )
1056
+ imports.append(
1057
+ [
1058
+ Import(
1059
+ from_=from_,
1060
+ import_=import_,
1061
+ alias=alias.name,
1062
+ reference_path=d.reference.path,
1063
+ )
1064
+ ]
1065
+ )
1066
+
1036
1067
  original_field = get_most_of_parent(data_type, DataModelFieldBase)
1037
1068
  if original_field: # pragma: no cover
1038
1069
  # TODO: Improve detection of reference type
@@ -1261,9 +1292,12 @@ class Parser(ABC):
1261
1292
  def module_key(data_model: DataModel) -> Tuple[str, ...]:
1262
1293
  return tuple(data_model.module_path)
1263
1294
 
1295
+ def sort_key(data_model: DataModel) -> Tuple[int, Tuple[str, ...]]:
1296
+ return (len(data_model.module_path), tuple(data_model.module_path))
1297
+
1264
1298
  # process in reverse order to correctly establish module levels
1265
1299
  grouped_models = groupby(
1266
- sorted(sorted_data_models.values(), key=module_key, reverse=True),
1300
+ sorted(sorted_data_models.values(), key=sort_key, reverse=True),
1267
1301
  key=module_key,
1268
1302
  )
1269
1303
 
@@ -1329,7 +1363,9 @@ class Parser(ABC):
1329
1363
  self.__extract_inherited_enum(models)
1330
1364
  self.__set_reference_default_value_to_field(models)
1331
1365
  self.__reuse_model(models, require_update_action_models)
1332
- self.__collapse_root_models(models, unused_models, imports)
1366
+ self.__collapse_root_models(
1367
+ models, unused_models, imports, scoped_model_resolver
1368
+ )
1333
1369
  self.__set_default_enum_member(models)
1334
1370
  self.__sort_models(models, imports)
1335
1371
  self.__set_one_literal_on_default(models)
@@ -1368,22 +1404,24 @@ class Parser(ABC):
1368
1404
 
1369
1405
  for module, models, init, imports, scoped_model_resolver in processed_models:
1370
1406
  result: List[str] = []
1371
- if with_import:
1372
- result += [str(self.imports), str(imports), '\n']
1373
-
1374
- code = dump_templates(models)
1375
- result += [code]
1376
-
1377
- if self.dump_resolve_reference_action is not None:
1378
- result += [
1379
- '\n',
1380
- self.dump_resolve_reference_action(
1381
- m.reference.short_name
1382
- for m in models
1383
- if m.path in require_update_action_models
1384
- ),
1385
- ]
1386
-
1407
+ if models:
1408
+ if with_import:
1409
+ result += [str(self.imports), str(imports), '\n']
1410
+
1411
+ code = dump_templates(models)
1412
+ result += [code]
1413
+
1414
+ if self.dump_resolve_reference_action is not None:
1415
+ result += [
1416
+ '\n',
1417
+ self.dump_resolve_reference_action(
1418
+ m.reference.short_name
1419
+ for m in models
1420
+ if m.path in require_update_action_models
1421
+ ),
1422
+ ]
1423
+ if not result and not init:
1424
+ continue
1387
1425
  body = '\n'.join(result)
1388
1426
  if code_formatter:
1389
1427
  body = code_formatter.format_code(body)
@@ -0,0 +1 @@
1
+ version: str = '0.25.9'
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "datamodel-code-generator"
3
- version = "0.25.8"
3
+ version = "0.25.9"
4
4
  description = "Datamodel Code Generator"
5
5
  authors = ["Koudai Aono <koxudaxi@gmail.com>"]
6
6
  readme = "README.md"
@@ -78,7 +78,7 @@ types-setuptools = ">=67.6.0.5,<70.0.0.0"
78
78
  pydantic = "*"
79
79
  httpx = ">=0.24.1"
80
80
  PySnooper = "*"
81
- ruff = ">=0.0.290,<0.4.9"
81
+ ruff = ">=0.0.290,<0.5.7"
82
82
  ruff-lsp = ">=0.0.39,<0.0.41"
83
83
  pre-commit = "*"
84
84
  pytest-xdist = "^3.3.1"
@@ -1 +0,0 @@
1
- version: str = '0.25.8'