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.1.tar.gz (11.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.1-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for serde_dataclass-0.0.1.tar.gz
Algorithm Hash digest
SHA256 918b7bf49a0b1ccdd467d8795a93ba67425805fde1fc4d7be0241fb1dad287eb
MD5 ec5ab78397683340fa831499594e537f
BLAKE2b-256 a7d76f1e87ce7b1cda6caa1355537716650ecbd47f0569ab7b7e2430fdee14f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serde_dataclass-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8a0191459a95709958b44d31eab61fb5e489fd0cea7fd83080a8fdf95cc4e9ad
MD5 ff129a5c3fec346b61f5b3344b73af8f
BLAKE2b-256 29ba213ccdd374d9f7e928b2304b4a20ea213dd72913fb5654ebe7a0aa1bdc67

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