Skip to main content

DevConfig-Gen

License: Apache-2.0 Python 3.8+ Tests Platform

DevConfig-Gen 是一个开发者工具,用于从结构化输入数据和映射关系生成和校验结构化配置。它围绕一个轻量的 Provider 契约构建,使生成流水线独立于任何特定的配置格式或目标系统。多个输入文档可以在生成前进行合并和覆盖。

A developer tool for generating and validating structured configuration from structured input data and mappings. Built around a small provider contract so the generation pipeline is independent of any particular configuration format or target system. Multiple input documents can be merged and overridden before generation.

内置三个 Provider / Ships with three providers:

  • custom — 无 schema 的通用文档,任意 JSON/YAML 层级可增删清空 / schema-free generic document with arbitrary nesting you can add, remove, or clear;
  • json — 无依赖的透传/重新序列化 / dependency-free pass-through/re-serialization;
  • env — 将嵌套数据扁平化为 UPPER_SNAKE_CASE.env 文件 / flattens nested data into an UPPER_SNAKE_CASE .env file.

它是什么 / What it is

DevConfig-Gen:

  • 加载结构化文档(JSON 或 YAML)/ loads a structured document (JSON or YAML);
  • 将其规范化为可预测的结构 / normalizes it into a predictable shape;
  • 校验并报告每个问题的精确字段路径 / validates and reports every problem with a precise field path;
  • 通过 Provider 生成结构化配置文档 / generates a structured configuration document through a provider;
  • 将结果写为 JSON 或 YAML / writes the result as JSON or YAML.

刻意保持本地化且无副作用 / Deliberately local and side-effect free. 不会访问远程服务、安装包、管理系统状态 / Does not contact remote services, install packages, or manage system state.

快速开始 / Quick start (3 minutes)

pip install devconfig-gen
devconfig-gen generate \
  --provider custom --input examples/custom.yaml --output-dir generated --format yaml
devconfig-gen validate --provider custom --input examples/custom.yaml

想要引导式流程?运行终端向导或打开本地 Web 工作台 / Prefer a guided flow?

devconfig-gen init --provider custom   # 终端向导 / terminal wizard
devconfig-gen ui                         # Web 工作台 / web studio

安装 / Installation

从 PyPI 安装 / Install from PyPI:

pip install devconfig-gen

YAML 支持无需外部依赖 / YAML support works with no external dependencies.

pip install devconfig-gen[yaml]   # 可选:安装 PyYAML / optional: use PyYAML

开发模式 / Development (editable):

pip install -e ".[yaml]"

命令行 / CLI

列出可用 Provider / List available providers:

devconfig-gen providers
# custom / env / json

生成配置 / Generate configuration:

devconfig-gen generate \
  --provider custom \
  --input examples/custom.yaml \
  --output-dir generated \
  --format yaml

仅校验不写入 / Validate without writing:

devconfig-gen validate --provider custom --input examples/custom.yaml

校验失败时报告字段路径 / Validation failure reports field paths:

$ devconfig-gen validate --provider env --input broken.yaml
invalid: variables must not be empty

结构化诊断输出 / Structured diagnostics:

devconfig-gen validate --provider env --input broken.yaml --json

查看 Provider Schema / Inspect provider schema:

devconfig-gen schema --provider custom

交互式终端向导 / Interactive Terminal Wizard

适用于无头环境、SSH 会话 / For headless servers, SSH sessions:

devconfig-gen init --provider custom

向导按 ProviderField.type 提示每个字段,含默认值、类型校验、选项、边界检查 / Prompts every field by type with defaults, type validation, choices, bounds checking.

========================================================
  DevConfig-Gen Interactive Wizard: 'custom'
  Answer the prompts below. Press Enter to use defaults.
========================================================

--- [1/1] Custom document ---
  自由构建任意嵌套的 JSON/YAML 结构;任意层级都可增删或清空。
