datamodel-code-generator 0.21.2__py3-none-any.whl → 0.21.3__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.
- datamodel_code_generator/__init__.py +1 -1
- datamodel_code_generator/model/__init__.py +1 -1
- datamodel_code_generator/model/base.py +18 -5
- datamodel_code_generator/model/dataclass.py +1 -1
- datamodel_code_generator/model/pydantic/types.py +9 -1
- datamodel_code_generator/model/pydantic_v2/__init__.py +12 -2
- datamodel_code_generator/model/pydantic_v2/types.py +22 -1
- datamodel_code_generator/model/typed_dict.py +5 -1
- datamodel_code_generator/parser/openapi.py +5 -1
- datamodel_code_generator/version.py +1 -1
- {datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/METADATA +2 -2
- {datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/RECORD +16 -16
- /datamodel_code_generator/model/{improts.py → imports.py} +0 -0
- {datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/LICENSE +0 -0
- {datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/WHEEL +0 -0
- {datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/entry_points.txt +0 -0
|
@@ -224,7 +224,7 @@ def generate(
|
|
|
224
224
|
output: Optional[Path] = None,
|
|
225
225
|
output_model_type: DataModelType = DataModelType.PydanticBaseModel,
|
|
226
226
|
target_python_version: PythonVersion = PythonVersion.PY_37,
|
|
227
|
-
base_class: str =
|
|
227
|
+
base_class: str = '',
|
|
228
228
|
additional_imports: Optional[List[str]] = None,
|
|
229
229
|
custom_template_dir: Optional[Path] = None,
|
|
230
230
|
extra_template_data: Optional[DefaultDict[str, Dict[str, Any]]] = None,
|
|
@@ -38,7 +38,7 @@ def get_data_model_types(
|
|
|
38
38
|
root_model=pydantic_v2.RootModel,
|
|
39
39
|
field_model=pydantic_v2.DataModelField,
|
|
40
40
|
data_type_manager=pydantic_v2.DataTypeManager,
|
|
41
|
-
dump_resolve_reference_action=
|
|
41
|
+
dump_resolve_reference_action=pydantic_v2.dump_resolve_reference_action,
|
|
42
42
|
)
|
|
43
43
|
elif data_model_type == DataModelType.DataclassesDataclass:
|
|
44
44
|
return DataModelSet(
|
|
@@ -114,7 +114,10 @@ class DataModelFieldBase(_BaseModel):
|
|
|
114
114
|
return type_hint
|
|
115
115
|
elif self.required:
|
|
116
116
|
return type_hint
|
|
117
|
-
|
|
117
|
+
elif self.fall_back_to_nullable:
|
|
118
|
+
return get_optional_type(type_hint, self.data_type.use_union_operator)
|
|
119
|
+
else:
|
|
120
|
+
return type_hint
|
|
118
121
|
|
|
119
122
|
@property
|
|
120
123
|
def imports(self) -> Tuple[Import, ...]:
|
|
@@ -128,10 +131,16 @@ class DataModelFieldBase(_BaseModel):
|
|
|
128
131
|
)
|
|
129
132
|
]
|
|
130
133
|
|
|
131
|
-
if
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
if self.fall_back_to_nullable:
|
|
135
|
+
if (
|
|
136
|
+
self.nullable or (self.nullable is None and not self.required)
|
|
137
|
+
) and not self.data_type.use_union_operator:
|
|
138
|
+
imports.append((IMPORT_OPTIONAL,))
|
|
139
|
+
else:
|
|
140
|
+
if (
|
|
141
|
+
self.nullable and not self.data_type.use_union_operator
|
|
142
|
+
): # pragma: no cover
|
|
143
|
+
imports.append((IMPORT_OPTIONAL,))
|
|
135
144
|
if self.use_annotated:
|
|
136
145
|
import_annotated = (
|
|
137
146
|
IMPORT_ANNOTATED
|
|
@@ -174,6 +183,10 @@ class DataModelFieldBase(_BaseModel):
|
|
|
174
183
|
def has_default_factory(self) -> bool:
|
|
175
184
|
return 'default_factory' in self.extras
|
|
176
185
|
|
|
186
|
+
@property
|
|
187
|
+
def fall_back_to_nullable(self) -> bool:
|
|
188
|
+
return True
|
|
189
|
+
|
|
177
190
|
|
|
178
191
|
@lru_cache()
|
|
179
192
|
def get_template(template_file_path: Path) -> Template:
|
|
@@ -6,7 +6,7 @@ from typing import Any, ClassVar, DefaultDict, Dict, List, Optional, Set, Tuple
|
|
|
6
6
|
from datamodel_code_generator.imports import Import
|
|
7
7
|
from datamodel_code_generator.model import DataModel, DataModelFieldBase
|
|
8
8
|
from datamodel_code_generator.model.base import UNDEFINED
|
|
9
|
-
from datamodel_code_generator.model.
|
|
9
|
+
from datamodel_code_generator.model.imports import IMPORT_DATACLASS, IMPORT_FIELD
|
|
10
10
|
from datamodel_code_generator.model.pydantic.base_model import Constraints
|
|
11
11
|
from datamodel_code_generator.reference import Reference
|
|
12
12
|
from datamodel_code_generator.types import chain_as_tuple
|
|
@@ -155,7 +155,7 @@ class DataTypeManager(_DataTypeManager):
|
|
|
155
155
|
use_union_operator,
|
|
156
156
|
)
|
|
157
157
|
|
|
158
|
-
self.type_map: Dict[Types, DataType] = type_map_factory(
|
|
158
|
+
self.type_map: Dict[Types, DataType] = self.type_map_factory(
|
|
159
159
|
self.data_type,
|
|
160
160
|
strict_types=self.strict_types,
|
|
161
161
|
pattern_key=self.PATTERN_KEY,
|
|
@@ -177,6 +177,14 @@ class DataTypeManager(_DataTypeManager):
|
|
|
177
177
|
'pattern': self.PATTERN_KEY,
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
+
def type_map_factory(
|
|
181
|
+
self,
|
|
182
|
+
data_type: Type[DataType],
|
|
183
|
+
strict_types: Sequence[StrictTypes],
|
|
184
|
+
pattern_key: str,
|
|
185
|
+
) -> Dict[Types, DataType]:
|
|
186
|
+
return type_map_factory(data_type, strict_types, pattern_key)
|
|
187
|
+
|
|
180
188
|
def transform_kwargs(
|
|
181
189
|
self, kwargs: Dict[str, Any], filter_: Set[str]
|
|
182
190
|
) -> Dict[str, str]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
3
|
+
from typing import Iterable, Optional
|
|
4
4
|
|
|
5
5
|
from pydantic import BaseModel as _BaseModel
|
|
6
6
|
|
|
@@ -9,6 +9,10 @@ from .root_model import RootModel
|
|
|
9
9
|
from .types import DataTypeManager
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
def dump_resolve_reference_action(class_names: Iterable[str]) -> str:
|
|
13
|
+
return '\n'.join(f'{class_name}.model_rebuild()' for class_name in class_names)
|
|
14
|
+
|
|
15
|
+
|
|
12
16
|
class ConfigDict(_BaseModel):
|
|
13
17
|
extra: Optional[str] = None
|
|
14
18
|
title: Optional[str] = None
|
|
@@ -18,4 +22,10 @@ class ConfigDict(_BaseModel):
|
|
|
18
22
|
arbitrary_types_allowed: Optional[bool] = None
|
|
19
23
|
|
|
20
24
|
|
|
21
|
-
__all__ = [
|
|
25
|
+
__all__ = [
|
|
26
|
+
'BaseModel',
|
|
27
|
+
'DataModelField',
|
|
28
|
+
'RootModel',
|
|
29
|
+
'dump_resolve_reference_action',
|
|
30
|
+
'DataTypeManager',
|
|
31
|
+
]
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import ClassVar
|
|
3
|
+
from typing import ClassVar, Dict, Sequence, Type
|
|
4
4
|
|
|
5
5
|
from datamodel_code_generator.model.pydantic import DataTypeManager as _DataTypeManager
|
|
6
|
+
from datamodel_code_generator.model.pydantic.imports import IMPORT_CONSTR
|
|
7
|
+
from datamodel_code_generator.types import DataType, StrictTypes, Types
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
class DataTypeManager(_DataTypeManager):
|
|
9
11
|
PATTERN_KEY: ClassVar[str] = 'pattern'
|
|
12
|
+
|
|
13
|
+
def type_map_factory(
|
|
14
|
+
self,
|
|
15
|
+
data_type: Type[DataType],
|
|
16
|
+
strict_types: Sequence[StrictTypes],
|
|
17
|
+
pattern_key: str,
|
|
18
|
+
) -> Dict[Types, DataType]:
|
|
19
|
+
return {
|
|
20
|
+
**super().type_map_factory(data_type, strict_types, pattern_key),
|
|
21
|
+
Types.hostname: self.data_type.from_import(
|
|
22
|
+
IMPORT_CONSTR,
|
|
23
|
+
strict=StrictTypes.str in strict_types,
|
|
24
|
+
# https://github.com/horejsek/python-fastjsonschema/blob/61c6997a8348b8df9b22e029ca2ba35ef441fbb8/fastjsonschema/draft04.py#L31
|
|
25
|
+
kwargs={
|
|
26
|
+
pattern_key: r"r'^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]{0,61}[A-Za-z0-9])$'",
|
|
27
|
+
**({'strict': True} if StrictTypes.str in strict_types else {}),
|
|
28
|
+
},
|
|
29
|
+
),
|
|
30
|
+
}
|
|
@@ -16,7 +16,7 @@ from typing import (
|
|
|
16
16
|
from datamodel_code_generator.imports import Import
|
|
17
17
|
from datamodel_code_generator.model import DataModel, DataModelFieldBase
|
|
18
18
|
from datamodel_code_generator.model.base import UNDEFINED
|
|
19
|
-
from datamodel_code_generator.model.
|
|
19
|
+
from datamodel_code_generator.model.imports import (
|
|
20
20
|
IMPORT_NOT_REQUIRED,
|
|
21
21
|
IMPORT_NOT_REQUIRED_BACKPORT,
|
|
22
22
|
IMPORT_TYPED_DICT,
|
|
@@ -139,6 +139,10 @@ class DataModelField(DataModelFieldBase):
|
|
|
139
139
|
def _not_required(self) -> bool:
|
|
140
140
|
return not self.required and isinstance(self.parent, TypedDict)
|
|
141
141
|
|
|
142
|
+
@property
|
|
143
|
+
def fall_back_to_nullable(self) -> bool:
|
|
144
|
+
return not self._not_required
|
|
145
|
+
|
|
142
146
|
@property
|
|
143
147
|
def imports(self) -> Tuple[Import, ...]:
|
|
144
148
|
return (
|
|
@@ -479,7 +479,11 @@ class OpenAPIParser(JsonSchemaParser):
|
|
|
479
479
|
|
|
480
480
|
if OpenAPIScope.Parameters in self.open_api_scopes and fields:
|
|
481
481
|
self.results.append(
|
|
482
|
-
self.data_model_type(
|
|
482
|
+
self.data_model_type(
|
|
483
|
+
fields=fields,
|
|
484
|
+
reference=reference,
|
|
485
|
+
custom_base_class=self.base_class,
|
|
486
|
+
)
|
|
483
487
|
)
|
|
484
488
|
|
|
485
489
|
def parse_operation(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
version: str = '0.21.
|
|
1
|
+
version: str = '0.21.3'
|
{datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: datamodel-code-generator
|
|
3
|
-
Version: 0.21.
|
|
3
|
+
Version: 0.21.3
|
|
4
4
|
Summary: Datamodel Code Generator
|
|
5
5
|
Home-page: https://github.com/koxudaxi/datamodel-code-generator
|
|
6
6
|
License: MIT
|
|
@@ -321,7 +321,7 @@ $ docker pull koxudaxi/datamodel-code-generator
|
|
|
321
321
|
```
|
|
322
322
|
|
|
323
323
|
## Advanced Uses
|
|
324
|
-
You can
|
|
324
|
+
You can generate models from a URL.
|
|
325
325
|
```bash
|
|
326
326
|
$ datamodel-codegen --url https://<INPUT FILE URL> --output model.py
|
|
327
327
|
```
|
{datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/RECORD
RENAMED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
datamodel_code_generator/__init__.py,sha256=
|
|
1
|
+
datamodel_code_generator/__init__.py,sha256=UYRcDyUBQMfCNJrAYoBrBPI8hyE3kl7b3RUlbJPUSDA,16704
|
|
2
2
|
datamodel_code_generator/__main__.py,sha256=5DPtsGfqSpnMwB8CTbvOqiwlEiRvQu6Xw5ZpkOIK_pk,26786
|
|
3
3
|
datamodel_code_generator/format.py,sha256=o1TzhqZBeb2w-nXFlZEDnbMx0iOAUlaUTEfdgmIMoOw,5703
|
|
4
4
|
datamodel_code_generator/http.py,sha256=Mf4_fTV-2Ni_4Slz-ey3Dtggw1eFAHVyJHnyMgXlmQM,586
|
|
5
5
|
datamodel_code_generator/imports.py,sha256=fWxlydNOEFriihI9yEx65XsbcstxJVVBXPL_W-QQ3eA,3431
|
|
6
|
-
datamodel_code_generator/model/__init__.py,sha256=
|
|
7
|
-
datamodel_code_generator/model/base.py,sha256=
|
|
8
|
-
datamodel_code_generator/model/dataclass.py,sha256=
|
|
6
|
+
datamodel_code_generator/model/__init__.py,sha256=r3T6VXrmuUhkcqKH-tdpowKORGOl73NQ1kLMVaHPG3A,2663
|
|
7
|
+
datamodel_code_generator/model/base.py,sha256=GP9eUALhHDqn6K_F9ZBD3IKw8cdAOoILD-0RSgyMgck,12801
|
|
8
|
+
datamodel_code_generator/model/dataclass.py,sha256=JGf9JF-sq7fdxWOJEOmoemVw8vXMQGlc4ADub_yNhzM,3842
|
|
9
9
|
datamodel_code_generator/model/enum.py,sha256=Giehhtij2DZs2LssSJnG_CIIHsSA7Mkz471GU-Cb5kI,3338
|
|
10
|
-
datamodel_code_generator/model/
|
|
10
|
+
datamodel_code_generator/model/imports.py,sha256=uQJgWKmH-afM3UJtRymJndxZfM6NvDOpde3BvvxPmt8,473
|
|
11
11
|
datamodel_code_generator/model/pydantic/__init__.py,sha256=vJkESKKIEp8pxwP1p6uQAAfxLwAiAKHYopj675PwIOM,1371
|
|
12
12
|
datamodel_code_generator/model/pydantic/base_model.py,sha256=c6Y5Wb4SkOKqXhgx8DyRakiVTe2twwQKp583elpXWDM,11499
|
|
13
13
|
datamodel_code_generator/model/pydantic/custom_root_type.py,sha256=XOeJqzUEAYE21C3hPAnRIz9iDWIjZvUOWDc9MCrpdvw,299
|
|
14
14
|
datamodel_code_generator/model/pydantic/dataclass.py,sha256=sbqTmutl8Fjf1pYngfdv0NMXt904QcTRpHqmZy6GUiQ,424
|
|
15
15
|
datamodel_code_generator/model/pydantic/imports.py,sha256=2nSLYwphBUMQEa0PTSNwoLjEBslu02EQb6BdZ-S51yk,2189
|
|
16
|
-
datamodel_code_generator/model/pydantic/types.py,sha256=
|
|
17
|
-
datamodel_code_generator/model/pydantic_v2/__init__.py,sha256=
|
|
16
|
+
datamodel_code_generator/model/pydantic/types.py,sha256=KAA7pRQ6UkDdfZxwVJ0WPlANi1Y_XDUxLcv1SM_K4Tk,12387
|
|
17
|
+
datamodel_code_generator/model/pydantic_v2/__init__.py,sha256=f6N9vb_s3Uv7vkHrUcSTUF_OUTYfF-b395WaV5sVc_g,799
|
|
18
18
|
datamodel_code_generator/model/pydantic_v2/base_model.py,sha256=EcvFnJ_7LvN7sxMHie27PUgMwdJ3oMWdTCzGR9Nvz3s,4930
|
|
19
19
|
datamodel_code_generator/model/pydantic_v2/imports.py,sha256=ukTU6UqB-o7dP3xq6CmwL5ZJConILiiMZGl0itLiLq8,119
|
|
20
20
|
datamodel_code_generator/model/pydantic_v2/root_model.py,sha256=Y8nzV_4O8brgJULRflI-npR59YCRnArwyAB5UliZgYQ,295
|
|
21
|
-
datamodel_code_generator/model/pydantic_v2/types.py,sha256=
|
|
21
|
+
datamodel_code_generator/model/pydantic_v2/types.py,sha256=FndSBApBPfno7wmVBO4ttE-b2WUGjP0sTxlS4yBGeC0,1280
|
|
22
22
|
datamodel_code_generator/model/rootmodel.py,sha256=8bW7emVQtDGe2iUAmqtlQb607LvTRL0TBSP66pIeNzY,202
|
|
23
23
|
datamodel_code_generator/model/template/Enum.jinja2,sha256=k9lB8iQUsB94bPi8e3xJEd0AGk2ciWL-pSZuGY5kNPQ,378
|
|
24
24
|
datamodel_code_generator/model/template/TypedDict.jinja2,sha256=J_Pe_CiuvTOb-EUCExXPaeTEFzn2keyrKB0wglZ8HgA,135
|
|
@@ -33,19 +33,19 @@ datamodel_code_generator/model/template/pydantic_v2/BaseModel.jinja2,sha256=AZDG
|
|
|
33
33
|
datamodel_code_generator/model/template/pydantic_v2/ConfigDict.jinja2,sha256=xHvBYrh__32O1xRCSl6_u5zbyYIjB8a5k8fZiTo0spY,149
|
|
34
34
|
datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2,sha256=DrJifAOsIcQn-qLeSnsAwz1uCPz0if4dKYcT-ckKea8,992
|
|
35
35
|
datamodel_code_generator/model/template/root.jinja2,sha256=3OTtibxLcGA-FMdR0QDCJUJQgf_kRW0OafeCTPFSFFo,162
|
|
36
|
-
datamodel_code_generator/model/typed_dict.py,sha256=
|
|
36
|
+
datamodel_code_generator/model/typed_dict.py,sha256=hEtpq3BrFFkYumrQCULQxYthKmZPCim1cBakxk64fFU,4753
|
|
37
37
|
datamodel_code_generator/model/types.py,sha256=GmKGPrpbJRgcsfRv9Khpo26e8DgMrPBnmLw6cpdjdiE,2891
|
|
38
38
|
datamodel_code_generator/parser/__init__.py,sha256=zHbw6RPlJC0SAQjb-XyVlyZhcOu5PfYgPidy6jlUM8M,793
|
|
39
39
|
datamodel_code_generator/parser/base.py,sha256=FNJjC8TWjMMEj9VGl3E-mkLn6xTsBwwgY_DKMn1dLU0,45803
|
|
40
40
|
datamodel_code_generator/parser/jsonschema.py,sha256=ICPQy_WVTO0j_D5_l2J_QDMC4lUyeuRKMSJcsj7Uue8,64933
|
|
41
|
-
datamodel_code_generator/parser/openapi.py,sha256=
|
|
41
|
+
datamodel_code_generator/parser/openapi.py,sha256=cAChTjJwnpousjz76PykP_zkaAveTspVVAAiSfOv2Bc,23896
|
|
42
42
|
datamodel_code_generator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
43
|
datamodel_code_generator/reference.py,sha256=mWW5zi_NUX1NjmbRNEYEMW4eIU6CKa8J2QW77cVl-Cg,25993
|
|
44
44
|
datamodel_code_generator/types.py,sha256=lwP7g18vnaNEmQWTUgSa1boq_0p6XdyQBCu-b7SKYog,18872
|
|
45
45
|
datamodel_code_generator/util.py,sha256=yWH-SeYRevrzJ6VH8H6-CWRrI1FcTB5RhHXxVZaRwSU,3136
|
|
46
|
-
datamodel_code_generator/version.py,sha256=
|
|
47
|
-
datamodel_code_generator-0.21.
|
|
48
|
-
datamodel_code_generator-0.21.
|
|
49
|
-
datamodel_code_generator-0.21.
|
|
50
|
-
datamodel_code_generator-0.21.
|
|
51
|
-
datamodel_code_generator-0.21.
|
|
46
|
+
datamodel_code_generator/version.py,sha256=OUQXbNCNGUtH27WirMU_Bx389ZgMgHrEvb0nHRlNk04,24
|
|
47
|
+
datamodel_code_generator-0.21.3.dist-info/LICENSE,sha256=K54Lwc6_jduycsy8oFFjQEeSSuEiqvVIjCGIXOMnuTQ,1068
|
|
48
|
+
datamodel_code_generator-0.21.3.dist-info/METADATA,sha256=tKaNvUyot6LTjkZgWHsYY0EFBVeRkFsQPPUmqUYnKlY,22372
|
|
49
|
+
datamodel_code_generator-0.21.3.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
|
50
|
+
datamodel_code_generator-0.21.3.dist-info/entry_points.txt,sha256=bykbUWqOCiKfxJPGe8jpNqTqD1NG7uyRmozdnwzu7rk,76
|
|
51
|
+
datamodel_code_generator-0.21.3.dist-info/RECORD,,
|
|
File without changes
|
{datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/LICENSE
RENAMED
|
File without changes
|
{datamodel_code_generator-0.21.2.dist-info → datamodel_code_generator-0.21.3.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|