datamodel-code-generator 0.25.2__tar.gz → 0.25.4__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.

Files changed (59) hide show
  1. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/PKG-INFO +3 -3
  2. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/README.md +2 -2
  3. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/__init__.py +1 -1
  4. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/format.py +21 -4
  5. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/base.py +1 -1
  6. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic/base_model.py +5 -3
  7. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/parser/jsonschema.py +11 -6
  8. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/util.py +8 -3
  9. datamodel_code_generator-0.25.4/datamodel_code_generator/version.py +1 -0
  10. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/pyproject.toml +9 -2
  11. datamodel_code_generator-0.25.2/datamodel_code_generator/version.py +0 -1
  12. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/LICENSE +0 -0
  13. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/__main__.py +0 -0
  14. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/arguments.py +0 -0
  15. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/http.py +0 -0
  16. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/imports.py +0 -0
  17. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/__init__.py +0 -0
  18. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/dataclass.py +0 -0
  19. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/enum.py +0 -0
  20. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/imports.py +0 -0
  21. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/msgspec.py +0 -0
  22. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic/__init__.py +0 -0
  23. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic/custom_root_type.py +0 -0
  24. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic/dataclass.py +0 -0
  25. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic/imports.py +0 -0
  26. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic/types.py +0 -0
  27. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic_v2/__init__.py +0 -0
  28. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic_v2/base_model.py +0 -0
  29. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic_v2/imports.py +0 -0
  30. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic_v2/root_model.py +0 -0
  31. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/pydantic_v2/types.py +0 -0
  32. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/rootmodel.py +0 -0
  33. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/scalar.py +0 -0
  34. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/Enum.jinja2 +0 -0
  35. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/Scalar.jinja2 +0 -0
  36. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/TypedDict.jinja2 +0 -0
  37. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/TypedDictClass.jinja2 +0 -0
  38. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/TypedDictFunction.jinja2 +0 -0
  39. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/Union.jinja2 +0 -0
  40. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/dataclass.jinja2 +0 -0
  41. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/msgspec.jinja2 +0 -0
  42. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/pydantic/BaseModel.jinja2 +0 -0
  43. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2 +0 -0
  44. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/pydantic/Config.jinja2 +0 -0
  45. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/pydantic/dataclass.jinja2 +0 -0
  46. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/pydantic_v2/BaseModel.jinja2 +0 -0
  47. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/pydantic_v2/ConfigDict.jinja2 +0 -0
  48. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2 +0 -0
  49. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/template/root.jinja2 +0 -0
  50. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/typed_dict.py +0 -0
  51. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/types.py +0 -0
  52. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/model/union.py +0 -0
  53. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/parser/__init__.py +0 -0
  54. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/parser/base.py +0 -0
  55. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/parser/graphql.py +0 -0
  56. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/parser/openapi.py +0 -0
  57. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/py.typed +0 -0
  58. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/reference.py +0 -0
  59. {datamodel_code_generator-0.25.2 → datamodel_code_generator-0.25.4}/datamodel_code_generator/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datamodel-code-generator
3
- Version: 0.25.2
3
+ Version: 0.25.4
4
4
  Summary: Datamodel Code Generator
5
5
  Home-page: https://github.com/koxudaxi/datamodel-code-generator
6
6
  License: MIT
@@ -377,7 +377,7 @@ Options:
377
377
  --http-ignore-tls Disable verification of the remote host's TLS
378
378
  certificate
379
379
  --input INPUT Input file/directory (default: stdin)
380
- --input-file-type {auto,openapi,jsonschema,json,yaml,dict,csv}
380
+ --input-file-type {auto,openapi,graphql,jsonschema,json,yaml,dict,csv}
381
381
  Input file type (default: auto)
382
382
  --output OUTPUT Output file (default: stdout)
383
383
  --output-model-type {pydantic.BaseModel,pydantic_v2.BaseModel,dataclasses.dataclass,typing.TypedDict,msgspec.Struct}