? document (load document file or enter entries):
    Path to JSON/YAML file (or press enter for key=value input): examples/custom.yaml
    [✓] Loaded document from examples/custom.yaml

Validating configuration...
[✓] All validations passed!

Select output format (1: YAML [default], 2: JSON): 1
Writing configuration to '.'...
[✓] Generated artifact: .../custom.yaml

Web 可视化工作台 / Configuration Studio WebUI

启动本地 Web 工作台 / Launch local web studio:

devconfig-gen ui
devconfig-gen ui --workspace ~/projects/my-app   # 绑定项目目录 / bind to project dir

浏览器打开 http://127.0.0.1:8848 / Opens at http://127.0.0.1:8848.

特性 / Features:

  • 中英双语界面,一键切换,偏好本地保存 / Bilingual UI (中文/English) with one-click toggle and saved preference;
  • Apple 原生排版,亮色/暗色主题 / Apple-native typography, light/dark theme;
  • 分步表单向导,内联校验 / Step-by-step wizard with inline validation;
  • custom Provider 递归树编辑器:任意层级增删字段/项、切换类型、逐层清空 / recursive tree editor for the custom provider: add/remove fields or items at any depth, switch types, clear per node;
  • json Provider 文档上传与内联编辑器(拖拽 .json/.yaml 反向解析)/ document drop-zone and inline editor for the json provider (drag .json/.yaml to backfill);
  • 顶部「全部清空」一键重置当前 Provider 内容 / header "Clear All" resets the current provider;
  • 双栏实时预览 / Dual-pane live preview;
  • 模板预设、文件上传、草稿保存、磁盘导出 / Template presets, file upload, auto-save, disk export;
  • 输出格式开关(YAML/JSON,XML 及未来格式已预留)/ output format switch (YAML/JSON; XML and future formats reserved);
  • 零外部依赖 / Zero external build dependencies.

Provider 的步骤与字段元数据自带 i18n 翻译(内置 Provider 已提供中文)/ Provider step and field metadata carry optional i18n translations (the built-in providers ship Chinese).

仅绑定本地回环 / Binds to loopback only. 磁盘导出沙箱限制在工作空间内 / Disk export sandboxed to workspace root.

退出码 / Exit codes: 0 成功/success, 1 校验失败/validation failure, 2 输入错误/input error.

多源合并与覆盖 / Multi-source input and overrides

--input 可重复,文档从左到右深度合并 / --input may be repeated, deep-merged left to right:

devconfig-gen generate \
  --provider custom \
  --input configs/base.yaml \
  --input configs/prod.json \
  --set app.port=9090 \
  --set app.environment=production \
  --output-dir dist --format yaml

--set 值自动解析 JSON 类型 / --set values parsed as JSON when possible (true→bool, 42→int, null→null).

生成任意结构的自定义文档 / Generating an arbitrary custom document

custom Provider 不限定 schema,任意 JSON/YAML 层级都能生成 / The custom provider imposes no schema; any JSON/YAML nesting is generated as-is:

devconfig-gen generate --provider custom --input configs/anything.yaml --output-dir dist --format yaml
from devconfig_gen import GenerationRequest, generate

result = generate(
    "custom",
    GenerationRequest(
        context={"document": {"app": {"name": "web", "limits": {"cpu": "500m"}}}},
        options={"format": "yaml"},
    ),
)

在 Web 工作台中选择 custom,它提供两种编辑模式 / In the studio, custom offers two editing modes:

  • 结构模式:递归树编辑器,任意层级增删字段/项、切换类型(string/number/boolean/object/array/null)、逐层清空 / Tree mode: a recursive editor to add/remove fields or items at any depth, switch types, and clear per node;
  • 文本模式:直接输入 JSON/YAML,支持列表 [1,2,3,4,5]、嵌套 {"1":{"2":{}}}、YAML 缩进与 0: [1,2,3,4,5] 等任意混合 / Text mode: type JSON/YAML directly — lists [1,2,3,4,5], nesting {"1":{"2":{}}}, YAML indentation, and 0: [1,2,3,4,5], freely mixed.

