Skip to main content

Spec-driven generic database module for Flask applications.

Project description

后端

包(specdb

当前发布状态:

  • specdb 1.3.0 是当前稳定发布版本。
  • specdb 1.0.0 是首个稳定版基线,1.1.01.2.01.3.0 在其上继续补齐可长期冻结的主包能力。
  • 本次里程碑的发布说明见 docs/release/RELEASE_NOTES_1.3.0.md
  • 当前未解决的稳定性问题见 docs/maintenance/STABILITY_ISSUES.md

1.3.0 新增并冻结了正式安装层入口:

  • specdb.install.install_schema
  • specdb.install.install_suite
  • specdb.install.install_seed
  • specdb.install.load_seed_bundle
  • specdb.install.install_seed_file
  • specdb.install.reset_dev_database
  • specdb.install.verify_installation

模板资产的稳定公开入口则包括:

  • specdb.list_templates
  • specdb.get_template
  • specdb.get_template_suite
  • specdb.get_template_suite_install_plan
  • specdb.get_template_suite_seed_sets

当前发布面的默认理解是:

  • README 里出现的导入入口,视为主包稳定承诺
  • 契约文档里定义的接口,视为主包稳定承诺
  • examples/ 和文档中的示例路径、示例 seed 内容,只作为参考资料,不构成兼容承诺

快速开始

最小化应用工厂示例:

from flask import Flask

from specdb.db_module import DBModuleOptions, init_db_module


def create_app() -> Flask:
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.sqlite3"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    init_db_module(
        app,
        options=DBModuleOptions(
            db_url_prefix="/api/db",
            blueprint_name="db",
            enable_ops_routes=True,
            enable_restore_routes=True,
        ),
    )
    return app

可直接运行的示例:

  • examples/minimal_app.py
  • examples/production_app.py
  • examples/README.md

以可编辑模式安装:

pip install -e .

库接入入口:

from specdb.db_module import DBModuleOptions, init_db_module

运行

python app.py

本地 .env 会自动从仓库根目录 .envbackend/.env 读取。 如果 shell 环境变量已经显式设置,则仍以显式环境变量为准。

示例:

APP_ENV=development
FLASK_DEBUG=0
DATABASE_URL=postgresql+psycopg://web_tools_user:your_password@127.0.0.1:5432/web_tools

生产配置

