DATAMODEL-CODEGEN(1)

NAME
datamodel-codegen - pydantic code generator from OpenAPI and more

DESCRIPTION

  usage:

    datamodel-codegen [options]

Generate Python data models from schema definitions or structured data

For detailed usage, see: https://koxudaxi.github.io/datamodel-code-generator

OPTIONS

--additional-imports ADDITIONAL_IMPORTS
    Custom imports for output (delimited list input). For example "datetime.date,datetime.datetime"

--custom-formatters CUSTOM_FORMATTERS
    List of modules with custom formatter (delimited list input).

--formatters {black,isort,ruff-check,ruff-format} [{black,isort,ruff-check,ruff-format} ...]
    Formatters for output (default: [black, isort])

--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

--http-query-parameters HTTP_QUERY_PARAMETERS [HTTP_QUERY_PARAMETERS ...]
    Set query parameters in HTTP requests to the remote host. (example: "ref=branch")

--input INPUT
    Input file/directory (default: stdin)

--input-file-type {auto,openapi,jsonschema,json,yaml,dict,csv,graphql}
    Input file type (default: auto)

--output OUTPUT
    Output file (default: stdout)

--output-model-type {pydantic.BaseModel,pydantic_v2.BaseModel,dataclasses.dataclass,typing.TypedDict,msgspec.Struct}
    Output model type (default: pydantic.BaseModel)

--url URL
    Input file URL. `--input` is ignored when `--url` is used

  Typing customization:

--allof-merge-mode {constraints,all,none}
    Mode for field merging in allOf schemas. 'constraints': merge only constraints (minItems, maxItems, pattern, etc.) from parent (default). 'all': merge constraints plus annotations (default, examples) from parent. 'none': do not merge any fields from parent properties.

--base-class BASE_CLASS
    Base Class (default: pydantic.BaseModel)

--disable-future-imports
    Disable __future__ imports

--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

--field-constraints
    Use field constraints and not con* annotations

--set-default-enum-member
    Set enum members as default values for enum field

--strict-types {str,bytes,int,float,bool} [{str,bytes,int,float,bool} ...]
    Use strict types

--type-mappings TYPE_MAPPINGS [TYPE_MAPPINGS ...]
    Override default type mappings. Format: "type+format=target" (e.g., "string+binary=string" to map binary format to string type) or "format=target" (e.g., "binary=string"). Can be specified multiple times.

--use-annotated
    Use typing.Annotated for Field(). Also, `--fieldconstraints` option will be enabled.

--use-decimal-for-multiple-of
    Use condecimal instead of confloat for float/number fields with multipleOf constraint (Pydantic only). Avoids floating-point precision issues in validation.

--use-enum-values-in-discriminator
    Use enum member literals in discriminator fields instead of string literals

--use-generic-container-types
    Use generic container types for type hinting (typing.Sequence, typing.Mapping). If `--use-standardcollections` option is set, then import from collections.abc instead of typing

--use-non-positive-negative-number-constrained-types
    Use the Non{Positive,Negative}{FloatInt} types instead of the corresponding con* constrained types.

--use-one-literal-as-default
    Use one literal as default value for one literal field

--use-serialize-as-any
    Use pydantic.SerializeAsAny for fields with types that have subtypes (Pydantic v2 only)

--use-specialized-enum, --no-use-specialized-enum
    Use specialized Enum class (StrEnum, IntEnum). Requires --target-python-version 3.11+

--use-standard-collections
    Use standard collections for type hinting (list, dict)

--use-subclass-enum
    Define generic Enum class as subclass with field type when enum has type (int, float, bytes, str)

--use-type-alias
    Use TypeAlias instead of root models (experimental)

--use-union-operator
    Use | operator for Union type (PEP 604).

--use-unique-items-as-set
    define field type as `set` when the field attribute has `uniqueItems`

  Field customization:

--capitalise-enum-members, --capitalize-enum-members
    Capitalize field names on enum

