Skip to content

Commit 7486e2a

Browse files
authored
Update using_as_module.md to document config parameter (#2879)
* Update using_as_module.md to document config parameter * Remove comparison section from top of document
1 parent 9ef026e commit 7486e2a

1 file changed

Lines changed: 62 additions & 12 deletions

File tree

docs/using_as_module.md

Lines changed: 62 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pip install 'datamodel-code-generator[http]'
1717
When the `output` parameter is omitted (or set to `None`), `generate()` returns the generated code directly as a string:
1818

1919
```python
20-
from datamodel_code_generator import InputFileType, generate, DataModelType
20+
from datamodel_code_generator import InputFileType, generate, GenerateConfig, DataModelType
2121

2222
json_schema: str = """{
2323
"type": "object",
@@ -30,12 +30,12 @@ json_schema: str = """{
3030
}
3131
}"""
3232

33-
result = generate(
34-
json_schema,
33+
config = GenerateConfig(
3534
input_file_type=InputFileType.JsonSchema,
3635
input_filename="example.json",
3736
output_model_type=DataModelType.PydanticV2BaseModel,
3837
)
38+
result = generate(json_schema, config=config)
3939
print(result)
4040
```
4141

@@ -44,13 +44,16 @@ print(result)
4444
When the schema generates multiple modules, `generate()` returns a `GeneratedModules` dictionary mapping module path tuples to generated code:
4545

4646
```python
47-
from datamodel_code_generator import InputFileType, generate, GeneratedModules
47+
from datamodel_code_generator import InputFileType, generate, GenerateConfig, GeneratedModules
48+
49+
# Your OpenAPI specification (string, Path, or dict)
50+
openapi_spec: str = "..." # Replace with your actual OpenAPI spec
4851

4952
# Schema that generates multiple modules (e.g., with $ref to other files)
50-
result: str | GeneratedModules = generate(
51-
openapi_spec,
53+
config = GenerateConfig(
5254
input_file_type=InputFileType.OpenAPI,
5355
)
56+
result: str | GeneratedModules = generate(openapi_spec, config=config)
5457

5558
if isinstance(result, dict):
5659
for module_path, content in result.items():
@@ -63,13 +66,12 @@ else:
6366

6467
### 📝 Writing to Files
6568

66-
To write generated code to the file system, provide a `Path` to the `output` parameter:
69+
To write generated code to the file system, provide a `Path` to the `output` parameter in the config:
6770

6871
```python
6972
from pathlib import Path
7073
from tempfile import TemporaryDirectory
71-
from datamodel_code_generator import InputFileType, generate
72-
from datamodel_code_generator import DataModelType
74+
from datamodel_code_generator import InputFileType, generate, GenerateConfig, DataModelType
7375

7476
json_schema: str = """{
7577
"type": "object",
@@ -85,14 +87,14 @@ json_schema: str = """{
8587
with TemporaryDirectory() as temporary_directory_name:
8688
temporary_directory = Path(temporary_directory_name)
8789
output = Path(temporary_directory / 'model.py')
88-
generate(
89-
json_schema,
90+
config = GenerateConfig(
9091
input_file_type=InputFileType.JsonSchema,
9192
input_filename="example.json",
9293
output=output,
9394
# set up the output model types
9495
output_model_type=DataModelType.PydanticV2BaseModel,
9596
)
97+
generate(json_schema, config=config)
9698
model: str = output.read_text()
9799
print(model)
98100
```
@@ -127,10 +129,13 @@ class Model(BaseModel):
127129

128130
## 🔧 Using the Parser Directly
129131

130-
You can also call the parser directly for more control:
132+
You can also call the parser directly for more control. Parser classes also support the `config` parameter similar to `generate()`.
133+
134+
### Using `config` Parameter (Recommended)
131135

132136
```python
133137
from datamodel_code_generator import DataModelType, PythonVersion
138+
from datamodel_code_generator.config import JSONSchemaParserConfig
134139
from datamodel_code_generator.model import get_data_model_types
135140
from datamodel_code_generator.parser.jsonschema import JsonSchemaParser
136141

@@ -145,6 +150,39 @@ json_schema: str = """{
145150
}
146151
}"""
147152

153+
data_model_types = get_data_model_types(
154+
DataModelType.PydanticV2BaseModel,
155+
target_python_version=PythonVersion.PY_311
156+
)
157+
config = JSONSchemaParserConfig(
158+
data_model_type=data_model_types.data_model,
159+
data_model_root_type=data_model_types.root_model,
160+
data_model_field_type=data_model_types.field_model,
161+
data_type_manager_type=data_model_types.data_type_manager,
162+
dump_resolve_reference_action=data_model_types.dump_resolve_reference_action,
163+
)
164+
parser = JsonSchemaParser(json_schema, config=config)
165+
result = parser.parse()
166+
print(result)
167+
```
168+
169+
### Using Keyword Arguments (Backward Compatible)
170+
171+
```python
172+
from datamodel_code_generator import DataModelType, PythonVersion
173+
from datamodel_code_generator.model import get_data_model_types
174+
from datamodel_code_generator.parser.jsonschema import JsonSchemaParser
175+
176+
json_schema: str = """{
177+
"type": "object",
178+
"properties": {
179+
"number": {"type": "number"},
180+
"street_name": {"type": "string"},
181+
"street_type": {"type": "string",
182+
"enum": ["Street", "Avenue", "Boulevard"]
183+
}
184+
}
185+
}"""
148186

149187
data_model_types = get_data_model_types(
150188
DataModelType.PydanticV2BaseModel,
@@ -162,6 +200,18 @@ result = parser.parse()
162200
print(result)
163201
```
164202

203+
### Available Parser Config Classes
204+
205+
Each parser type has its own config class:
206+
207+
| Parser | Config Class |
208+
|--------|-------------|
209+
| `JsonSchemaParser` | `JSONSchemaParserConfig` |
210+
| `OpenAPIParser` | `OpenAPIParserConfig` |
211+
| `GraphQLParser` | `GraphQLParserConfig` |
212+
213+
All config classes inherit from `ParserConfig` and include additional parser-specific options.
214+
165215
**✨ Output:**
166216
```python
167217
from __future__ import annotations

0 commit comments

Comments
 (0)