Skip to main content

Python Dict Annotation — 受限字面量子集的 .da.py 配置文件校验与加载

Project description

PyDA — Python Dict Annotation

受限的 Python 字面量子集,用于人类可读、可注释、可调试的配置文件。

扩展名约定 .da.py(Dict Annotation),文件内容是一个裸 dict 表达式(可嵌套),只能用字面量,不能有任何求值、赋值、导入、调用。通过白名单 AST 校验保证它能被 ast.literal_eval 安全求值。

为什么

  • 比 JSON 多了注释尾逗号;
  • 比 YAML 多了结构严格、零歧义;
  • 比「真正的 Python 模块」多了安全保证(不执行任意代码,不引用外部符号)。

适合作为纳管多套资源的注册表(集群、服务、账号等)。

子集规则

允许

类型 语法
字典 {k: v}
列表 / 元组 / 集合 [...] / (...) / {...}
标量 str / int / float / bool / None
一元正负号 -1 / +2
嵌套 任意深度

禁止(一旦出现即拒收)

  • 裸变量名 Name(最关键的安全闸 —— 禁掉它就无法引用任何外部符号)
  • 赋值 / 海象 :=
  • import
  • 函数调用 f(...)
  • 二元运算、布尔运算、比较 a + b / a and b / a == b
  • 属性 / 下标 / 切片 a.b / a[b]
  • 列表 / 字典 / 集合推导式
  • def / class / lambda / for / if 等一切语句
  • bytes / complex / ... 常量

用法

命令行

python -m pyda clusters.da.py credentials.da.py
# 或 pip install -e . 之后:
pyda clusters.da.py credentials.da.py

通过打印 OK: <file> 退出 0;不通过逐条报错并退出 1。

Python API

from pyda import check, load

# 只校验
errors = check("clusters.da.py")
assert errors == []

# 校验 + 求值
cfg = load("clusters.da.py")
print(cfg["clusters"][0]["name"])

示例 .da.py 文件

{
    "name": "a-cluster",
    "port": 22,
    "sudo": False,          # 注释 OK
    "tags": ["cpu", "gpu"],
    "storage": {
        "shared": "/shared/a",
        "quota_gb": 5000,
    },
}

被拒收的写法:

HOST = "login01"            # ✗ 赋值
import os                   # ✗ import
{"a": len([1, 2])}          # ✗ 函数调用
{"a": my_var}               # ✗ 裸变量名
config["b"]                 # ✗ 下标

安装

pip install -e .

仅依赖 Python 标准库。

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

pyda_config-0.0.1.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

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

pyda_config-0.0.1-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pyda_config-0.0.1.tar.gz
Algorithm Hash digest
SHA256 f5f4fe8a6d1c4436964405a9fb4bbbe6a8bb88b7101a7055dfcbbb4c3060c7d0
MD5 06997967814d7ddd3929cc1ad62fe17e
BLAKE2b-256 ecdde3b983b3d77e2f3a45a80f222cc7ab81a02f33223b9b4d3ec7f7613636f9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyda_config-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for pyda_config-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2e14682e5c800ac5f9af70824eddc7265f586c6d9456814d32b02e4392f2fe3e
MD5 d4e3891f63f9f14ccb601ce1f464f390
BLAKE2b-256 06676fac59822fa22e5796adff610cf6b5d35f73fda986e11460ac59f491c676

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