datamodel-code-generator 0.26.4__tar.gz → 0.26.5__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.
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/PKG-INFO +3 -3
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/README.md +2 -2
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/__main__.py +23 -11
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/arguments.py +1 -1
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/imports.py +1 -1
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/base.py +1 -1
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/enum.py +15 -3
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/parser/base.py +1 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/parser/jsonschema.py +1 -1
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/reference.py +2 -2
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/types.py +12 -10
- datamodel_code_generator-0.26.5/datamodel_code_generator/version.py +1 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/pyproject.toml +1 -1
- datamodel_code_generator-0.26.4/datamodel_code_generator/version.py +0 -1
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/LICENSE +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/__init__.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/format.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/http.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/__init__.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/dataclass.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/imports.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/msgspec.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic/__init__.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic/base_model.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic/custom_root_type.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic/dataclass.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic/imports.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic/types.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic_v2/__init__.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic_v2/base_model.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic_v2/imports.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic_v2/root_model.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/pydantic_v2/types.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/rootmodel.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/scalar.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/Enum.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/Scalar.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/TypedDict.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/TypedDictClass.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/TypedDictFunction.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/Union.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/dataclass.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/msgspec.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/pydantic/BaseModel.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/pydantic/Config.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/pydantic/dataclass.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/pydantic_v2/BaseModel.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/pydantic_v2/ConfigDict.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/template/root.jinja2 +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/typed_dict.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/types.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/model/union.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/parser/__init__.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/parser/graphql.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/parser/openapi.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/py.typed +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/pydantic_patch.py +0 -0
- {datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/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.26.
|
|
3
|
+
Version: 0.26.5
|
|
4
4
|
Summary: Datamodel Code Generator
|
|
5
5
|
Home-page: https://github.com/koxudaxi/datamodel-code-generator
|
|
6
6
|
License: MIT
|
|
@@ -480,7 +480,7 @@ Field customization:
|
|
|
480
480
|
Use schema description to populate field docstring
|
|
481
481
|
|
|
482
482
|
Model customization:
|
|
483
|
-
--allow-extra-fields Allow
|
|
483
|
+
--allow-extra-fields Allow passing extra fields, if this flag is not passed, extra fields
|
|
484
484
|
are forbidden.
|
|
485
485
|
--allow-population-by-field-name
|
|
486
486
|
Allow population by field name
|
|
@@ -505,7 +505,7 @@ Model customization:
|
|
|
505
505
|
pydantic: datetime, dataclass: str, ...)
|
|
506
506
|
--reuse-model Reuse models on the field when a module has the model with the same
|
|
507
507
|
content
|
|
508
|
-
--target-python-version {3.6,3.7,3.8,3.9,3.10,3.11,3.12}
|
|
508
|
+
--target-python-version {3.6,3.7,3.8,3.9,3.10,3.11,3.12,3.13}
|
|
509
509
|
target python version (default: 3.8)
|
|
510
510
|
--treat-dot-as-module
|
|
511
511
|
treat dotted module names as modules
|
|
@@ -435,7 +435,7 @@ Field customization:
|
|
|
435
435
|
Use schema description to populate field docstring
|
|
436
436
|
|
|
437
437
|
Model customization:
|
|
438
|
-
--allow-extra-fields Allow
|
|
438
|
+
--allow-extra-fields Allow passing extra fields, if this flag is not passed, extra fields
|
|
439
439
|
are forbidden.
|
|
440
440
|
--allow-population-by-field-name
|
|
441
441
|
Allow population by field name
|
|
@@ -460,7 +460,7 @@ Model customization:
|
|
|
460
460
|
pydantic: datetime, dataclass: str, ...)
|
|
461
461
|
--reuse-model Reuse models on the field when a module has the model with the same
|
|
462
462
|
content
|
|
463
|
-
--target-python-version {3.6,3.7,3.8,3.9,3.10,3.11,3.12}
|
|
463
|
+
--target-python-version {3.6,3.7,3.8,3.9,3.10,3.11,3.12,3.13}
|
|
464
464
|
target python version (default: 3.8)
|
|
465
465
|
--treat-dot-as-module
|
|
466
466
|
treat dotted module names as modules
|
|
@@ -53,7 +53,6 @@ from datamodel_code_generator.arguments import DEFAULT_ENCODING, arg_parser, nam
|
|
|
53
53
|
from datamodel_code_generator.format import (
|
|
54
54
|
DatetimeClassType,
|
|
55
55
|
PythonVersion,
|
|
56
|
-
black_find_project_root,
|
|
57
56
|
is_supported_in_black,
|
|
58
57
|
)
|
|
59
58
|
from datamodel_code_generator.parser import LiteralType
|
|
@@ -366,6 +365,26 @@ class Config(BaseModel):
|
|
|
366
365
|
setattr(self, field_name, getattr(parsed_args, field_name))
|
|
367
366
|
|
|
368
367
|
|
|
368
|
+
def _get_pyproject_toml_config(source: Path) -> Optional[Dict[str, Any]]:
|
|
369
|
+
"""Find and return the [tool.datamodel-codgen] section of the closest
|
|
370
|
+
pyproject.toml if it exists.
|
|
371
|
+
"""
|
|
372
|
+
|
|
373
|
+
current_path = source
|
|
374
|
+
while current_path != current_path.parent:
|
|
375
|
+
if (current_path / 'pyproject.toml').is_file():
|
|
376
|
+
pyproject_toml = load_toml(current_path / 'pyproject.toml')
|
|
377
|
+
if 'datamodel-codegen' in pyproject_toml.get('tool', {}):
|
|
378
|
+
return pyproject_toml['tool']['datamodel-codegen']
|
|
379
|
+
|
|
380
|
+
if (current_path / '.git').exists():
|
|
381
|
+
# Stop early if we see a git repository root.
|
|
382
|
+
return None
|
|
383
|
+
|
|
384
|
+
current_path = current_path.parent
|
|
385
|
+
return None
|
|
386
|
+
|
|
387
|
+
|
|
369
388
|
def main(args: Optional[Sequence[str]] = None) -> Exit:
|
|
370
389
|
"""Main function."""
|
|
371
390
|
|
|
@@ -383,16 +402,9 @@ def main(args: Optional[Sequence[str]] = None) -> Exit:
|
|
|
383
402
|
print(version)
|
|
384
403
|
exit(0)
|
|
385
404
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
pyproject_toml: Dict[str, Any] = {
|
|
390
|
-
k.replace('-', '_'): v
|
|
391
|
-
for k, v in load_toml(pyproject_toml_path)
|
|
392
|
-
.get('tool', {})
|
|
393
|
-
.get('datamodel-codegen', {})
|
|
394
|
-
.items()
|
|
395
|
-
}
|
|
405
|
+
pyproject_config = _get_pyproject_toml_config(Path().resolve())
|
|
406
|
+
if pyproject_config is not None:
|
|
407
|
+
pyproject_toml = {k.replace('-', '_'): v for k, v in pyproject_config.items()}
|
|
396
408
|
else:
|
|
397
409
|
pyproject_toml = {}
|
|
398
410
|
|
|
@@ -98,7 +98,7 @@ base_options.add_argument(
|
|
|
98
98
|
# ======================================================================================
|
|
99
99
|
model_options.add_argument(
|
|
100
100
|
'--allow-extra-fields',
|
|
101
|
-
help='Allow
|
|
101
|
+
help='Allow passing extra fields, if this flag is not passed, extra fields are forbidden.',
|
|
102
102
|
action='store_true',
|
|
103
103
|
default=None,
|
|
104
104
|
)
|
|
@@ -43,7 +43,7 @@ class Imports(DefaultDict[Optional[str], Set[str]]):
|
|
|
43
43
|
|
|
44
44
|
def create_line(self, from_: Optional[str], imports: Set[str]) -> str:
|
|
45
45
|
if from_:
|
|
46
|
-
return f
|
|
46
|
+
return f'from {from_} import {", ".join(self._set_alias(from_, imports))}'
|
|
47
47
|
return '\n'.join(f'import {i}' for i in self._set_alias(from_, imports))
|
|
48
48
|
|
|
49
49
|
def dump(self) -> str:
|
|
@@ -423,7 +423,7 @@ class DataModel(TemplateBase, Nullable, ABC):
|
|
|
423
423
|
def class_name(self, class_name: str) -> None:
|
|
424
424
|
if '.' in self.reference.name:
|
|
425
425
|
self.reference.name = (
|
|
426
|
-
f
|
|
426
|
+
f'{self.reference.name.rsplit(".", 1)[0]}.{class_name}'
|
|
427
427
|
)
|
|
428
428
|
else:
|
|
429
429
|
self.reference.name = class_name
|
|
@@ -82,10 +82,22 @@ class Enum(DataModel):
|
|
|
82
82
|
|
|
83
83
|
def find_member(self, value: Any) -> Optional[Member]:
|
|
84
84
|
repr_value = repr(value)
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
# Remove surrounding quotes from the string representation
|
|
86
|
+
str_value = str(value).strip('\'"')
|
|
87
|
+
|
|
88
|
+
for field in self.fields:
|
|
89
|
+
# Remove surrounding quotes from field default value
|
|
90
|
+
field_default = field.default.strip('\'"')
|
|
91
|
+
|
|
92
|
+
# Compare values after removing quotes
|
|
93
|
+
if field_default == str_value:
|
|
87
94
|
return self.get_member(field)
|
|
88
|
-
|
|
95
|
+
|
|
96
|
+
# Keep original comparison for backwards compatibility
|
|
97
|
+
if field.default == repr_value: # pragma: no cover
|
|
98
|
+
return self.get_member(field)
|
|
99
|
+
|
|
100
|
+
return None
|
|
89
101
|
|
|
90
102
|
@property
|
|
91
103
|
def imports(self) -> Tuple[Import, ...]:
|
|
@@ -338,7 +338,7 @@ def _get_type(type_: str, format__: Optional[str] = None) -> Types:
|
|
|
338
338
|
if data_formats is not None:
|
|
339
339
|
return data_formats
|
|
340
340
|
|
|
341
|
-
warn(f'format of {format__!r} not understood for {type_!r} - using default'
|
|
341
|
+
warn(f'format of {format__!r} not understood for {type_!r} - using default')
|
|
342
342
|
return json_schema_data_formats[type_]['default']
|
|
343
343
|
|
|
344
344
|
|
|
@@ -473,7 +473,7 @@ class ModelResolver:
|
|
|
473
473
|
else:
|
|
474
474
|
joined_path = self.join_path(path)
|
|
475
475
|
if joined_path == '#':
|
|
476
|
-
return f"
|
|
476
|
+
return f'{"/".join(self.current_root)}#'
|
|
477
477
|
if (
|
|
478
478
|
self.current_base_path
|
|
479
479
|
and not self.base_url
|
|
@@ -498,7 +498,7 @@ class ModelResolver:
|
|
|
498
498
|
|
|
499
499
|
delimiter = joined_path.index('#')
|
|
500
500
|
file_path = ''.join(joined_path[:delimiter])
|
|
501
|
-
ref = f"
|
|
501
|
+
ref = f'{"".join(joined_path[:delimiter])}#{"".join(joined_path[delimiter + 1 :])}'
|
|
502
502
|
if self.root_id_base_path and not (
|
|
503
503
|
is_url(joined_path) or Path(self._base_path, file_path).is_file()
|
|
504
504
|
):
|
|
@@ -362,22 +362,21 @@ class DataType(_BaseModel):
|
|
|
362
362
|
|
|
363
363
|
@property
|
|
364
364
|
def imports(self) -> Iterator[Import]:
|
|
365
|
+
# Add base import if exists
|
|
365
366
|
if self.import_:
|
|
366
367
|
yield self.import_
|
|
368
|
+
|
|
369
|
+
# Define required imports based on type features and conditions
|
|
367
370
|
imports: Tuple[Tuple[bool, Import], ...] = (
|
|
368
371
|
(self.is_optional and not self.use_union_operator, IMPORT_OPTIONAL),
|
|
369
372
|
(len(self.data_types) > 1 and not self.use_union_operator, IMPORT_UNION),
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
import_literal = (
|
|
373
|
+
(
|
|
374
|
+
bool(self.literals),
|
|
373
375
|
IMPORT_LITERAL
|
|
374
376
|
if self.python_version.has_literal_type
|
|
375
|
-
else IMPORT_LITERAL_BACKPORT
|
|
376
|
-
)
|
|
377
|
-
|
|
378
|
-
*imports,
|
|
379
|
-
(any(self.literals), import_literal),
|
|
380
|
-
)
|
|
377
|
+
else IMPORT_LITERAL_BACKPORT,
|
|
378
|
+
),
|
|
379
|
+
)
|
|
381
380
|
|
|
382
381
|
if self.use_generic_container:
|
|
383
382
|
if self.use_standard_collections:
|
|
@@ -401,10 +400,13 @@ class DataType(_BaseModel):
|
|
|
401
400
|
(self.is_set, IMPORT_SET),
|
|
402
401
|
(self.is_dict, IMPORT_DICT),
|
|
403
402
|
)
|
|
403
|
+
|
|
404
|
+
# Yield imports based on conditions
|
|
404
405
|
for field, import_ in imports:
|
|
405
406
|
if field and import_ != self.import_:
|
|
406
407
|
yield import_
|
|
407
408
|
|
|
409
|
+
# Propagate imports from any dict_key type
|
|
408
410
|
if self.dict_key:
|
|
409
411
|
yield from self.dict_key.imports
|
|
410
412
|
|
|
@@ -463,7 +465,7 @@ class DataType(_BaseModel):
|
|
|
463
465
|
elif len(self.data_types) == 1:
|
|
464
466
|
type_ = self.data_types[0].type_hint
|
|
465
467
|
elif self.literals:
|
|
466
|
-
type_ = f
|
|
468
|
+
type_ = f'{LITERAL}[{", ".join(repr(literal) for literal in self.literals)}]'
|
|
467
469
|
else:
|
|
468
470
|
if self.reference:
|
|
469
471
|
type_ = self.reference.short_name
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version: str = '0.26.5'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
version: str = '0.26.4'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/http.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datamodel_code_generator-0.26.4 → datamodel_code_generator-0.26.5}/datamodel_code_generator/util.py
RENAMED
|
File without changes
|