--empty-enum-field-name EMPTY_ENUM_FIELD_NAME
    Set field name when enum value is empty (default: `_`)

--field-extra-keys FIELD_EXTRA_KEYS [FIELD_EXTRA_KEYS ...]
    Add extra keys to field parameters

--field-extra-keys-without-x-prefix FIELD_EXTRA_KEYS_WITHOUT_X_PREFIX [FIELD_EXTRA_KEYS_WITHOUT_X_PREFIX ...]
    Add extra keys with `x-` prefix to field parameters. The extra keys are stripped of the `x-` prefix.

--field-include-all-keys
    Add all keys to field parameters

--force-optional
    Force optional for required fields

--no-alias
    Do not add a field alias. E.g., if --snake-case-field is used along with a base class, which has an alias_generator

--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: `_` )

--remove-special-field-name-prefix
    Remove field name prefix if it has a special meaning e.g. underscores

--snake-case-field
    Change camel-case field name to snake-case

--special-field-name-prefix SPECIAL_FIELD_NAME_PREFIX
    Set field name prefix when first character can't be used as Python field name (default: `field`)

--strip-default-none
    Strip default None on fields

--union-mode {smart,left_to_right}
    Union mode for only pydantic v2 field

--use-attribute-docstrings
    Set use_attribute_docstrings=True in Pydantic v2 ConfigDict

--use-default
    Use default value even if a field is required

--use-default-kwarg
    Use `default=` instead of a positional argument for Fields that have default values.

--use-field-description
    Use schema description to populate field docstring

--use-frozen-field
    Use Field(frozen=True) for readOnly fields (Pydantic v2) or Field(allow_mutation=False) (Pydantic v1)

--use-inline-field-description
    Use schema description to populate field docstring as inline docstring

  Model customization:

--all-exports-collision-strategy {error,minimal-prefix,full-prefix}
    Strategy for name collisions when using --all-exportsscope=recursive. 'error': raise an error (default). 'minimal-prefix': add module prefix only to colliding names. 'full-prefix': add full module path prefix to colliding names.

--all-exports-scope {children,recursive}
    Generate __all__ in __init__.py with re-exports. 'children': export from direct child modules only. 'recursive': export from all descendant modules.

--allow-extra-fields
    Deprecated: Allow passing extra fields. This flag is deprecated. Use `--extra-fields=allow` instead.

--allow-population-by-field-name
    Allow population by field name

--class-name CLASS_NAME
    Set class name of root model

--collapse-root-models
    Models generated with a root-type field will be merged into the models using that root-type model

--dataclass-arguments DATACLASS_ARGUMENTS
    Custom dataclass arguments as a JSON dictionary, e.g. '{"frozen": true, "kw_only": true}'. Overrides --frozen-dataclasses and similar flags.

--disable-appending-item-suffix
    Disable appending `Item` suffix to model name in an array

--disable-timestamp
    Disable timestamp on file headers

--enable-command-header
    Enable command-line options on file headers for reproducibility

--enable-faux-immutability
    Enable faux immutability

--enable-version-header
    Enable package version on file headers

--extra-fields {allow,ignore,forbid}
    Set the generated models to allow, forbid, or ignore extra fields.

--frozen-dataclasses
    Generate frozen dataclasses (dataclass(frozen=True)). Only applies to dataclass output.

--keep-model-order
    Keep generated models' order

--keyword-only
    Defined models as keyword only (for example dataclass(kw_only=True)).

--module-split-mode {single}
    Split generated models into separate files. 'single': generate one file per model class.

--output-datetime-class {datetime,AwareDatetime,NaiveDatetime}
    Choose Datetime class between AwareDatetime, NaiveDatetime or datetime. Each output model has its default mapping (for example pydantic: datetime, dataclass: str, ...)

--parent-scoped-naming
    Set name of models defined inline from the parent model

--reuse-model
    Reuse models on the field when a module has the model with the same content

--reuse-scope {module,tree}
    Scope for model reuse deduplication: module (per-file, default) or tree (cross-file with shared module). Only effective when --reuse-model is set.