@@ -467,7 +467,7 @@ Model customization:
467
467
  --enable-version-header
468
468
  Enable package version on file headers
469
469
  --keep-model-order Keep generated models' order
470
- --reuse-model Re-use models on the field when a module has the model
470
+ --reuse-model Reuse models on the field when a module has the model
471
471
  with the same content
472
472
  --target-python-version {3.6,3.7,3.8,3.9,3.10,3.11}
473
473
  target python version (default: 3.7)
@@ -332,7 +332,7 @@ Options:
332
332
  --http-ignore-tls Disable verification of the remote host's TLS
333
333
  certificate
334
334
  --input INPUT Input file/directory (default: stdin)
335
- --input-file-type {auto,openapi,jsonschema,json,yaml,dict,csv}
335
+ --input-file-type {auto,openapi,graphql,jsonschema,json,yaml,dict,csv}
336
336
  Input file type (default: auto)
337
337
  --output OUTPUT Output file (default: stdout)
338
338
  --output-model-type {pydantic.BaseModel,pydantic_v2.BaseModel,dataclasses.dataclass,typing.TypedDict,msgspec.Struct}
@@ -422,7 +422,7 @@ Model customization:
422
422
  --enable-version-header
423
423
  Enable package version on file headers
424
424
  --keep-model-order Keep generated models' order
425
- --reuse-model Re-use models on the field when a module has the model
425
+ --reuse-model Reuse models on the field when a module has the model
426
426
  with the same content
427
427
  --target-python-version {3.6,3.7,3.8,3.9,3.10,3.11}
428
428
  target python version (default: 3.7)
@@ -525,7 +525,7 @@ def infer_input_type(text: str) -> InputFileType:
525
525
 
526
526
 
527
527
  inferred_message = (
528
- 'The input file type was determined to be: {}\nThis can be specificied explicitly with the '
528
+ 'The input file type was determined to be: {}\nThis can be specified explicitly with the '
529
529
  '`--input-file-type` option.'
530
530
  )
531
531
 
@@ -11,6 +11,11 @@ import isort
11
11
 
12
12
  from datamodel_code_generator.util import cached_property, load_toml
13
13
 
14
+ try:
15
+ import black.mode
16
+ except ImportError: # pragma: no cover
17
+ black.mode = None
18
+
14
19
 
15
20
  class PythonVersion(Enum):
16
21
  PY_36 = '3.6'
@@ -131,9 +136,15 @@ class CodeFormatter:
131
136
  if wrap_string_literal is not None:
132
137
  experimental_string_processing = wrap_string_literal
133
138
  else:
134
- experimental_string_processing = config.get(
135
- 'experimental-string-processing'
136
- )
139
+ if black.__version__ < '24.1.0': # type: ignore
140
+ experimental_string_processing = config.get(
141
+ 'experimental-string-processing'
142
+ )
143
+ else:
144
+ experimental_string_processing = config.get('preview', False) and (
145
+ config.get('unstable', False)
146
+ or 'string_processing' in config.get('enable-unstable-feature', [])
147
+ )
137
148
 
138
149
  if experimental_string_processing is not None: # pragma: no cover
139
150
  if black.__version__.startswith('19.'): # type: ignore
@@ -141,10 +152,16 @@ class CodeFormatter:
141
152
  f"black doesn't support `experimental-string-processing` option" # type: ignore
142
153
  f' for wrapping string literal in {black.__version__}'
143
154
  )
144
- else:
155
+ elif black.__version__ < '24.1.0': # type: ignore
145
156
  black_kwargs[
146
157
  'experimental_string_processing'
147
158
  ] = experimental_string_processing
159
+ elif experimental_string_processing:
160
+ black_kwargs['preview'] = True
161
+ black_kwargs['unstable'] = config.get('unstable', False)
162
+ black_kwargs['enabled_features'] = {
163
+ black.mode.Preview.string_processing
164
+ }
148
165
 
149
166
  if TYPE_CHECKING:
150
167
  self.black_mode: black.FileMode