配置项 是否必需 说明
APP_ENV 建议设置 部署环境建议设为 production;未设置时默认按 production 处理。
DATABASE_URL 生产环境必需 SQLAlchemy 数据库连接串。
DB_MODULE_URL_PREFIX DB 模块路由前缀,默认 /api/db
DB_MODULE_BLUEPRINT_NAME Blueprint 作用域键,默认 db
DB_MODULE_ENABLE_OPS_ROUTES 是否启用 /ops/* 路由。
DB_MODULE_ENABLE_RESTORE_ROUTES 是否启用 /ops/* 下的恢复接口。
DB_MODULE_REQUIRE_OPS_AUTH 可选覆盖 未显式声明开发/测试环境时,启用 ops 路由默认要求 ops_auth_callback;可用此项显式覆盖。
CORS_ORIGINS 允许的 CORS 来源;空值表示不返回 CORS 头。
OPS_JOB_LEASE_SECONDS 长时间运行的 ops 任务租约时长。

运维接口鉴权边界

  • CRUD 路由(/table/data/templates)与 /ops/* 路由是分离的。
  • 未声明环境时默认按更安全的口径处理:启用 ops 路由时要求 ops_auth_callback
  • 只有显式开发/测试环境,或显式设置 DB_MODULE_REQUIRE_OPS_AUTH=false 时,才允许无 ops_auth_callback
  • 如果不需要 ops 路由,建议直接通过 DB_MODULE_ENABLE_OPS_ROUTES=false 禁用。
  • 如果不需要恢复接口,也建议同时关闭 DB_MODULE_ENABLE_RESTORE_ROUTES

本地 PostgreSQL 配置

最小化本地配置步骤:

  1. 创建数据库 web_tools
  2. 创建或指定一个数据库用户,例如 web_tools_user
  3. backend/.env 中把 DATABASE_URL 指向该数据库

如果应用可以连接数据库,但在建表阶段报 InsufficientPrivilege,请在目标数据库内授予 schema 权限:

GRANT CONNECT ON DATABASE web_tools TO web_tools_user;
GRANT USAGE, CREATE ON SCHEMA public TO web_tools_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO web_tools_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO web_tools_user;

或者直接把数据库所有者设为该用户:

ALTER DATABASE web_tools OWNER TO web_tools_user;

测试

python scripts/run_tests.py

测试目录说明见 tests/README.md

构建发布包

python scripts/build_package.py
python scripts/verify_package.py

预期产物:

  • package_dist/specdb-<version>-py3-none-any.whl
  • package_dist/specdb-<version>.tar.gz

scripts/verify_package.py 默认会使用严格的隔离虚拟环境进行校验。 当前也会一并验收:

  • specdb
  • specdb.install
  • specdb.db_templates
  • 根包导出的安装层 helper 与模板 helper

如果是离线本地验证,可以显式启用宽松模式:

$env:VERIFY_ALLOW_SYSTEM_SITE_PACKAGES='1'
python scripts/verify_package.py

版本变更记录见 CHANGELOG.md。 手工发布校验流程可参考 .github/workflows/release.yml。 发布说明可基于 docs/release/RELEASE_TEMPLATE.md 起草。 scripts/build_package.py 在生成产物前也会校验 pyproject.toml 版本与 CHANGELOG.md 是否一致。 稳定版升级说明见 docs/release/UPGRADE_1.3.0.md。 发布检查清单见 docs/release/RELEASE_CHECKLIST.md

或者:

python -m unittest discover -s tests -p "test_*.py" -v

PostgreSQL 集成测试(可选)

如果本地配置解析出的数据库连接是 PostgreSQL,python scripts/run_tests.py 会自动带上 PostgreSQL 集成测试。你也可以显式开启:

export RUN_PG_TESTS=1
export DATABASE_URL_PG=postgresql+psycopg://user:pass@127.0.0.1:5432/dbname
python scripts/run_tests.py

PowerShell:

$env:RUN_PG_TESTS='1'
$env:DATABASE_URL_PG='postgresql+psycopg://user:pass@127.0.0.1:5432/dbname'
python scripts/run_tests.py

如果 DATABASE_URL 指向 PostgreSQL,但你仍想强制跳过 PostgreSQL 集成测试:

$env:RUN_PG_TESTS='0'
python scripts/run_tests.py

CI

当前仓库 CI 默认会运行:

  • 后端单元测试 / API 测试
  • 前端 lint
  • 前端构建

PostgreSQL 集成测试在 CI 中是可选项,只有在仓库配置了 DATABASE_URL_PG 密钥时才会运行。

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

specdb-1.3.0.tar.gz (145.8 kB view details)

Uploaded Source

Built Distribution

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

specdb-1.3.0-py3-none-any.whl (118.6 kB view details)

Uploaded Python 3

File details

Details for the file specdb-1.3.0.tar.gz.

File metadata

  • Download URL: specdb-1.3.0.tar.gz
  • Upload date:
  • Size: 145.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for specdb-1.3.0.tar.gz
Algorithm Hash digest
SHA256 a0aeb974107f6a8c9f5fba494d47b634fdceeec812271271d2ffe00763da612b
MD5 9428c6bb0fa764368bb17e8092e9e5d8
BLAKE2b-256 e9c2e4027b5f3c6612d467e4d6f7f1776448e531af63b605a594f23c3aebbeea

See more details on using hashes here.

File details

Details for the file specdb-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: specdb-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 118.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for specdb-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 902f93d9f591ab267315b93a7f643bc54a1ad318d010a2dbf0c7bf03c65bbc5d
MD5 51755c78438020a3c7ead2ff588a7da0
BLAKE2b-256 186108bb6b1b2bb12b04c4b208c03baeb819fff9e5d1e0752f47f30669623cf1

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