--shared-module-name SHARED_MODULE_NAME
    Name of the shared module for --reuse-scope=tree (default: "shared"). Use this option if your schema has a file named "shared".

--skip-root-model
    Skip generating the model for the root schema element

--target-python-version {3.9,3.10,3.11,3.12,3.13,3.14}
    target python version

--treat-dot-as-module
    treat dotted module names as modules

--use-exact-imports
    import exact types instead of modules, for example: "from .foo import Bar" instead of "from . import foo" with "foo.Bar"

--use-pendulum
    use pendulum instead of datetime

--use-schema-description
    Use schema description to populate class docstring

--use-title-as-name
    use titles as class names of models

  Template customization:

--aliases ALIASES
    Alias mapping file (JSON) for renaming fields. Supports hierarchical formats: Flat: {'field': 'alias'} applies to all occurrences. Scoped: {'ClassName.field': 'alias'} applies to specific class. Priority: scoped > flat. Example: {'User.name': 'user_name', 'Address.name': 'addr_name', 'id': 'id_'}

--custom-file-header CUSTOM_FILE_HEADER
    Custom file header

--custom-file-header-path CUSTOM_FILE_HEADER_PATH
    Custom file header file path

--custom-formatters-kwargs CUSTOM_FORMATTERS_KWARGS
    A file with kwargs for custom formatters.

--custom-template-dir CUSTOM_TEMPLATE_DIR
    Custom template directory

--encoding ENCODING
    The encoding of input and output (default: utf-8)

--extra-template-data EXTRA_TEMPLATE_DATA
    Extra template data for output models. Input is supposed to be a json/yaml file. For OpenAPI and Jsonschema the keys are the spec path of the object, or the name of the object if you want to apply the template data to multiple objects with the same name. If you are using another input file type (e.g. GraphQL), the key is the name of the object. The value is a dictionary of the template data to add.

--use-double-quotes
    Model generated with double quotes. Single quotes or your black config skip_string_normalization value will be used without this option.

--wrap-string-literal
    Wrap string literal by using black `experimentalstring-processing` option (require black 20.8b0 or later)

  OpenAPI-only options:

--include-path-parameters
    Include path parameters in generated parameter models in addition to query parameters (Only OpenAPI)

--openapi-scopes {schemas,paths,tags,parameters,webhooks} [{schemas,paths,tags,parameters,webhooks} ...]
    Scopes of OpenAPI model generation (default: schemas)

--read-only-write-only-model-type {request-response,all}
    Model generation for readOnly/writeOnly fields: 'request-response' = Request/Response models only (no base model), 'all' = Base + Request + Response models.

--strict-nullable
    Treat default field as a non-nullable field (Only OpenAPI)

--use-operation-id-as-name
    use operation id of OpenAPI as class names of models

--validation
    Deprecated: Enable validation (Only OpenAPI). this option is deprecated. it will be removed in future releases

  General options:

--check
    Verify generated files are up-to-date without modifying them. Exits with code 1 if differences found, 0 if up-to-date. Useful for CI to ensure generated code is committed.

--debug
    show debug message (require "debug". `$ pip install 'datamodel-code-generator[debug]'`)

--disable-warnings
    disable warnings

--generate-cli-command
    Generate CLI command from pyproject.toml configuration and exit

--generate-pyproject-config
    Generate pyproject.toml configuration from the provided CLI arguments and exit

--ignore-pyproject
    Ignore pyproject.toml configuration

--no-color
    disable colorized output

--profile PROFILE
    Use a named profile from pyproject.toml [tool.datamodel-codegen.profiles.<name>]

--version
    show version

--watch
    Watch input file(s) for changes and regenerate output automatically

--watch-delay WATCH_DELAY
    Debounce delay in seconds for watch mode (default: 0.5)

-h, --help
    show this help message and exit

Documentation: https://koxudaxi.github.io/datamodel-code-generator GitHub: https://github.com/koxudaxi/datamodel-code-generator