@@ -63,7 +63,7 @@ class ConstraintsBase(_BaseModel):
63
63
 
64
64
  @cached_property
65
65
  def has_constraints(self) -> bool:
66
- return any(v for v in self.dict().values() if v is not None)
66
+ return any(v is not None for v in self.dict().values())
67
67
 
68
68
  @staticmethod
69
69
  def merge_constraints(
@@ -87,7 +87,9 @@ class DataModelField(DataModelFieldBase):
87
87
  return result
88
88
 
89
89
  def self_reference(self) -> bool:
90
- return isinstance(self.parent, BaseModel) and self.parent.reference.path in {
90
+ return isinstance(
91
+ self.parent, BaseModelBase
92
+ ) and self.parent.reference.path in {
91
93
  d.reference.path for d in self.data_type.all_data_types if d.reference
92
94
  }
93
95
 
@@ -111,12 +113,12 @@ class DataModelField(DataModelFieldBase):
111
113
  data_type = data_type.data_types[0]
112
114
  if (
113
115
  data_type.reference
114
- and isinstance(data_type.reference.source, BaseModel)
116
+ and isinstance(data_type.reference.source, BaseModelBase)
115
117
  and isinstance(self.default, list)
116
118
  ): # pragma: no cover
117
119
  return f'lambda :[{data_type.alias or data_type.reference.source.class_name}.{self._PARSE_METHOD}(v) for v in {repr(self.default)}]'
118
120
  elif data_type.reference and isinstance(
119
- data_type.reference.source, BaseModel
121
+ data_type.reference.source, BaseModelBase
120
122
  ): # pragma: no cover
121
123
  return f'lambda :{data_type.alias or data_type.reference.source.class_name}.{self._PARSE_METHOD}({repr(self.default)})'
122
124
  return None
@@ -270,6 +270,8 @@ class JsonSchemaObject(BaseModel):
270
270
  def __init__(self, **data: Any) -> None:
271
271
  super().__init__(**data)
272
272
  self.extras = {k: v for k, v in data.items() if k not in EXCLUDE_FIELD_KEYS}
273
+ if 'const' in data.get(self.__extra_key__, {}):
274
+ self.extras['const'] = data[self.__extra_key__]['const']
273
275
 
274
276
  @cached_property
275
277
  def is_object(self) -> bool:
@@ -367,6 +369,7 @@ EXCLUDE_FIELD_KEYS = (
367
369
  @snooper_to_methods(max_variable_length=None)
368
370
  class JsonSchemaParser(Parser):
369
371
  SCHEMA_PATHS: ClassVar[List[str]] = ['#/definitions', '#/$defs']
372
+ SCHEMA_OBJECT_TYPE: ClassVar[Type[JsonSchemaObject]] = JsonSchemaObject
370
373
 
371
374
  def __init__(
372
375
  self,
@@ -686,7 +689,7 @@ class JsonSchemaParser(Parser):
686
689
  # }
687
690
  else:
688
691
  combined_schemas.append(
689
- JsonSchemaObject.parse_obj(
692
+ self.SCHEMA_OBJECT_TYPE.parse_obj(
690
693
  self._deep_merge(
691
694
  base_object,
692
695
  target_attribute.dict(exclude_unset=True, by_alias=True),
@@ -1632,7 +1635,7 @@ class JsonSchemaParser(Parser):
1632
1635
  raw: Dict[str, Any],
1633
1636
  path: List[str],
1634
1637
  ) -> None:
1635
- self.parse_obj(name, JsonSchemaObject.parse_obj(raw), path)
1638
+ self.parse_obj(name, self.SCHEMA_OBJECT_TYPE.parse_obj(raw), path)
1636
1639
 
1637
1640
  def parse_obj(
1638
1641
  self,
@@ -1759,7 +1762,7 @@ class JsonSchemaParser(Parser):
1759
1762
  # Some jsonschema docs include attribute self to have include version details
1760
1763
  raw.pop('self', None)
1761
1764
  # parse $id before parsing $ref
1762
- root_obj = JsonSchemaObject.parse_obj(raw)
1765
+ root_obj = self.SCHEMA_OBJECT_TYPE.parse_obj(raw)
1763
1766
  self.parse_id(root_obj, path_parts)
1764
1767
  definitions: Optional[Dict[Any, Any]] = None
1765
1768
  for schema_path, split_schema_path in self.schema_paths:
@@ -1773,13 +1776,15 @@ class JsonSchemaParser(Parser):
1773
1776
  definitions = {}
1774
1777
 
1775
1778
  for key, model in definitions.items():
1776
- obj = JsonSchemaObject.parse_obj(model)
1779
+ obj = self.SCHEMA_OBJECT_TYPE.parse_obj(model)
1777
1780
  self.parse_id(obj, [*path_parts, schema_path, key])
1778
1781
 
1779
1782
  if object_paths:
1780
1783
  models = get_model_by_path(raw, object_paths)
1781
1784
  model_name = object_paths[-1]
1782
- self.parse_obj(model_name, JsonSchemaObject.parse_obj(models), path)
1785
+ self.parse_obj(
1786
+ model_name, self.SCHEMA_OBJECT_TYPE.parse_obj(models), path
1787
+ )
1783
1788
  else:
1784
1789
  self.parse_obj(obj_name, root_obj, path_parts or ['#'])
1785
1790
  for key, model in definitions.items():
@@ -1800,7 +1805,7 @@ class JsonSchemaParser(Parser):
1800
1805
  models = get_model_by_path(raw, object_paths)
1801
1806
  model_name = object_paths[-1]
1802
1807
  self.parse_obj(
1803
- model_name, JsonSchemaObject.parse_obj(models), path
1808
+ model_name, self.SCHEMA_OBJECT_TYPE.parse_obj(models), path
1804
1809
  )
1805
1810
  previous_reserved_refs = reserved_refs
1806
1811
  reserved_refs = set(self.reserved_refs.get(key) or [])
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import copy
3
4
  from pathlib import Path
4
5
  from typing import TYPE_CHECKING, Any, Callable, Dict, TypeVar
5
6
 
@@ -69,9 +70,13 @@ else:
69
70
  return toml.load(path)
70
71
 
71
72
 
72
- SafeLoader.yaml_constructors[
73
- 'tag:yaml.org,2002:timestamp'
74
- ] = SafeLoader.yaml_constructors['tag:yaml.org,2002:str']
73
+ SafeLoaderTemp = copy.deepcopy(SafeLoader)
74
+ SafeLoaderTemp.yaml_constructors = copy.deepcopy(SafeLoader.yaml_constructors)
75
+ SafeLoaderTemp.add_constructor(
76
+ 'tag:yaml.org,2002:timestamp',
77
+ SafeLoaderTemp.yaml_constructors['tag:yaml.org,2002:str'],
78
+ )
79
+ SafeLoader = SafeLoaderTemp
75
80
 
76
81
  Model = TypeVar('Model', bound=_BaseModel)
77
82
 
@@ -0,0 +1 @@
1
+ version: str = '0.25.4'
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "datamodel-code-generator"
3
- version = "0.25.2"
3
+ version = "0.25.4"
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.1.9"
81
+ ruff = ">=0.0.290,<0.2.1"
82
82
  ruff-lsp = ">=0.0.39,<0.0.41"
83
83
  pre-commit = "*"
84
84
  pytest-xdist = "^3.3.1"
@@ -153,3 +153,10 @@ ignore-init-method-arguments = true
153
153
  [tool.pydantic-pycharm-plugin.parsable-types]
154
154
  # str field may parse int and float
155
155
  str = ["int", "float"]
156
+
157
+ [tool.codespell]
158
+ # Ref: https://github.com/codespell-project/codespell#using-a-config-file
159
+ skip = '.git,*.lock,tests'
160
+ # check-hidden = true
161
+ # ignore-regex = ''
162
+ # ignore-words-list = ''
@@ -1 +0,0 @@
1
- version: str = '0.25.2'