顶层可以是映射、列表或标量 / The root may be a mapping, a list, or a scalar.

顶部「全部清空」一键重置 / The header "Clear All" resets the current provider.

生成 .env 文件 / Generating a .env file

devconfig-gen generate --provider env --input examples/vars.yaml --output-dir dist
# generated dist/.env
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=appdb
DEBUG=true
LOG_LEVEL=info

Python API

from devconfig_gen import GenerationRequest, generate, generate_from_file

# 内存上下文 / In-memory context
result = generate(
    "custom",
    GenerationRequest(
        context={"document": {"app": {"name": "checkout-api", "port": 8080}}},
        options={"format": "yaml"},
    ),
)
artifact = result.artifacts[0]
print(artifact.name, artifact.media_type)   # custom.yaml application/yaml

# 文件到文件,与 CLI 相同流水线 / File to file, same pipeline as CLI
generate_from_file(
    "custom",
    "examples/custom.yaml",
    output_dir="generated",
    output_format="yaml",
)

直接加载和序列化 / Load and serialize directly:

from devconfig_gen import load_file, loads, dumps

data = load_file("examples/custom.yaml")
text = dumps(data, "json")

结构化诊断与 Schema 元数据 / Diagnostics and schema metadata:

from devconfig_gen import diagnose_request, describe_provider

for d in diagnose_request("env", context={}):
    print(d.field, "->", d.message, f"({d.severity})")

for step in describe_provider("custom"):
    print(step.id, step.title, [f.name for f in step.fields])

示例输入 / Example input

examples/custom.yaml:

app:
  name: checkout-api
  version: "2.4.0"
  port: 8080
  environment: production
  replicas: 3
  labels:
    team: payments
    tier: backend
  health_check:
    path: /healthz
    interval_seconds: 15
    timeout_seconds: 5

examples/custom.json 是等效 JSON 文档 / is the equivalent JSON document.

JSON/YAML 支持与限制 / Support and limitations

JSON 由标准库处理 / JSON handled by standard library. YAML 在安装 PyYAML 时使用,否则用内置解析器 / YAML uses PyYAML when available, otherwise bundled parser.

支持 / Supported:

  • 缩进嵌套的映射和序列 / mappings and sequences by indentation;
  • 标量:字符串、整数、浮点、布尔、null / scalars: strings, integers, floats, booleans, null;
  • 引号字符串和裸字符串 / quoted and plain strings;
  • 流式集合 [a, b] {x: 1} / flow collections;
  • 注释和空行 / comments and blank lines;
  • 块标量 | >-/+ 修剪 / block scalars with chomping.

