{"id":3226,"library":"pydantic-yaml","title":"Pydantic-YAML","description":"Pydantic-YAML (version 1.6.0) is an active Python library that extends Pydantic models with YAML reading and writing capabilities. It enables seamless serialization of Pydantic models to YAML strings and deserialization of YAML data back into Pydantic model instances. The library maintains an active release cadence, with ongoing development and support for modern Python and Pydantic versions.","status":"active","version":"1.6.0","language":"en","source_language":"en","source_url":"https://github.com/NowanIlfideme/pydantic-yaml","tags":["pydantic","yaml","serialization","deserialization","configuration","data-validation"],"install":[{"cmd":"pip install pydantic-yaml","lang":"bash","label":"Base installation"},{"cmd":"pip install pydantic-yaml[ruamel]","lang":"bash","label":"Recommended with ruamel.yaml"},{"cmd":"pip install pydantic-yaml[pyyaml]","lang":"bash","label":"Alternative with PyYAML"}],"dependencies":[{"reason":"Core dependency for defining data models.","package":"pydantic","optional":false},{"reason":"Recommended YAML parser for dumping and loading; either this or PyYAML is required for functionality.","package":"ruamel.yaml","optional":true},{"reason":"Alternative YAML parser for dumping and loading; either this or ruamel.yaml is required for functionality.","package":"PyYAML","optional":true}],"imports":[{"symbol":"parse_yaml_raw_as","correct":"from pydantic_yaml import parse_yaml_raw_as"},{"symbol":"to_yaml_str","correct":"from pydantic_yaml import to_yaml_str"},{"note":"The `YamlModel` and `YamlModelMixin` base classes were removed in `pydantic-yaml` v1 for Pydantic v2 and later; use `parse_yaml_raw_as` and `to_yaml_str` directly instead. This functionality may be re-added for Pydantic < 2.x in future `pydantic-yaml` v1 releases.","wrong":"from pydantic_yaml import YamlModel (for Pydantic >= 2.x)","symbol":"YamlModel","correct":"from pydantic_yaml import YamlModel"},{"note":"The `YamlModel` and `YamlModelMixin` base classes were removed in `pydantic-yaml` v1 for Pydantic v2 and later; use `parse_yaml_raw_as` and `to_yaml_str` directly instead. This functionality may be re-added for Pydantic < 2.x in future `pydantic-yaml` v1 releases.","wrong":"from pydantic_yaml import YamlModelMixin (for Pydantic >= 2.x)","symbol":"YamlModelMixin","correct":"from pydantic_yaml import YamlModelMixin"}],"quickstart":{"code":"from enum import Enum\nfrom pydantic import BaseModel, validator\nfrom pydantic_yaml import parse_yaml_raw_as, to_yaml_str\n\nclass MyEnum(str, Enum):\n    a = \"a\"\n    b = \"b\"\n\nclass InnerModel(BaseModel):\n    fld: float = 1.0\n\nclass MyModel(BaseModel):\n    x: int = 1\n    e: MyEnum = MyEnum.a\n    m: InnerModel = InnerModel()\n\n    @validator(\"x\")\n    def _chk_x(cls, v: int) -> int:\n        assert v > 0\n        return v\n\nm1 = MyModel(x=2, e=\"b\", m=InnerModel(fld=1.5))\n\n# Dump to YAML string\nyml_string = to_yaml_str(m1, add_comments=True)\nprint(\"\\n--- Dumped YAML ---\\n\", yml_string)\n\n# Parse YAML string back into model\nm2 = parse_yaml_raw_as(MyModel, yml_string)\nprint(\"\\n--- Parsed Model ---\\n\", m2)\nassert m1 == m2","lang":"python","description":"This example demonstrates how to define a Pydantic model with nested structures and enums, then serialize an instance to a YAML string, and finally deserialize that YAML string back into a Pydantic model using `pydantic-yaml`'s `to_yaml_str` and `parse_yaml_raw_as` functions. It also shows how Pydantic validators are preserved."},"warnings":[{"fix":"Migrate from inheriting `YamlModel` or `YamlModelMixin` to directly calling `pydantic_yaml.parse_yaml_raw_as(YourModel, yaml_data)` and `pydantic_yaml.to_yaml_str(your_instance)`.","message":"Pydantic-YAML v1 introduces breaking changes regarding the `YamlModel` and `YamlModelMixin` base classes. For Pydantic v2 (and later), these mixin classes have been removed. Users should instead directly use the `parse_yaml_raw_as` and `to_yaml_str` functions.","severity":"breaking","affected_versions":"pydantic-yaml >= 1.0.0 with Pydantic >= 2.0.0"},{"fix":"Install with optional dependencies: `pip install pydantic-yaml[ruamel]` (recommended) or `pip install pydantic-yaml[pyyaml]`.","message":"Pydantic-YAML requires an underlying YAML parser (like `ruamel.yaml` or `PyYAML`) to be explicitly installed. Installing `pydantic-yaml` alone will not provide YAML parsing capabilities.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Upgrade your Python environment to 3.10 or newer. If you must use Python 3.7, `pydantic-yaml` version `1.1.3` is the last compatible release.","message":"Support for Python 3.7 has been dropped. The library now requires Python 3.10 or newer.","severity":"breaking","affected_versions":"pydantic-yaml >= 1.2.0 (specifically from release after 1.1.3)"},{"fix":"Currently, configure YAML output using `to_yaml_str` keyword arguments like `indent`. For more advanced YAML-specific serialization, manual intervention with `ruamel.yaml` or `PyYAML` might be necessary.","message":"While `pydantic-yaml` leverages Pydantic's JSON dumping internally, direct YAML-specific configuration options (beyond indentation) are limited. More specific YAML configuration is planned for a future major version (v2).","severity":"gotcha","affected_versions":"All v1.x versions"}],"env_vars":null,"last_verified":"2026-04-11T00:00:00.000Z","next_check":"2026-07-10T00:00:00.000Z"}