datamodel-code-generator 0.25.6__py3-none-any.whl → 0.25.7__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.

@@ -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 bool(field.field) or not (
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
- if self.field:
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 from_ == '.' and data_type.full_name == import_
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
- # TODO: support external reference
782
- continue
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
@@ -1 +1 @@
1
- version: str = '0.25.6'
1
+ version: str = '0.25.7'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datamodel-code-generator
3
- Version: 0.25.6
3
+ Version: 0.25.7
4
4
  Summary: Datamodel Code Generator
5
5
  Home-page: https://github.com/koxudaxi/datamodel-code-generator
6
6
  License: MIT
@@ -9,15 +9,15 @@ datamodel_code_generator/model/base.py,sha256=M1T8L7how4nW0aqGuunzc1LyWVSJ3OuFvR
9
9
  datamodel_code_generator/model/dataclass.py,sha256=9meJNWb-XPYYO8kDMSLhSfO6fulGWV7r3_XIM5kA71M,3965
10
10
  datamodel_code_generator/model/enum.py,sha256=Giehhtij2DZs2LssSJnG_CIIHsSA7Mkz471GU-Cb5kI,3338
11
11
  datamodel_code_generator/model/imports.py,sha256=9-0bd-DvZRjZkWMsmw-gykL8fzTd6M-vQEqS7Rm_ty4,725
12
- datamodel_code_generator/model/msgspec.py,sha256=jSeOGIytvOleK7MHBxr6MVX9JwsFKSQ7z4aKwcOTuOc,8954
12
+ datamodel_code_generator/model/msgspec.py,sha256=J4U8aroVzBdMkv8CfuOf9mV3X7k83lom-CW4ATpbCfk,9093
13
13
  datamodel_code_generator/model/pydantic/__init__.py,sha256=AYMjDCtnV4vweYqe1asTRCYdOo8IGLBhd8pEdxyY8ok,1372
14
14
  datamodel_code_generator/model/pydantic/base_model.py,sha256=Y2GSlcLBvQh8hrlwGE3rGLTsQLKxERBts0so5BcUP6Y,11970
15
15
  datamodel_code_generator/model/pydantic/custom_root_type.py,sha256=XOeJqzUEAYE21C3hPAnRIz9iDWIjZvUOWDc9MCrpdvw,299
16
16
  datamodel_code_generator/model/pydantic/dataclass.py,sha256=sbqTmutl8Fjf1pYngfdv0NMXt904QcTRpHqmZy6GUiQ,424
17
17
  datamodel_code_generator/model/pydantic/imports.py,sha256=2nSLYwphBUMQEa0PTSNwoLjEBslu02EQb6BdZ-S51yk,2189
18
18
  datamodel_code_generator/model/pydantic/types.py,sha256=GDh1KRforpUIj58TSLSqrbKRnXi8O1qfHT8NaoUYvME,13034
19
- datamodel_code_generator/model/pydantic_v2/__init__.py,sha256=ahhh9sRT9d032dG5gf14M4Q-8MC3P2rQ5Ngo7v_uB6A,865
20
- datamodel_code_generator/model/pydantic_v2/base_model.py,sha256=ed4wP_DkrsafPh5Clt1wccel9svggJ8MXKy8w1jCQDs,7596
19
+ datamodel_code_generator/model/pydantic_v2/__init__.py,sha256=6IcvuP18MzTf3b6edPz6q1sIxzjuvmXbceQfPgkz25Q,947
20
+ datamodel_code_generator/model/pydantic_v2/base_model.py,sha256=SURD7qLZkQaJOcFqmhcuNOCTb49WWcHPpo0RsjjD0SQ,8129
21
21
  datamodel_code_generator/model/pydantic_v2/imports.py,sha256=Q6XC6iE5v4LJvQ2DOXDGFtR-FnGPsaZ56KiiTiF2bIE,191
22
22
  datamodel_code_generator/model/pydantic_v2/root_model.py,sha256=ZlaNHfC8PuLJ1--OYm9AXbL1A95z1F421VoraP3mo70,951
23
23
  datamodel_code_generator/model/pydantic_v2/types.py,sha256=6KAJXO_SGs5bc8GQScCpowgqjaSmrn9W9iewpWIHack,1440
@@ -30,7 +30,7 @@ datamodel_code_generator/model/template/TypedDictClass.jinja2,sha256=URwp5__WyR8
30
30
  datamodel_code_generator/model/template/TypedDictFunction.jinja2,sha256=KjSij5_w4ow4a12SR3orYOndmXGkIvJBBUN735bQ6G0,321
31
31
  datamodel_code_generator/model/template/Union.jinja2,sha256=sq7o--2ESUSfIL4kCfgnr5ZXPFa_VeioqbATTY-N-5I,258
32
32
  datamodel_code_generator/model/template/dataclass.jinja2,sha256=U-zwO9xoClVcNmNCDBnvZQo0_xcRWsPYh2QfsNMyUsQ,816
33
- datamodel_code_generator/model/template/msgspec.jinja2,sha256=iDkKjMSN_xk065prQP-rElVosSyiYYeKxV6UEH7IFdA,916
33
+ datamodel_code_generator/model/template/msgspec.jinja2,sha256=DVYCuXV5VpOx-8xiDsaqKwBzDuGAmMuD3dgWCM6-o4o,1070
34
34
  datamodel_code_generator/model/template/pydantic/BaseModel.jinja2,sha256=sYZa-47YAXqZrd5cYKVnPrsbDvLkHEJOUd7M0nAosP8,1084
35
35
  datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2,sha256=WDdTXYNTrkIw-B4OvPVxOaETTknLs0zdNuq_iDQ2Bcw,1000
36
36
  datamodel_code_generator/model/template/pydantic/Config.jinja2,sha256=Ik028qdqQhDfEP207TCbwVv2b5Do1-nRNDPKzBHKzwM,135
@@ -43,17 +43,17 @@ datamodel_code_generator/model/typed_dict.py,sha256=pzUaKLaVDF5rfxAaR1m4FqnhR00e
43
43
  datamodel_code_generator/model/types.py,sha256=Ti3cEtRQpBYgC4Y5ocAn6Ol-ZbnKG_P7C0nHBX9KtV8,2953
44
44
  datamodel_code_generator/model/union.py,sha256=loaVWQi-UHkV4gLfF2JhxLcgZRMsejaoJzGvjTlp_bo,1716
45
45
  datamodel_code_generator/parser/__init__.py,sha256=zHbw6RPlJC0SAQjb-XyVlyZhcOu5PfYgPidy6jlUM8M,793
46
- datamodel_code_generator/parser/base.py,sha256=jGfXtKnLA-_38aXrktTReu07KMHuTswmjZtgyxjC21c,53535
46
+ datamodel_code_generator/parser/base.py,sha256=y9lNLVYWu9SdBrLYgl2wGA-X9-0axtEp6E-1H-gUemQ,54375
47
47
  datamodel_code_generator/parser/graphql.py,sha256=n1AEOoJRbmK4Oq3_4M3VgvMaC12e3zBXFMXVrO-d2kI,20594
48
- datamodel_code_generator/parser/jsonschema.py,sha256=S0_lBs39XgP6YXNaUGSaMD8JSxiqO1NJzP6uniYzWms,69499
48
+ datamodel_code_generator/parser/jsonschema.py,sha256=8bEBPFPwqQ4Qbxzjtfzh6E_KYBzH9zCHisg0IJOo2Bk,69658
49
49
  datamodel_code_generator/parser/openapi.py,sha256=bGLWGbFysBq4CtM-piuHero_EKW_T0-CS8miEj3Trqw,25623
50
50
  datamodel_code_generator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  datamodel_code_generator/reference.py,sha256=EoalUNUP5us31bfMrHDa1iiKqxL8gHrpZKY_IxgZrOg,26347
52
52
  datamodel_code_generator/types.py,sha256=xPFX0NkgPz5CEz_yqKkZa7wPFr08P0e7X4Ooheoo2Uo,19652
53
53
  datamodel_code_generator/util.py,sha256=Lrjj20mmma4Glpfs42sCoGpt1cncalgUGyNZZviqWdU,3692
54
- datamodel_code_generator/version.py,sha256=EsEWIq40wgO8zhAb88MflW4YdfaOV5E5p5Do3pE8JVU,24
55
- datamodel_code_generator-0.25.6.dist-info/LICENSE,sha256=K54Lwc6_jduycsy8oFFjQEeSSuEiqvVIjCGIXOMnuTQ,1068
56
- datamodel_code_generator-0.25.6.dist-info/METADATA,sha256=k5NXlsOhdi6Xh59kHw-Od8CsY5fMN8qhKoPmMEElCwQ,23339
57
- datamodel_code_generator-0.25.6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
58
- datamodel_code_generator-0.25.6.dist-info/entry_points.txt,sha256=bykbUWqOCiKfxJPGe8jpNqTqD1NG7uyRmozdnwzu7rk,76
59
- datamodel_code_generator-0.25.6.dist-info/RECORD,,
54
+ datamodel_code_generator/version.py,sha256=ELV7HbvS0xRPP1KDziJGhzraG0NcEhduFjGDK9G43kM,24
55
+ datamodel_code_generator-0.25.7.dist-info/LICENSE,sha256=K54Lwc6_jduycsy8oFFjQEeSSuEiqvVIjCGIXOMnuTQ,1068
56
+ datamodel_code_generator-0.25.7.dist-info/METADATA,sha256=uR6VdHb6Kr1oLn7xxwZPzX6lk_kDEI3Zwo6xT2E4Puw,23339
57
+ datamodel_code_generator-0.25.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
58
+ datamodel_code_generator-0.25.7.dist-info/entry_points.txt,sha256=bykbUWqOCiKfxJPGe8jpNqTqD1NG7uyRmozdnwzu7rk,76
59
+ datamodel_code_generator-0.25.7.dist-info/RECORD,,