跳转到主要内容

使用dataclasses读写TOML配置文件。

项目描述

Tosholi

tests pre-commit.ci status

Tosholi是一个简单的库,用于使用Python dataclasses读取和写入TOML配置文件。Tosholi意为解释或翻译,来自切克萨瓦和乔克托语。

安装

$ pip install tosholi

开始使用

将配置作为Python dataclass创建。配置dataclasses可以嵌套,但不能由TOML支持类型以外的类型组成。

考虑以下我们希望读取到dataclass中的config.toml。(此示例基于toml.io)。

title = "TOML Example"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00

[database]
enabled = true
ports = [ 8000, 8001, 8002 ]
temp_targets = { cpu = 79.5, case = 72.0 }

[servers]

[servers.alpha]
ip = "10.0.0.1"
role = "frontend"

[servers.beta]
ip = "10.0.0.2"
role = "backend"

我们可以使用dataclasses描述配置格式。

from __future__ import annotations

import dataclasses
from datetime import datetime

@dataclasses.dataclass
class Owner:
    name: str
    dob: datetime.datetime

@dataclasses.dataclass
class Database:
    enabled: bool
    ports: list[int]
    temp_targets: dict[str, float]

@dataclasses.dataclass
class Server:
    ip: str
    role: str

@dataclasses.dataclass
class Config:
    title: str
    owner: Owner
    database: Database
    servers: dict[str, Server]

然后可以使用Config dataclass作为解析模板来读取配置文件。

with open('config.toml', 'rb') as f:
    config = tosholi.load(Config, f)

同样,我们可以反向转换。可以使用tosholi.dumps()Config实例转换为str,或者使用tosholi.dump()将其写入文件。

import tosholi
from datetime import tzinfo

config = Config(
    title='TOML Example',
    owner=Owner(
        name='Tom Preston-Werner',
        dob=datetime(1979, 5, 27, 7, 32, 0),
    ),
    database=Database(
        enabled=True,
        ports=[8000, 8001, 8002],
        temp_targets={'cpu': 79.5, 'case': 72.0},
    ),
    servers={
        'alpha': Server(ip='10.0.0.1', role='frontend'),
        'beta': Server(ip='10.0.0.2', role='backend'),
    }
)

with open('config.toml', 'wb') as f:
    tosholi.dump(config, f)

开发

我们使用tox进行测试和pre-commit进行linting。使用以下命令开始本地开发:

$ tox --devenv venv -e py311
$ . venv/bin/activate
$ pre-commit install

$ python -m venv venv
$ . venv/bin/activate
$ pip install -e .[dev]
$ pre-commit install

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

tosholi-0.1.0.tar.gz (18.7 kB 查看哈希值)

上传于 源代码

构建分发版

tosholi-0.1.0-py3-none-any.whl (7.2 kB 查看哈希值)

上传于 Python 3

由...