Skip to main content

Convert dataclasses to TOML, preserving comments.

Project description

🐼 serde-dataclass 🐻

TOML and JSON serialization for Python dataclasses is provided through a small, explicit API.

Comment-preserving TOML output, renamed keys, nested dataclasses, and typed round-trips are supported.

Documentation

Project documentation is provided through MkDocs.

pip install -e .[docs]
mkdocs serve

Detailed usage is documented in docs/.

Installation

pip install serde-dataclass

For development and example dependencies:

pip install -e .[dev]

Quick Start

from dataclasses import dataclass, field
from enum import Enum
from typing import Literal

from serde_dataclass import TomlDataclass


class Mode(str, Enum):
    DEV = "dev"
    PROD = "prod"


@dataclass
class Database:
    host: str = field(metadata={"description": "Database host"})
    port: int = field(default=5432, metadata={"description": "Database port"})


@dataclass
class AppConfig(TomlDataclass):
    """Application configuration"""

    app_name: str = field(
        default="demo",
        metadata={"description": "Application name", "toml": "app-name"},
    )
    log_level: Literal["debug", "info", "warning", "error"] = field(
        default="info",
        metadata={"description": "Logging verbosity", "toml": "log-level"},
    )
    mode: Mode = field(default=Mode.DEV, metadata={"description": "Runtime mode"})
    database: Database = field(
        default_factory=lambda: Database(host="localhost"),
        metadata={"description": "Database settings"},
    )


cfg = AppConfig()
text = cfg.to_toml()
loaded = AppConfig.from_toml(text)

assert loaded == cfg
print(text)

Example output:

# Application configuration

app-name = "demo" # Application name
log-level = "info" # Logging verbosity
mode = "dev" # Runtime mode

# Database settings
[database]
host = "localhost" # Database host
port = 5432 # Database port

Summary

  • TomlDataclass and JsonDataclass are provided as base mixins.
  • Root comments, field comments, renamed keys, and nested dataclasses are supported.
  • Enum, Literal, Optional, lists, tuples, sets, and dict[str, T] are supported.
  • Custom loading is configured through dacite.Config.
  • Custom serialization is integrated through json.JSONEncoder and tomlkit encoders.

Notes

  • TOML comments are emitted only for TOML serialization.
  • Dictionary keys are required to be strings.
  • Fields with None values are omitted from TOML output.

Development

pytest -q

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

serde_dataclass-0.0.4.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

serde_dataclass-0.0.4-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file serde_dataclass-0.0.4.tar.gz.

File metadata

  • Download URL: serde_dataclass-0.0.4.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for serde_dataclass-0.0.4.tar.gz
Algorithm Hash digest
SHA256 f4ecaafb1b5a75505544364ae931fe5685dcbdc730ccd6c793d1f111c8983f38
MD5 63c4deac6137e6e2560139dbc1d44d5f
BLAKE2b-256 97b8eb2389bbe02f72e06cd50fccf833b88c0edb8f547ac2f8a23544bd8c5097

See more details on using hashes here.

File details

Details for the file serde_dataclass-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for serde_dataclass-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 3138f31162c83c9df3ae7110c650db8b60e49c214f8d3e01251e9fc8f9c29f90
MD5 45554a8be8655d12fe46985ba458feb4
BLAKE2b-256 1cbb19a0d2d7b4473088561d743026400a98fd3d3e3787a984188b760510011f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page