datamodel-code-generator 0.25.6__tar.gz → 0.25.7__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.25.6 → datamodel_code_generator-0.25.7}/PKG-INFO +1 -1
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/msgspec.py +6 -2
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic_v2/__init__.py +2 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic_v2/base_model.py +11 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/msgspec.jinja2 +4 -2
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/parser/base.py +16 -3
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/parser/jsonschema.py +4 -0
- datamodel_code_generator-0.25.7/datamodel_code_generator/version.py +1 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/pyproject.toml +2 -2
- datamodel_code_generator-0.25.6/datamodel_code_generator/version.py +0 -1
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/LICENSE +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/README.md +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/__init__.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/__main__.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/arguments.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/format.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/http.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/imports.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/__init__.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/base.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/dataclass.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/enum.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/imports.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic/__init__.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic/base_model.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic/custom_root_type.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic/dataclass.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic/imports.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic/types.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic_v2/imports.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic_v2/root_model.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/pydantic_v2/types.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/rootmodel.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/scalar.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/Enum.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/Scalar.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/TypedDict.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/TypedDictClass.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/TypedDictFunction.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/Union.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/dataclass.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/pydantic/BaseModel.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/pydantic/Config.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/pydantic/dataclass.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/pydantic_v2/BaseModel.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/pydantic_v2/ConfigDict.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/template/root.jinja2 +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/typed_dict.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/types.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/model/union.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/parser/__init__.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/parser/graphql.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/parser/openapi.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/py.typed +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/reference.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/types.py +0 -0
- {datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/util.py +0 -0
|
@@ -33,7 +33,7 @@ from datamodel_code_generator.types import chain_as_tuple, get_optional_type
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
def _has_field_assignment(field: DataModelFieldBase) -> bool:
|
|
36
|
-
return
|
|
36
|
+
return not (
|
|
37
37
|
field.required
|
|
38
38
|
or (field.represented_default == 'None' and field.strip_default_none)
|
|
39
39
|
)
|
|
@@ -48,7 +48,9 @@ def import_extender(cls: Type[DataModelFieldBaseT]) -> Type[DataModelFieldBaseT]
|
|
|
48
48
|
@wraps(original_imports.fget) # type: ignore
|
|
49
49
|
def new_imports(self: DataModelFieldBaseT) -> Tuple[Import, ...]:
|
|
50
50
|
extra_imports = []
|
|
51
|
-
|
|
51
|
+
field = self.field
|
|
52
|
+
# TODO: Improve field detection
|
|
53
|
+
if field and field.startswith('field('):
|
|
52
54
|
extra_imports.append(IMPORT_MSGSPEC_FIELD)
|
|
53
55
|
if self.field and 'lambda: convert' in self.field:
|
|
54
56
|
extra_imports.append(IMPORT_MSGSPEC_CONVERT)
|
|
@@ -177,6 +179,8 @@ class DataModelField(DataModelFieldBase):
|
|
|
177
179
|
|
|
178
180
|
if self.default != UNDEFINED and self.default is not None:
|
|
179
181
|
data['default'] = self.default
|
|
182
|
+
elif not self.required:
|
|
183
|
+
data['default'] = None
|
|
180
184
|
|
|
181
185
|
if self.required:
|
|
182
186
|
data = {
|
|
@@ -18,9 +18,11 @@ class ConfigDict(_BaseModel):
|
|
|
18
18
|
title: Optional[str] = None
|
|
19
19
|
populate_by_name: Optional[bool] = None
|
|
20
20
|
allow_extra_fields: Optional[bool] = None
|
|
21
|
+
from_attributes: Optional[bool] = None
|
|
21
22
|
frozen: Optional[bool] = None
|
|
22
23
|
arbitrary_types_allowed: Optional[bool] = None
|
|
23
24
|
protected_namespaces: Optional[Tuple[str, ...]] = None
|
|
25
|
+
regex_engine: Optional[str] = None
|
|
24
26
|
|
|
25
27
|
|
|
26
28
|
__all__ = [
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import re
|
|
1
2
|
from pathlib import Path
|
|
2
3
|
from typing import (
|
|
3
4
|
TYPE_CHECKING,
|
|
@@ -218,6 +219,16 @@ class BaseModel(BaseModelBase):
|
|
|
218
219
|
config_parameters['arbitrary_types_allowed'] = True
|
|
219
220
|
break
|
|
220
221
|
|
|
222
|
+
for field in self.fields:
|
|
223
|
+
# Check if a regex pattern uses lookarounds.
|
|
224
|
+
# Depending on the generation configuration, the pattern may end up in two different places.
|
|
225
|
+
pattern = (
|
|
226
|
+
isinstance(field.constraints, Constraints) and field.constraints.pattern
|
|
227
|
+
) or (field.data_type.kwargs or {}).get('pattern')
|
|
228
|
+
if pattern and re.search(r'\(\?<?[=!]', pattern):
|
|
229
|
+
config_parameters['regex_engine'] = '"python-re"'
|
|
230
|
+
break
|
|
231
|
+
|
|
221
232
|
if isinstance(self.extra_template_data.get('config'), dict):
|
|
222
233
|
for key, value in self.extra_template_data['config'].items():
|
|
223
234
|
config_parameters[key] = value
|
|
@@ -18,12 +18,14 @@ class {{ class_name }}:
|
|
|
18
18
|
{%- if not field.annotated and field.field %}
|
|
19
19
|
{{ field.name }}: {{ field.type_hint }} = {{ field.field }}
|
|
20
20
|
{%- else %}
|
|
21
|
-
{%- if field.annotated %}
|
|
21
|
+
{%- if field.annotated and not field.field %}
|
|
22
22
|
{{ field.name }}: {{ field.annotated }}
|
|
23
|
+
{%- elif field.annotated and field.field %}
|
|
24
|
+
{{ field.name }}: {{ field.annotated }} = {{ field.field }}
|
|
23
25
|
{%- else %}
|
|
24
26
|
{{ field.name }}: {{ field.type_hint }}
|
|
25
27
|
{%- endif %}
|
|
26
|
-
{%- if not field.required or field.data_type.is_optional or field.nullable
|
|
28
|
+
{%- if not field.field and (not field.required or field.data_type.is_optional or field.nullable)
|
|
27
29
|
%} = {{ field.represented_default }}
|
|
28
30
|
{%- endif -%}
|
|
29
31
|
{%- endif %}
|
|
@@ -700,6 +700,7 @@ class Parser(ABC):
|
|
|
700
700
|
from_, import_ = full_path = relative(
|
|
701
701
|
model.module_name, data_type.full_name
|
|
702
702
|
)
|
|
703
|
+
import_ = import_.replace('-', '_')
|
|
703
704
|
|
|
704
705
|
alias = scoped_model_resolver.add(full_path, import_).name
|
|
705
706
|
|
|
@@ -707,7 +708,7 @@ class Parser(ABC):
|
|
|
707
708
|
if from_ and import_ and alias != name:
|
|
708
709
|
data_type.alias = (
|
|
709
710
|
alias
|
|
710
|
-
if
|
|
711
|
+
if data_type.reference.short_name == import_
|
|
711
712
|
else f'{alias}.{name}'
|
|
712
713
|
)
|
|
713
714
|
|
|
@@ -778,8 +779,18 @@ class Parser(ABC):
|
|
|
778
779
|
discriminator_model.path.split('#/')[-1]
|
|
779
780
|
!= path.split('#/')[-1]
|
|
780
781
|
):
|
|
781
|
-
|
|
782
|
-
|
|
782
|
+
if (
|
|
783
|
+
path.startswith('#/')
|
|
784
|
+
or discriminator_model.path[:-1]
|
|
785
|
+
!= path.split('/')[-1]
|
|
786
|
+
):
|
|
787
|
+
t_path = path[str(path).find('/') + 1 :]
|
|
788
|
+
t_disc = discriminator_model.path[
|
|
789
|
+
: str(discriminator_model.path).find('#')
|
|
790
|
+
].lstrip('../')
|
|
791
|
+
t_disc_2 = '/'.join(t_disc.split('/')[1:])
|
|
792
|
+
if t_path != t_disc and t_path != t_disc_2:
|
|
793
|
+
continue
|
|
783
794
|
type_names.append(name)
|
|
784
795
|
else:
|
|
785
796
|
type_names = [discriminator_model.path.split('/')[-1]]
|
|
@@ -906,6 +917,7 @@ class Parser(ABC):
|
|
|
906
917
|
name=model.name,
|
|
907
918
|
path=model.reference.path + '/reuse',
|
|
908
919
|
),
|
|
920
|
+
custom_template_dir=model._custom_template_dir,
|
|
909
921
|
)
|
|
910
922
|
if cached_model_reference.path in require_update_action_models:
|
|
911
923
|
require_update_action_models.append(inherited_model.path)
|
|
@@ -1249,6 +1261,7 @@ class Parser(ABC):
|
|
|
1249
1261
|
init = True
|
|
1250
1262
|
else:
|
|
1251
1263
|
module = (*module[:-1], f'{module[-1]}.py')
|
|
1264
|
+
module = tuple(part.replace('-', '_') for part in module)
|
|
1252
1265
|
else:
|
|
1253
1266
|
module = ('__init__.py',)
|
|
1254
1267
|
|
|
@@ -1311,6 +1311,10 @@ class JsonSchemaParser(Parser):
|
|
|
1311
1311
|
data_type = self.data_type_manager.get_data_type_from_full_path(
|
|
1312
1312
|
obj.custom_type_path, is_custom_type=True
|
|
1313
1313
|
)
|
|
1314
|
+
elif obj.is_array:
|
|
1315
|
+
data_type = self.parse_array_fields(
|
|
1316
|
+
name, obj, get_special_path('array', path)
|
|
1317
|
+
).data_type
|
|
1314
1318
|
elif obj.anyOf or obj.oneOf:
|
|
1315
1319
|
reference = self.model_resolver.add(
|
|
1316
1320
|
path, name, loaded=True, class_name=True
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version: str = '0.25.7'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "datamodel-code-generator"
|
|
3
|
-
version = "0.25.
|
|
3
|
+
version = "0.25.7"
|
|
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.
|
|
81
|
+
ruff = ">=0.0.290,<0.4.8"
|
|
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.6'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datamodel_code_generator-0.25.6 → datamodel_code_generator-0.25.7}/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.25.6 → datamodel_code_generator-0.25.7}/datamodel_code_generator/util.py
RENAMED
|
File without changes
|