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
Release history Release notifications | RSS feed
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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5f4fe8a6d1c4436964405a9fb4bbbe6a8bb88b7101a7055dfcbbb4c3060c7d0
|
|
| MD5 |
06997967814d7ddd3929cc1ad62fe17e
|
|
| BLAKE2b-256 |
ecdde3b983b3d77e2f3a45a80f222cc7ab81a02f33223b9b4d3ec7f7613636f9
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e14682e5c800ac5f9af70824eddc7265f586c6d9456814d32b02e4392f2fe3e
|
|
| MD5 |
d4e3891f63f9f14ccb601ce1f464f390
|
|
| BLAKE2b-256 |
06676fac59822fa22e5796adff610cf6b5d35f73fda986e11460ac59f491c676
|