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.

@@ -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 = DEFAULT_BASE_CLASS,
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=pydantic.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
- return get_optional_type(type_hint, self.data_type.use_union_operator)
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
- self.nullable or (self.nullable is None and not self.required)
133
- ) and not self.data_type.use_union_operator:
134
- imports.append((IMPORT_OPTIONAL,))
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.improts import IMPORT_DATACLASS, IMPORT_FIELD
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__ = ['BaseModel', 'DataModelField', 'RootModel', 'DataTypeManager']
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.improts import (
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(fields=fields, reference=reference)
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.2'
1
+ version: str = '0.21.3'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datamodel-code-generator
3
- Version: 0.21.2
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 genearte models from a URL.
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
  ```
@@ -1,24 +1,24 @@
1
- datamodel_code_generator/__init__.py,sha256=7uANEoX7YDo-dzmUAHbPbseOJAezVvfIiUH7TA6BWDo,16720
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=fXz_QiAXEAIgxNWia8u7MTsDWpfUwBuH7q9Y59geAjU,2660
7
- datamodel_code_generator/model/base.py,sha256=OjisraT2mQ57i0Uo5dzCmsi5bje6_NzxLAvcd1hynV4,12389
8
- datamodel_code_generator/model/dataclass.py,sha256=gUsjMhnQMVowBStY8ycbykaaQBEENoHl2EL7vcr3AJ8,3842
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/improts.py,sha256=uQJgWKmH-afM3UJtRymJndxZfM6NvDOpde3BvvxPmt8,473
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=ZyCpP5ZacFdGoU_Q2Qz0F6kdTZ9Cu1bAkZM-XyYXat0,12133
17
- datamodel_code_generator/model/pydantic_v2/__init__.py,sha256=75HtoLkpL-KO_FlF9I0YB3Sy_VoImPs_rdAhC8cDppU,577
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=WXrdGSiSCR5y8b1GoRfjF-oD2JVxECztoc5CLB_vqEg,239
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=yCih5a7UWM0Mm9pogdpfIxBL7oclZIMISUS7B2e5R0Q,4655
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=KYDq9OEJgEFcaY-ZWzqjTXTwC2v_Ji4JbMpl1FR_jNs,23782
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=RzuXq3COwtl02Iy3dSXMqd6ovaqJPKM9XI1q7jHdn3o,24
47
- datamodel_code_generator-0.21.2.dist-info/LICENSE,sha256=K54Lwc6_jduycsy8oFFjQEeSSuEiqvVIjCGIXOMnuTQ,1068
48
- datamodel_code_generator-0.21.2.dist-info/METADATA,sha256=9WQHDAHbdAV-B_BdjK5mpA_6rvHo-w89wACOR3ut8NE,22372
49
- datamodel_code_generator-0.21.2.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
50
- datamodel_code_generator-0.21.2.dist-info/entry_points.txt,sha256=bykbUWqOCiKfxJPGe8jpNqTqD1NG7uyRmozdnwzu7rk,76
51
- datamodel_code_generator-0.21.2.dist-info/RECORD,,
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,,