不支持 / Not supported:

  • 锚点别名 &/*、自定义标签 !tag、合并键 << / anchors, aliases, tags, merge keys;
  • 多文档 --- / multiple documents;
  • 块标 scalar 内注释可能丢失 / comments inside block scalars may be dropped.

需要完整 YAML 行为请安装 PyYAML / For full YAML, install PyYAML.

env Provider 渲染纯文本 .envmedia_type: text/plain)/ renders plain-text .env.

架构与数据流 / Architecture and data flow

输入文件 / 上下文 (input file / context)
        |
        v
  formats.load_*        JSON/YAML 解析 + 格式检测
        |
        v
  Provider.diagnose     规范化 + 结构化诊断
        |
        v
  Provider.generate     结构化配置文档
        |
        v
  engine.generate       产物序列化 + 可选持久化
        |
        v
   JSON / YAML 输出

CLI、Python API、向导、工作台调用相同的 engine 函数 / CLI, API, wizard, and studio all call the same engine functions. CLI 本身不含生成逻辑 / CLI contains no generation logic of its own.

核心模块 / Key modules:

模块 / Module 职责 / Responsibility
formats JSON/YAML 加载导出、格式检测、媒体类型
validation 路径感知校验辅助工具 / path-aware validation helpers
models 请求、产物、诊断、字段、步骤、Provider 协议
registry ProviderRegistry 及内置 Provider
engine 编排、诊断、Schema、持久化 / orchestration, diagnostics, persistence
providers customjsonenv Provider
interactive init 终端向导(延迟加载)/ terminal wizard (lazy-loaded)
web_ui ui 本地工作台(延迟加载)/ local studio (lazy-loaded)
cli 仅参数解析 / argument parsing only

编写自定义 Provider / Writing a custom provider (5 minutes)

实现 ConfigProvider 协议 / Implement the ConfigProvider protocol. 只需 namevalidategenerate 必需 / Only name, validate, generate required.

from devconfig_gen import (
    Diagnostic, GeneratedArtifact, GenerationResult,
    ProviderField, ProviderStep, ValidationError,
)

class GreetingProvider:
    name = "greeting"
    steps = (
        ProviderStep(
            id="input",
            title="Greeting input",
            i18n={"zh": {"title": "问候输入", "description": "输入要问候的对象。"}},
            fields=(
                ProviderField(
                    "who",
                    type="string",
                    required=True,
                    title="Who",
                    description="Who to greet.",
                    i18n={"zh": {"title": "对象", "description": "要问候的对象。"}},
                ),
            ),
        ),
    )

    def describe_schema(self):
        return self.steps

    def diagnose(self, request):
        if not request.context.get("who"):
            return (Diagnostic("who", "missing required field: 'who'"),)
        return ()

    def validate(self, request):
        return tuple(item.message for item in self.diagnose(request))

    def generate(self, request):
        diagnostics = self.diagnose(request)
        if diagnostics:
            raise ValidationError(diagnostics)
        return GenerationResult(
            provider=self.name,
            artifacts=(
                GeneratedArtifact(
                    name="greeting.json",
                    content={"message": f"hello {request.context['who']}"},
                    media_type="application/json",
                ),
            ),
        )

注册并运行 / Register and run:

from devconfig_gen import GenerationRequest, ProviderRegistry, generate
from devconfig_gen.providers import CustomProvider, JsonProvider

registry = ProviderRegistry((CustomProvider(), JsonProvider(), GreetingProvider()))
result = generate("greeting", GenerationRequest(context={"who": "world"}), registry=registry)

GeneratedArtifact.content 可以是数据结构或预渲染字符串 / may be a data structure or pre-rendered string.

开发与测试 / Development and testing

python -m unittest discover -s tests -v
# 或无需安装 / or without installing:
PYTHONPATH=src python3 -m unittest discover -s tests -v

测试覆盖格式解析、校验、Provider、多源合并、CLI/API 等价性、向导、WebUI / Covers format parsing, validation, providers, merging, CLI/API parity, wizard, WebUI.

许可证 / License

Apache-2.0. 详见 LICENSE / See LICENSE.

Release files for devconfig-gen 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for devconfig-gen 1.0.0
File Size Uploaded
devconfig_gen-1.0.0.tar.gz 66.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for devconfig-gen 1.0.0
File Interpreter ABI Platform
devconfig_gen-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 119.8 kB

Release files / devconfig_gen-1.0.0.tar.gz

Download URL devconfig_gen-1.0.0.tar.gz
Size 66.2 kB
Tags Source
SHA-256 checksum
How to use checksums
84d50639a37544d83a1f3dc46fe2735b7bd663521fdafe93ec7c00e014702107
BLAKE2b-256 checksum
How to use checksums
73b03d78f1a72f11ef5dbaa0bd77307357324accc4054f152f0db88f140c884c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release files / devconfig_gen-1.0.0-py3-none-any.whl

Download URL devconfig_gen-1.0.0-py3-none-any.whl
Size 53.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a271448aa1b5db1e29190e773cc9c5bd5558811d481aba1cf15dac2d12c2af05
BLAKE2b-256 checksum
How to use checksums
34dd13de45bb0fca11da720bea9cc9112d7d271fe8d4d2353931e3f9157ba409
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page