Option recommendations (experimental; full mode; rules 2026-10-18)

Schema  OpenAPI 3.0.3 (OpenAPI scopes: schemas)
  components                       6, 0 operations
  inline objects / enums           1 / 0, nesting depth 1
  shared property names            0 (none)
  inline names = component names   1
  repeated inline objects / enums  0 of 0 shapes / 0 of 0 value sets
  titled components                0: 0 shared titles (none), 0 equal another key, 0 equal their own key
  inline titles                    0 objects, most repeated 0 (none)
  unions                           0 oneOf/anyOf, 0 with a discriminator, 0 inline variants
  union branch tags                0 tagged, 0 single required key, 0 tagged only through allOf $ref, 0 copy their parent
  component keys                   dotted (4 of 6); 4 dotted in 4 namespaces
  constraint keywords              uniqueItems 0, patternProperties 0 (0 beyond a typed map), multipleOf 5, OpenAPI 3.0 nullable 0, boolean exclusive bounds 0
  formats                          5 (time x5), decimal 0; int32/int64 0, ranges not enforced
  integer/number/boolean schemas   5

Start from  --preset standard-py314-20261017

Add  nothing on top of the preset

Left out after the trial (the rules recommend these)
  --naming-strategy full-path   [naming.qualify-shared-inline-names]
      Inline schemas under different parents share property names (names: 0, e.g. none; inline names
      equal to a component name: 1). Numbered names (Status, Status1) depend on parse order and
      shift when the schema grows; full-path names each inline model after its parent.
      measured: GitHub REST API description: numbered names 663 -> 53; locations renamed between two
      versions 17% -> 0.0%
      measured: Petstore: Status and Status1 became OrderStatus and PetStatus
      measured: Stripe API description: the expandable ID string of charge no longer displaces the
      charge component (ChargeModel)
      measured: SchemaStore workflow and tsconfig schemas: full-path doubled or lengthened names and
      lost
      trial: preset -> recommended: classes 7 -> 7, problem names 2 -> 2; 0 of 7 classes matched by
      schema location renamed (0 only renumbered), 0 removed, 0 added

Optional (policy; not in the command)
  --strict-types int float bool   [policy.strict-scalar-types]
      Pydantic validates in lax mode, which coerces input into the 5 integer, number and boolean
      schemas: it accepts the string "5" and true as integers, "1.5" as a number, and "true" or 1 as
      booleans. Strict types reject such input. Whether to accept it depends on the project's
      clients, not on the schema; strict int also rejects 5.0, which JSON Schema counts as an
      integer, so leave int out to accept it.
      measured: 11 JSON documents for integer, number, boolean and string properties, 6 of them
      invalid: lax mode accepted 5 invalid ones; with int float bool, 0 accepted and 1 valid one
      rejected (5.0 as an integer); with float bool, 2 accepted ("5" and true as integers) and none
      rejected

Trial  3 candidates generated in memory without formatting; nothing written
  candidate    classes   problems  numbered  long  doubled  displaced  median  unconstrained
  current            7  2 (28.6%)         1     0        0          0       8              0
  preset             7  2 (28.6%)         1     0        0          0       8              5   selected
  recommended        7  2 (28.6%)         1     0        0          0       8              5
  current: the configuration as set, without the preset; never selected
  unconstrained: fields that dcg warns it generates without some of their constraints

Changes from the current configuration (current -> preset)
  0 of 7 classes matched by schema location renamed (0 only renumbered), 0 removed, 0 added

Command
  datamodel-codegen --input schedules.yaml --preset standard-py314-20261017 --target-python-version 3.14

pyproject.toml
  [tool.datamodel-codegen]
  input = "schedules.yaml"
  preset = "standard-py314-20261017"
  target-python-version = "3.14"
