Datamodel Code Generator
Project description
datamodel-code-generator
This code generator creates pydantic model from an openapi file and others.
Help
See documentation for more details.
Supported source types
- OpenAPI 3 (YAML/JSON, OpenAPI Data Type)
- JSON Schema (JSON Schema Core/JSON Schema Validation)
- JSON/YAML/CSV Data (it will be converted to JSON Schema)
- Python dictionary (it will be converted to JSON Schema)
Implemented list
OpenAPI 3 and JsonSchema
DataType
- string (include patter/minLength/maxLenght)
- number (include maximum/exclusiveMaximum/minimum/exclusiveMinimum/multipleOf/le/ge)
- integer (include maximum/exclusiveMaximum/minimum/exclusiveMinimum/multipleOf/le/ge)
- boolean
- array
- object
String Format
- date
- datetime
- time
- password
- idn-email
- uuid (uuid1/uuid2/uuid3/uuid4/uuid5)
- ipv4
- ipv6
- hostname
- decimal
Other schema
- enum (as enum.Enum or typing.Literal)
- allOf (as Multiple inheritance)
- anyOf (as typing.Union)
- oneOf (as typing.Union)
- $ref (http extra is required when resolving $ref for remote files.)
- $id (for JSONSchema)
Installation
To install datamodel-code-generator
:
$ pip install datamodel-code-generator
http
extra option
If you want to resolve $ref
for remote files then you should specify http
extra option.
$ pip install datamodel-code-generator[http]
Usage
The datamodel-codegen
command:
usage: datamodel-codegen [-h] [--input INPUT] [--url URL] [--http-headers HTTP_HEADER [HTTP_HEADER ...]] [--http-ignore-tls] [--input-file-type {auto,openapi,jsonschema,json,yaml,dict,csv}] [--openapi-scopes {schemas,paths} [{schemas,paths} ...]] [--output OUTPUT] [--base-class BASE_CLASS] [--field-constraints] [--use-annotated] [--use_non_positive_negative_number_constrained_types] [--field-extra-keys FIELD_EXTRA_KEYS [FIELD_EXTRA_KEYS ...]] [--field-include-all-keys] [--snake-case-field] [--original-field-name-delimiter ORIGINAL_FIELD_NAME_DELIMITER] [--strip-default-none] [--disable-appending-item-suffix] [--allow-population-by-field-name] [--enable-faux-immutability] [--use-default] [--force-optional] [--strict-nullable] [--strict-types {str,bytes,int,float,bool} [{str,bytes,int,float,bool} ...]] [--disable-timestamp] [--use-standard-collections] [--use-generic-container-types] [--use-schema-description] [--reuse-model] [--enum-field-as-literal {all,one}] [--set-default-enum-member] [--empty-enum-field-name EMPTY_ENUM_FIELD_NAME] [--use-subclass-enum] [--class-name CLASS_NAME] [--use-title-as-name] [--custom-template-dir CUSTOM_TEMPLATE_DIR] [--extra-template-data EXTRA_TEMPLATE_DATA] [--aliases ALIASES] [--target-python-version {3.6,3.7,3.8,3.9}] [--wrap-string-literal] [--validation] [--encoding ENCODING] [--debug] [--version] optional arguments: -h, --help show this help message and exit --input INPUT Input file/directory (default: stdin) --url URL Input file URL. `--input` is ignore when `--url` is used --http-headers HTTP_HEADER [HTTP_HEADER ...] Set headers in HTTP requests to the remote host. (example: "Authorization: Basic dXNlcjpwYXNz") --http-ignore-tls Disable verification of the remote host's TLS certificate --input-file-type {auto,openapi,jsonschema,json,yaml,dict,csv} Input file type (default: auto) --openapi-scopes {schemas,paths} [{schemas,paths} ...] Scopes of OpenAPI model generation (default: schemas) --output OUTPUT Output file (default: stdout) --base-class BASE_CLASS Base Class (default: pydantic.BaseModel) --field-constraints Use field constraints and not con* annotations --use-annotated Use typing.Annotated for Field(). Also, `--field- constraints` option will be enabled. --use_non_positive_negative_number_constrained_types Use the Non{Positive,Negative}{FloatInt} types instead of the corresponding con* constrained types. --field-extra-keys FIELD_EXTRA_KEYS [FIELD_EXTRA_KEYS ...] Add extra keys to field parameters --field-include-all-keys Add all keys to field parameters --snake-case-field Change camel-case field name to snake-case --original-field-name-delimiter ORIGINAL_FIELD_NAME_DELIMITER Set delimiter to convert to snake case. This option only can be used with --snake-case-field (default: `_` ) --strip-default-none Strip default None on fields --disable-appending-item-suffix Disable appending `Item` suffix to model name in an array --allow-population-by-field-name Allow population by field name --enable-faux-immutability Enable faux immutability --use-default Use default value even if a field is required --force-optional Force optional for required fields --strict-nullable Treat default field as a non-nullable field (Only OpenAPI) --strict-types {str,bytes,int,float,bool} [{str,bytes,int,float,bool} ...] Use strict types --disable-timestamp Disable timestamp on file headers --use-standard-collections Use standard collections for type hinting (list, dict) --use-generic-container-types Use generic container types for type hinting (typing.Sequence, typing.Mapping). If `--use-standard- collections` option is set, then import from collections.abc instead of typing --use-schema-description Use schema description to populate class docstring --reuse-model Re-use models on the field when a module has the model with the same content --enum-field-as-literal {all,one} Parse enum field as literal. all: all enum field type are Literal. one: field type is Literal when an enum has only one possible value --set-default-enum-member Set enum members as default values for enum field --empty-enum-field-name EMPTY_ENUM_FIELD_NAME Set field name when enum value is empty (default: `_`) --use-subclass-enum Define Enum class as subclass with field type when enum has type (int, float, bytes, str) --class-name CLASS_NAME Set class name of root model --use-title-as-name use titles as class names of models --custom-template-dir CUSTOM_TEMPLATE_DIR Custom template directory --extra-template-data EXTRA_TEMPLATE_DATA Extra template data --aliases ALIASES Alias mapping file --target-python-version {3.6,3.7,3.8,3.9} target python version (default: 3.7) --wrap-string-literal Wrap string literal by using black `experimental- string-processing` option (require black 20.8b0 or later) --validation Enable validation (Only OpenAPI) --encoding ENCODING The encoding of input and output (default: UTF-8) --debug show debug message --version show version
Example
OpenAPI
# Generate models from a local file. $ datamodel-codegen --input api.yaml --output model.py # or directly from a URL. $ datamodel-codegen --url https://<INPUT FILE URL> --output model.py
api.yaml
openapi: "3.0.0" info: version: 1.0.0 title: Swagger Petstore license: name: MIT servers: - url: http://petstore.swagger.io/v1 paths: /pets: get: summary: List all pets operationId: listPets tags: - pets parameters: - name: limit in: query description: How many items to return at one time (max 100) required: false schema: type: integer format: int32 responses: '200': description: A paged array of pets headers: x-next: description: A link to the next page of responses schema: type: string content: application/json: schema: $ref: "#/components/schemas/Pets" default: description: unexpected error content: application/json: schema: $ref: "#/components/schemas/Error" x-amazon-apigateway-integration: uri: Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PythonVersionFunction.Arn}/invocations passthroughBehavior: when_no_templates httpMethod: POST type: aws_proxy post: summary: Create a pet operationId: createPets tags: - pets responses: '201': description: Null response default: description: unexpected error content: application/json: schema: $ref: "#/components/schemas/Error" x-amazon-apigateway-integration: uri: Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PythonVersionFunction.Arn}/invocations passthroughBehavior: when_no_templates httpMethod: POST type: aws_proxy /pets/{petId}: get: summary: Info for a specific pet operationId: showPetById tags: - pets parameters: - name: petId in: path required: true description: The id of the pet to retrieve schema: type: string responses: '200': description: Expected response to a valid request content: application/json: schema: $ref: "#/components/schemas/Pets" default: description: unexpected error content: application/json: schema: $ref: "#/components/schemas/Error" x-amazon-apigateway-integration: uri: Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PythonVersionFunction.Arn}/invocations passthroughBehavior: when_no_templates httpMethod: POST type: aws_proxy components: schemas: Pet: required: - id - name properties: id: type: integer format: int64 name: type: string tag: type: string Pets: type: array items: $ref: "#/components/schemas/Pet" Error: required: - code - message properties: code: type: integer format: int32 message: type: string apis: type: array items: type: object properties: apiKey: type: string description: To be used as a dataset parameter value apiVersionNumber: type: string description: To be used as a version parameter value apiUrl: type: string format: uri description: "The URL describing the dataset's fields" apiDocumentationUrl: type: string format: uri description: A URL to the API console for each API
model.py
:
# generated by datamodel-codegen: # filename: api.yaml # timestamp: 2020-06-02T05:28:24+00:00 from __future__ import annotations from typing import List, Optional from pydantic import AnyUrl, BaseModel, Field class Pet(BaseModel): id: int name: str tag: Optional[str] = None class Pets(BaseModel): __root__: List[Pet] class Error(BaseModel): code: int message: str class Api(BaseModel): apiKey: Optional[str] = Field( None, description='To be used as a dataset parameter value' ) apiVersionNumber: Optional[str] = Field( None, description='To be used as a version parameter value' ) apiUrl: Optional[AnyUrl] = Field( None, description="The URL describing the dataset's fields" ) apiDocumentationUrl: Optional[AnyUrl] = Field( None, description='A URL to the API console for each API' ) class Apis(BaseModel): __root__: List[Api]
Related projects
fastapi-code-generator
This code generator creates FastAPI app from an openapi file.
https://github.com/koxudaxi/fastapi-code-generator
pydantic-pycharm-plugin
A JetBrains PyCharm plugin for pydantic
.
https://github.com/koxudaxi/pydantic-pycharm-plugin
PyPi
https://pypi.org/project/datamodel-code-generator
License
datamodel-code-generator is released under the MIT License. http://www.opensource.org/licenses/mit-license
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for datamodel-code-generator-0.13.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | edb7c116441f1d748bdf4949b6ed1b6806a4655295c16b03a2d62bd8165103f9 |
|
MD5 | 0c1fa0af8a30bb8d66eb56955cd0912d |
|
BLAKE2-256 | 77da26dd7246b349b3441794a52d26e06b9773c4e409b81c103b713bade3432b |
Hashes for datamodel_code_generator-0.13.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ccfe748b9122653f910d0c97c6c1a1d9cd4be31f392ce80b312b8c8595b66e2 |
|
MD5 | 6c9157288e898e2d4685d390401fd281 |
|
BLAKE2-256 | d50b6402928e8202d94793224ccfd99ecb813aba0ca499ed0224d4d00e89fcb9 |