pz-cli 5.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pz_cli-5.0.0.dist-info/METADATA +51 -0
- pz_cli-5.0.0.dist-info/RECORD +399 -0
- pz_cli-5.0.0.dist-info/WHEEL +4 -0
- pz_cli-5.0.0.dist-info/entry_points.txt +5 -0
- pz_core/__init__.py +64 -0
- pz_core/__main__.py +7 -0
- pz_core/app.py +45 -0
- pz_core/assembly/__init__.py +17 -0
- pz_core/assembly/app_discovery.py +1240 -0
- pz_core/assembly/apps/__init__.py +25 -0
- pz_core/assembly/apps/compiler.py +824 -0
- pz_core/assembly/apps/providers.py +188 -0
- pz_core/assembly/cli/__init__.py +9 -0
- pz_core/assembly/cli/compiler.py +166 -0
- pz_core/assembly/diagnostics/__init__.py +21 -0
- pz_core/assembly/diagnostics/checks.py +257 -0
- pz_core/assembly/diagnostics/dev_sources.py +569 -0
- pz_core/assembly/events/__init__.py +5 -0
- pz_core/assembly/events/compiler.py +219 -0
- pz_core/assembly/extensions/__init__.py +5 -0
- pz_core/assembly/extensions/compiler.py +696 -0
- pz_core/assembly/infra/__init__.py +6 -0
- pz_core/assembly/infra/compiler.py +272 -0
- pz_core/assembly/lifecycle/__init__.py +5 -0
- pz_core/assembly/lifecycle/compiler.py +95 -0
- pz_core/assembly/middlewares/__init__.py +19 -0
- pz_core/assembly/middlewares/compiler.py +508 -0
- pz_core/assembly/project/__init__.py +7 -0
- pz_core/assembly/project/compiler.py +9 -0
- pz_core/assembly/project/context.py +17 -0
- pz_core/assembly/project/discovery.py +227 -0
- pz_core/assembly/resources/__init__.py +19 -0
- pz_core/assembly/resources/compiler.py +310 -0
- pz_core/assembly/resources/settings.py +129 -0
- pz_core/assembly/routes/__init__.py +7 -0
- pz_core/assembly/routes/compiler.py +400 -0
- pz_core/assembly/runtime_manifests/__init__.py +13 -0
- pz_core/assembly/runtime_manifests/compiler.py +159 -0
- pz_core/assembly/settings/__init__.py +17 -0
- pz_core/assembly/settings/compiler.py +786 -0
- pz_core/assembly/settings/host_project_overrides.py +82 -0
- pz_core/assembly/settings/host_runtime_endpoint.py +207 -0
- pz_core/authoring/__init__.py +79 -0
- pz_core/authoring/app_init_service.py +946 -0
- pz_core/authoring/app_versions.py +814 -0
- pz_core/authoring/cli.py +192 -0
- pz_core/authoring/commands.py +1810 -0
- pz_core/authoring/conflicts.py +180 -0
- pz_core/authoring/dev_bindings.py +916 -0
- pz_core/authoring/dev_git.py +1087 -0
- pz_core/authoring/dev_import.py +1061 -0
- pz_core/authoring/dev_manifest.py +522 -0
- pz_core/authoring/dev_sources.py +1638 -0
- pz_core/authoring/env_cli.py +454 -0
- pz_core/authoring/files.py +109 -0
- pz_core/authoring/ide_projection.py +1129 -0
- pz_core/authoring/naming.py +58 -0
- pz_core/authoring/official_dev_sources.py +432 -0
- pz_core/authoring/official_sources.json +156 -0
- pz_core/authoring/orchestration_service.py +558 -0
- pz_core/authoring/project_default.jsonc +53 -0
- pz_core/authoring/project_defaults.py +88 -0
- pz_core/authoring/project_metadata_service.py +199 -0
- pz_core/authoring/project_settings_checks.py +51 -0
- pz_core/authoring/project_settings_cli.py +299 -0
- pz_core/authoring/project_settings_service.py +1700 -0
- pz_core/authoring/project_state.py +399 -0
- pz_core/authoring/publish_git.py +423 -0
- pz_core/authoring/publish_lock.py +188 -0
- pz_core/authoring/publish_source.py +195 -0
- pz_core/authoring/release.py +1382 -0
- pz_core/authoring/repo_keys.py +29 -0
- pz_core/authoring/root_cli.py +28 -0
- pz_core/authoring/scaffold_service.py +325 -0
- pz_core/authoring/sync_service.py +787 -0
- pz_core/authoring/templates/app/__init__.py +1 -0
- pz_core/authoring/templates/app/api.py +25 -0
- pz_core/authoring/templates/app/apps.py +31 -0
- pz_core/authoring/templates/app/auth_package_init.py +14 -0
- pz_core/authoring/templates/app/auth_readme.py +29 -0
- pz_core/authoring/templates/app/configs_package_init.py +14 -0
- pz_core/authoring/templates/app/default_env.py +18 -0
- pz_core/authoring/templates/app/default_jsonc.py +25 -0
- pz_core/authoring/templates/app/locales_readme.py +25 -0
- pz_core/authoring/templates/app/migrations_readme.py +19 -0
- pz_core/authoring/templates/app/models.py +14 -0
- pz_core/authoring/templates/app/package_init.py +8 -0
- pz_core/authoring/templates/app/pages_base.py +161 -0
- pz_core/authoring/templates/app/pages_readme.py +25 -0
- pz_core/authoring/templates/app/public.py +31 -0
- pz_core/authoring/templates/app/pyproject.py +77 -0
- pz_core/authoring/templates/app/readme.py +74 -0
- pz_core/authoring/templates/app/settings.py +46 -0
- pz_core/authoring/templates/app/static_app_js.py +24 -0
- pz_core/authoring/templates/app/static_readme.py +31 -0
- pz_core/authoring/templates/app/template_config_page.py +23 -0
- pz_core/authoring/templates/app/template_index_html.py +28 -0
- pz_core/authoring/templates/app/templates_readme.py +32 -0
- pz_core/authoring/templates/app/urls.py +36 -0
- pz_core/authoring/templates/app/views.py +36 -0
- pz_core/authoring/templates/project/__init__.py +1 -0
- pz_core/authoring/templates/project/agents.py +51 -0
- pz_core/authoring/templates/project/apps_container_readme.py +37 -0
- pz_core/authoring/templates/project/main_py.py +59 -0
- pz_core/authoring/templates/project/project_env.py +19 -0
- pz_core/authoring/templates/project/pyproject.py +26 -0
- pz_core/authoring/templates/project/pz_env_env.py +65 -0
- pz_core/authoring/templates/project/pz_env_jsonc.py +69 -0
- pz_core/authoring/templates/project/pz_jsonc.py +12 -0
- pz_core/authoring/templates/project/readme.py +94 -0
- pz_core/authoring/templates/project/root_gitkeep.py +8 -0
- pz_core/authoring/templates/shared/__init__.py +5 -0
- pz_core/authoring/templates/shared/text.py +10 -0
- pz_core/authoring/venv_service.py +87 -0
- pz_core/authoring/workspace.py +167 -0
- pz_core/cli.py +291 -0
- pz_core/cli_options.py +74 -0
- pz_core/core/__init__.py +3 -0
- pz_core/core/errors/__init__.py +5 -0
- pz_core/core/errors/models.py +117 -0
- pz_core/core/events/__init__.py +5 -0
- pz_core/core/events/registry.py +54 -0
- pz_core/core/extensions/__init__.py +51 -0
- pz_core/core/extensions/registry.py +790 -0
- pz_core/core/health/__init__.py +6 -0
- pz_core/core/health/contracts.py +10 -0
- pz_core/core/middlewares/__init__.py +6 -0
- pz_core/core/middlewares/models.py +24 -0
- pz_core/core/routing/__init__.py +5 -0
- pz_core/core/routing/models.py +21 -0
- pz_core/core/settings_contracts.py +25 -0
- pz_core/docs/README.md +20 -0
- pz_core/docs/distribution-README.md +438 -0
- pz_core/docs/pz/345/221/275/344/273/244/346/200/273/350/247/210.md +1011 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/00-pz/346/236/266/346/236/204/346/200/273/347/272/262.md +240 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/01-/347/233/256/345/275/225/344/270/216/345/210/206/345/261/202/350/247/204/350/214/203.md +216 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/02-/345/214/205/344/270/216/345/210/206/345/217/221/350/247/204/350/214/203.md +403 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/03-App/346/234/200/345/260/217/345/255/220/345/214/205/350/247/204/350/214/203.md +571 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/04-Settings/344/270/216/351/205/215/347/275/256/350/247/204/350/214/203.md +1177 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/05-/350/265/204/346/272/220/344/270/216/350/277/220/350/241/214/347/233/256/345/275/225/350/247/204/350/214/203.md +575 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/06-/346/225/260/346/215/256/345/272/223/344/270/216/345/217/257/351/200/211/345/237/272/347/241/200/350/256/276/346/226/275/350/247/204/350/214/203.md +499 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/07-App/346/233/277/346/215/242/350/247/204/350/214/203.md +206 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/08-/345/271/263/345/217/260/347/272/247App/344/270/216/350/277/220/350/241/214/346/227/266/345/215/225/344/276/213/350/247/204/350/214/203.md +445 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/09-CLI/344/270/216Worker/345/205/245/345/217/243/350/247/204/350/214/203.md +950 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/10-/346/265/213/350/257/225/344/270/216/345/245/221/347/272/246/350/247/204/350/214/203.md +1001 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/11-/344/273/223/345/272/223/347/234/237/347/233/270/346/272/220/345/234/260/345/233/276.md +102 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/12-/346/236/204/345/273/272/344/270/216/345/217/221/345/270/203/346/243/200/346/237/245/346/270/205/345/215/225.md +171 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/13-/346/255/243/345/274/217Facade/346/200/273/350/241/250.md +402 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/14-/345/210/206/345/261/202/344/270/216/346/211/251/345/261/225/350/247/204/350/214/203.md +550 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/15-/345/255/220/345/214/205/345/274/200/345/217/221/344/275/277/347/224/250/346/211/213/345/206/214.md +1004 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/16-/346/211/251/345/261/225/347/202/271/346/255/243/345/274/217/345/215/217/350/256/256/346/270/205/345/215/225.md +352 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/17-pz.protocols.v1/346/255/243/345/274/217/345/215/217/350/256/256.md +266 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/18-/346/211/251/345/261/225/347/202/271/345/206/262/347/252/201/350/243/201/345/206/263/346/200/273/350/241/250.md +131 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/19-/351/224/231/350/257/257/347/240/201/344/270/216/350/257/212/346/226/255/345/215/217/350/256/256.md +176 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/20-/347/247/201/346/234/211/345/214/205/344/273/223/344/270/216/347/273/237/344/270/200/350/256/244/350/257/201/351/203/250/347/275/262/350/247/204/350/214/203.md +243 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/21-contrib/347/272/246/345/256/232/344/270/216Provider/346/216/245/345/205/245/350/247/204/350/214/203.md +365 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/22-/345/244/232/345/233/275/350/257/255/350/250/200/350/265/204/346/272/220/346/262/273/347/220/206/344/270/216/346/214/211/351/234/200/345/212/240/350/275/275/350/247/204/350/214/203.md +912 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/23-/351/246/226/345/261/217/345/261/225/347/244/272/344/270/216/351/246/226/345/270/247/347/250/263/345/256/232/350/247/204/350/214/203.md +269 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/24-pz/345/220/257/345/212/250/344/270/216/350/277/220/350/241/214/346/227/266/347/274/226/350/257/221/346/265/201/347/250/213.md +245 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/25-/351/235/242/345/220/221/345/257/271/350/261/241/345/274/200/345/217/221/350/247/204/350/214/203.md +300 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/README.md +98 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/00-legacy_core/346/240/207/345/207/206pip/345/214/205/345/214/226/351/207/215/346/236/204/346/200/273/347/272/262.md +1073 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/01-/347/233/256/345/275/225/344/270/216/345/210/206/345/261/202/351/207/215/346/236/204/346/211/247/350/241/214/346/226/271/346/241/210.md +224 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/02-/345/214/205/344/270/216/345/210/206/345/217/221/350/247/204/350/214/203-/345/220/253/345/216/206/345/217/262/345/217/243/345/276/204.md +671 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/13-/344/270/200/346/254/241/346/200/247/345/256/236/346/226/275/346/270/205/345/215/225.md +387 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/14-/345/255/220/345/214/205/351/200/202/351/205/215/346/224/271/351/200/240/346/270/205/345/215/225.md +592 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/15-infra/350/243/201/345/211/252/344/270/216/350/220/275/344/275/215/346/270/205/345/215/225.md +81 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/19-core/345/215/225/344/270/200/346/255/243/345/274/217/346/226/271/346/241/210/346/224/266/346/225/233/346/211/247/350/241/214/346/270/205/345/215/225.md +161 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/25-/345/215/217/350/256/256/345/210/260/346/272/220/347/240/201/345/267/256/350/267/235/346/270/205/345/215/225.md +377 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/26-cutover/345/256/214/345/267/245/346/243/200/346/237/245/346/270/205/345/215/225.md +117 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/29-/345/244/232/345/233/275/350/257/255/350/250/200/350/265/204/346/272/220/346/262/273/347/220/206/344/270/216/346/214/211/351/234/200/345/212/240/350/275/275/350/247/204/350/214/203-/345/220/253/350/277/201/347/247/273/347/255/226/347/225/245.md +956 -0
- pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/99-/350/265/204/346/272/220/346/224/266/345/217/243/345/220/216/347/273/255TODO.md +84 -0
- pz_core/docs//345/217/221/347/211/210/345/211/215/346/270/205/345/215/225-4.0.11.md +84 -0
- pz_core/docs//346/226/260/346/211/213/346/214/207/345/215/227.md +422 -0
- pz_core/infra/__init__.py +17 -0
- pz_core/infra/db/__init__.py +23 -0
- pz_core/infra/db/contracts.py +73 -0
- pz_core/infra/health/__init__.py +5 -0
- pz_core/infra/health/contracts.py +8 -0
- pz_core/infra/kv/__init__.py +5 -0
- pz_core/infra/kv/contracts.py +17 -0
- pz_core/infra/observability/__init__.py +23 -0
- pz_core/infra/observability/contracts.py +142 -0
- pz_core/infra/resilience/__init__.py +5 -0
- pz_core/infra/resilience/contracts.py +17 -0
- pz_core/infra/resources/__init__.py +5 -0
- pz_core/infra/resources/contracts.py +16 -0
- pz_core/infra/settings/__init__.py +17 -0
- pz_core/infra/settings/models.py +81 -0
- pz_core/infra/storage/__init__.py +5 -0
- pz_core/infra/storage/ports.py +27 -0
- pz_core/project_root_commands.py +282 -0
- pz_core/project_runtime_cli.py +344 -0
- pz_core/project_sources.py +253 -0
- pz_core/pz_launcher.py +209 -0
- pz_core/root_cli.py +70 -0
- pz_core/runtime/__init__.py +229 -0
- pz_core/runtime/access.py +86 -0
- pz_core/runtime/adapters/__init__.py +5 -0
- pz_core/runtime/adapters/base.py +18 -0
- pz_core/runtime/asyncio_bridge.py +18 -0
- pz_core/runtime/bindings/__init__.py +5 -0
- pz_core/runtime/bindings/container.py +50 -0
- pz_core/runtime/cli/__init__.py +5 -0
- pz_core/runtime/cli/_args.py +67 -0
- pz_core/runtime/cli/app_commands.py +417 -0
- pz_core/runtime/cli/check.py +214 -0
- pz_core/runtime/cli/db.py +297 -0
- pz_core/runtime/cli/main.py +89 -0
- pz_core/runtime/cli/resources.py +280 -0
- pz_core/runtime/discovery.py +23 -0
- pz_core/runtime/environment_integrity.py +157 -0
- pz_core/runtime/errors.py +5 -0
- pz_core/runtime/events.py +87 -0
- pz_core/runtime/facades/__init__.py +38 -0
- pz_core/runtime/facades/_capabilities.py +46 -0
- pz_core/runtime/facades/cache.py +103 -0
- pz_core/runtime/facades/database.py +71 -0
- pz_core/runtime/facades/events.py +380 -0
- pz_core/runtime/facades/health.py +101 -0
- pz_core/runtime/facades/mail.py +121 -0
- pz_core/runtime/facades/observability.py +102 -0
- pz_core/runtime/facades/providers.py +75 -0
- pz_core/runtime/facades/resources.py +52 -0
- pz_core/runtime/facades/storage.py +296 -0
- pz_core/runtime/health/__init__.py +5 -0
- pz_core/runtime/health/service.py +102 -0
- pz_core/runtime/host.py +188 -0
- pz_core/runtime/host_runner.py +282 -0
- pz_core/runtime/http/__init__.py +20 -0
- pz_core/runtime/http/app.py +576 -0
- pz_core/runtime/http_timing.py +173 -0
- pz_core/runtime/invocation.py +29 -0
- pz_core/runtime/json_safe.py +47 -0
- pz_core/runtime/lifecycle/__init__.py +25 -0
- pz_core/runtime/lifecycle/manager.py +533 -0
- pz_core/runtime/plan.py +214 -0
- pz_core/runtime/plan_context.py +33 -0
- pz_core/runtime/plan_snapshot.py +177 -0
- pz_core/runtime/registries/__init__.py +27 -0
- pz_core/runtime/registries/capabilities.py +101 -0
- pz_core/runtime/registries/providers.py +396 -0
- pz_core/runtime/resource_assets.py +344 -0
- pz_core/runtime/run_cli.py +211 -0
- pz_core/runtime/settings.py +888 -0
- pz_core/runtime/worker/__init__.py +21 -0
- pz_core/runtime/worker/engine.py +921 -0
- pz_core/runtime/worker/runtime.py +25 -0
- pz_core/testing/__init__.py +15 -0
- pz_core/testing/doc_route_contracts.py +305 -0
- pz_core/utils/__init__.py +44 -0
- pz_core/utils/env.py +65 -0
- pz_core/utils/project_jsonc/__init__.py +29 -0
- pz_core/utils/project_jsonc/document.py +420 -0
- pz_core/utils/project_settings.py +99 -0
- pz_foundation/__init__.py +50 -0
- pz_foundation/_contracts.py +81 -0
- pz_foundation/_errors.py +34 -0
- pz_foundation/api.py +14 -0
- pz_foundation/apps.py +127 -0
- pz_foundation/auth/__init__.py +1 -0
- pz_foundation/cache_control.py +233 -0
- pz_foundation/cli/__init__.py +2 -0
- pz_foundation/cli/workers.py +565 -0
- pz_foundation/configs/__init__.py +0 -0
- pz_foundation/configs/default.env +15 -0
- pz_foundation/configs/default.jsonc +452 -0
- pz_foundation/db/__init__.py +94 -0
- pz_foundation/db/aerich_executor.py +664 -0
- pz_foundation/db/config.py +358 -0
- pz_foundation/db/connection_manager.py +689 -0
- pz_foundation/db/connection_probe.py +204 -0
- pz_foundation/db/database.py +1291 -0
- pz_foundation/db/deps.py +47 -0
- pz_foundation/db/lifecycle_status.py +85 -0
- pz_foundation/db/migrations.py +477 -0
- pz_foundation/db/mysql.py +57 -0
- pz_foundation/db/postgresql.py +409 -0
- pz_foundation/db/production_pool_fallback.py +143 -0
- pz_foundation/db/public.py +45 -0
- pz_foundation/db/session.py +369 -0
- pz_foundation/db/sqlite.py +15 -0
- pz_foundation/db/tortoise_manager.py +724 -0
- pz_foundation/db/tortoise_psycopg.py +148 -0
- pz_foundation/docs/README.md +18 -0
- pz_foundation/docs/distribution-README.md +319 -0
- pz_foundation/docs/infra/350/243/201/345/211/252/344/270/216/350/220/275/344/275/215/350/257/264/346/230/216.md +39 -0
- pz_foundation/docs//345/205/254/345/274/200/345/205/215/350/264/271/346/216/245/345/217/243/351/230/262/346/273/245/347/224/250/344/270/216/344/272/272/346/234/272/346/240/241/351/252/214.md +680 -0
- pz_foundation/docs//350/256/276/350/256/241/346/226/207/346/241/243.md +288 -0
- pz_foundation/docs//350/267/257/347/224/261/344/270/216URL/345/244/204/347/220/206/350/247/204/350/214/203.md +119 -0
- pz_foundation/health.py +105 -0
- pz_foundation/host/__init__.py +11 -0
- pz_foundation/host/builder.py +34 -0
- pz_foundation/host/cache_runtime.py +44 -0
- pz_foundation/host/db/__init__.py +17 -0
- pz_foundation/host/db/aerich_config.py +36 -0
- pz_foundation/host/db/config.py +106 -0
- pz_foundation/host/db/connection_manager.py +48 -0
- pz_foundation/host/db/deps.py +5 -0
- pz_foundation/host/db/orm_retry_patch.py +566 -0
- pz_foundation/host/db/request_adapter.py +325 -0
- pz_foundation/host/db/router.py +28 -0
- pz_foundation/host/db/session.py +284 -0
- pz_foundation/host/db/tortoise_manager.py +10 -0
- pz_foundation/host/idempotency.py +132 -0
- pz_foundation/host/lifespan.py +247 -0
- pz_foundation/host/redis_runtime.py +100 -0
- pz_foundation/host/web.py +790 -0
- pz_foundation/infra_provider.py +236 -0
- pz_foundation/kv/__init__.py +25 -0
- pz_foundation/kv/cache.py +1166 -0
- pz_foundation/kv/deps.py +84 -0
- pz_foundation/kv/public.py +25 -0
- pz_foundation/kv/redis_manager.py +1531 -0
- pz_foundation/lazy_exports.py +43 -0
- pz_foundation/lazy_imports.py +124 -0
- pz_foundation/lifecycle.py +392 -0
- pz_foundation/managed_workers.py +1117 -0
- pz_foundation/middlewares/__init__.py +26 -0
- pz_foundation/middlewares/_settings.py +250 -0
- pz_foundation/middlewares/analytics.py +124 -0
- pz_foundation/middlewares/cache_control.py +156 -0
- pz_foundation/middlewares/compression.py +202 -0
- pz_foundation/middlewares/cors.py +62 -0
- pz_foundation/middlewares/geo_country.py +44 -0
- pz_foundation/middlewares/inner_router.py +50 -0
- pz_foundation/middlewares/rate_limited/__init__.py +3 -0
- pz_foundation/middlewares/rate_limited/key_limiter.py +115 -0
- pz_foundation/middlewares/request_logging.py +104 -0
- pz_foundation/middlewares/route_owner.py +309 -0
- pz_foundation/middlewares/security_csrf.py +44 -0
- pz_foundation/middlewares/security_headers/__init__.py +4 -0
- pz_foundation/middlewares/security_headers/conflicts.py +44 -0
- pz_foundation/middlewares/security_headers/csp_nonce.py +200 -0
- pz_foundation/middlewares/security_headers/security_headers.py +44 -0
- pz_foundation/migrations/__init__.py +1 -0
- pz_foundation/migrations/pz_foundation/__init__.py +1 -0
- pz_foundation/models.py +22 -0
- pz_foundation/notifications/__init__.py +23 -0
- pz_foundation/notifications/email.py +542 -0
- pz_foundation/notifications/public.py +31 -0
- pz_foundation/observability/__init__.py +71 -0
- pz_foundation/observability/http.py +34 -0
- pz_foundation/observability/logger/__init__.py +49 -0
- pz_foundation/observability/logger/_bot_settings.py +126 -0
- pz_foundation/observability/logger/bot_message.py +592 -0
- pz_foundation/observability/logger/core.py +385 -0
- pz_foundation/observability/logger/delivery_audit.py +84 -0
- pz_foundation/observability/logger/feishu_bot.py +199 -0
- pz_foundation/observability/logger/telegram_bot.py +194 -0
- pz_foundation/observability/metrics.py +365 -0
- pz_foundation/observability/runtime.py +68 -0
- pz_foundation/public.py +405 -0
- pz_foundation/resources/__init__.py +12 -0
- pz_foundation/resources/builder.py +900 -0
- pz_foundation/resources/images.py +363 -0
- pz_foundation/root_cli.py +20 -0
- pz_foundation/routing/__init__.py +203 -0
- pz_foundation/routing/canonical.py +486 -0
- pz_foundation/routing/convertors.py +82 -0
- pz_foundation/routing/declarations.py +843 -0
- pz_foundation/routing/exports.py +148 -0
- pz_foundation/routing/loaders.py +138 -0
- pz_foundation/routing/manifest.py +215 -0
- pz_foundation/routing/manifest_provider.py +47 -0
- pz_foundation/routing/mounts.py +101 -0
- pz_foundation/routing/ordering.py +172 -0
- pz_foundation/routing/registry.py +133 -0
- pz_foundation/routing/utils.py +28 -0
- pz_foundation/runtime.py +234 -0
- pz_foundation/settings.py +253 -0
- pz_foundation/settings_normalization.py +130 -0
- pz_foundation/storage/__init__.py +25 -0
- pz_foundation/storage/local.py +209 -0
- pz_foundation/storage/public.py +106 -0
- pz_foundation/storage/s3.py +116 -0
- pz_foundation/storage/service.py +234 -0
- pz_foundation/urls.py +19 -0
- pz_foundation/utils/__init__.py +6 -0
- pz_foundation/utils/merge.py +160 -0
- pz_foundation/worker_replicas.py +55 -0
- pz_settings_center/__init__.py +5 -0
- pz_settings_center/api/__init__.py +5 -0
- pz_settings_center/api/runtime_overrides.py +360 -0
- pz_settings_center/apps.py +28 -0
- pz_settings_center/configs/__init__.py +0 -0
- pz_settings_center/configs/default.env +2 -0
- pz_settings_center/configs/default.jsonc +1 -0
- pz_settings_center/docs/01-settings_center/350/203/275/345/212/233/350/276/271/347/225/214.md +124 -0
- pz_settings_center/docs/README.md +12 -0
- pz_settings_center/docs/distribution-README.md +150 -0
- pz_settings_center/docs//350/256/276/350/256/241/346/226/207/346/241/243.md +48 -0
- pz_settings_center/integration_payload.py +18 -0
- pz_settings_center/project_helpers.py +405 -0
- pz_settings_center/public.py +139 -0
- pz_settings_center/routing_helpers.py +73 -0
- pz_settings_center/runtime_override_provider.py +61 -0
- pz_settings_center/typed_settings.py +324 -0
- pz_settings_center/urls.py +9 -0
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
# 包与分发规范
|
|
2
|
+
|
|
3
|
+
> 本文统一服从最高优先级公约:系统里真正存在的正式单位只有最小子包;`pz` 是负责稳定合同、发现、编译、组装与启动的基础包;顶层源码组织根只用于 Git 管理,不进入运行时 namespace。
|
|
4
|
+
|
|
5
|
+
## 1. 目标
|
|
6
|
+
|
|
7
|
+
`pz` 必须作为标准 Python 安装包分发、安装与运行,而不是需要嵌入业务仓库才能工作的子目录。
|
|
8
|
+
|
|
9
|
+
统一口径:
|
|
10
|
+
|
|
11
|
+
- `pz` 是唯一正式基础包,也是唯一可独立启动的包。
|
|
12
|
+
- `pz` 的开发、依赖锁定、命令执行、构建与测试统一使用 `uv` 管理。
|
|
13
|
+
- 对外分发与安装边界保持标准 `pip install` / wheel / sdist 模型。
|
|
14
|
+
- 除 `pz` 基础包外,其它正式能力统一分发为独立最小子包 `<distribution-name>`。
|
|
15
|
+
- 每个最小子包的目录名、import 包名、`app_id` 统一为 `<app_id>`。
|
|
16
|
+
- 最小子包必须有稳定唯一的身份;新建子包默认让目录名、import 包名与 `app_id` 对齐,但不强制特定技术前缀。
|
|
17
|
+
- 历史子包已发布的 `app_id` 与 import 包名以稳定值为准,不因文档命名口径变化自动迁移。
|
|
18
|
+
|
|
19
|
+
## 2. 包层级
|
|
20
|
+
|
|
21
|
+
本文只定义分发语义、安装模型、稳定 import 面和 wheel 要求。目录结构以 `01-目录与分层规范.md` 为准。
|
|
22
|
+
|
|
23
|
+
正式 distribution 层级:
|
|
24
|
+
|
|
25
|
+
- `pz-cli`
|
|
26
|
+
- `pz` 基础能力的唯一正式 distribution,版本从 `5.0.0` 开始。
|
|
27
|
+
- 一个 wheel 同时包含 `pz_core`、`pz_settings_center` 与 `pz_foundation` Python 包,并暴露 `pz` 命令。
|
|
28
|
+
- 源码分层保持独立,但不再分别构建 `pz-core`、`pz-settings-center`、`pz-foundation` 或 `pz-contrib` wheel。
|
|
29
|
+
- `<distribution-name>`
|
|
30
|
+
- 单个最小子包的正式 distribution。
|
|
31
|
+
- 安装后提供唯一 import 包 `<app_id>`。
|
|
32
|
+
|
|
33
|
+
## 3. 安装模型
|
|
34
|
+
|
|
35
|
+
必须区分两类依赖:
|
|
36
|
+
|
|
37
|
+
- 源码 / 分层依赖:谁的 Python 实现可以直接 import 谁,谁建立在谁的稳定合同之上。
|
|
38
|
+
- distribution 安装依赖:为了给用户提供安装组合,某个 distribution 在 `pip install` 时拉起哪些其它 distribution。
|
|
39
|
+
|
|
40
|
+
正式要求:
|
|
41
|
+
|
|
42
|
+
- `pz_core` 在源码 / 分层意义上始终是基础层,不得直接 import 官方或业务 app 的内部实现。
|
|
43
|
+
- `pip install pz-cli==5.0.0` 安装一个 wheel,并提供 `pz_core`、`pz_settings_center`、`pz_foundation` 与 `pz` console script。
|
|
44
|
+
- `pz-cli` 不会自动安装 `pz_apps` 仓中的业务子包;这些最小子包仍是独立 distribution。
|
|
45
|
+
- 旧 `pz-core`、`pz-settings-center`、`pz-foundation`、`pz-contrib` distribution 已退出正式发布图,旧环境必须重建或迁移。
|
|
46
|
+
- 官方最小子包与业务最小子包对 `pz` 的源码依赖按正式分层管理。
|
|
47
|
+
- 默认安装组合不得被解释为基础层可以反向依赖扩展层实现。
|
|
48
|
+
|
|
49
|
+
## 4. 开发态与发布态
|
|
50
|
+
|
|
51
|
+
开发态允许把最小子包源码导入业务仓,或把上游 checkout 链接到项目中联调。发布态的正式交付单位必须是带明确版本号的 distribution / artifact。
|
|
52
|
+
|
|
53
|
+
正式要求:
|
|
54
|
+
|
|
55
|
+
- 开发态源码拉取与发布态分发必须是两条命令链。
|
|
56
|
+
- 同步源码到本地与发布包不得由同一命令隐式串联。
|
|
57
|
+
- 本地业务源码或 linked checkout 不代表已完成版本化,也不代表可直接部署。
|
|
58
|
+
- 发布链消费版本化 package / wheel / artifact。
|
|
59
|
+
|
|
60
|
+
项目开发与发布的上层命令语义以 `09-CLI与Worker入口规范.md` 和 `15-子包开发使用手册.md` 为准。
|
|
61
|
+
|
|
62
|
+
开发态源码发现的正式口径:
|
|
63
|
+
|
|
64
|
+
- 项目 `installed_apps` 配置条目为 `apps` 时,`apps` 表示扫描目录;运行时只发现 `apps/` 下业务仓真实本地 app 与经过 manifest 校验的可见 binding,物理 `apps/.sources/` 不直接贡献 app。
|
|
65
|
+
- `apps` 只是默认项目配置里的扫描目录条目,不是运行时硬编码入口;项目显式改写 `installed_apps` 时,运行时按改写后的配置展开。
|
|
66
|
+
- `pz dev add <app-or-source>` 编排 `dev source cache` 与 `dev source import`:默认从 `develop` 分支获取源码,先复用并更新当前用户隔离的 `<system-temp>/pz/users/<user-key>/git/<repo_key>` cache,cache miss 才 staged clone;cache root、lock、checkout、owner marker 与 remote identity 都必须验证。cache 以 canonical `repo_key`、full commit 与不可变 resolution ref 交接,import 必须验证该精确 revision,不读取 branch 或 `HEAD`。随后把一个正式最小子包、项目 source mode、provenance 和宿主 dependency/`tool.uv.sources` 作为一个事务原子导入 `apps/<app_id>`。导入结果不包含嵌套 `.git`,其源码由业务仓统一管理;Git provenance 保存 canonical source、exact revision 与 subpath,本地目录 provenance 只保存 `source = "local"`、不可逆 source identity 与 subpath,不保存绝对路径。
|
|
67
|
+
- system-temp Git cache 只作可丢弃获取优化,不参与运行时、项目 binding、发布或源码优先级;cache 更新失败不得静默使用旧 revision。
|
|
68
|
+
- `pz dev init --link --clone-sources`、`pz dev init --link --source-dir <path>` 与 `pz dev link` 将需要保留上游 Git 生命周期的 checkout 固定放在 `apps/.sources/<repo_key>`,并在 `apps/` 下建立项目 binding;默认 `pz dev init` 则导入官方 `pz_apps` 的全部正式最小叶子,不保留 checkout。链接目录时暴露目录,链接单个子包时只暴露该子包,不生成额外 wrapper 源码树。
|
|
69
|
+
- `pz dev unlink` 只移除 linked binding;业务仓拥有的 `apps/<app_id>` 由业务 Git 工作流删除或回退,PZ 不把它当作可删除缓存。
|
|
70
|
+
- `pz dev add/link/branch/update/unlink` 是作者面编排命令;源码事务由 `pz dev source ...` 原子命令拥有,PyCharm/VS Code 投影由 `pz dev ide sync` 原子命令统一拥有,settings 与环境继续复用既有原子命令。
|
|
71
|
+
- `.idea/pz.generated.sources.iml` 为 PyCharm 登记精确 roots;`.vscode/settings.json` 中的 PZ-owned `python.analysis.extraPaths` 为 VS Code 登记项目可见叶子路径。两者都不复制源码、不参与运行时发现、editable 依赖解析、打包或发布,也不登记整个 `.sources` checkout。
|
|
72
|
+
- 若源码扫描范围和当前解释器 `site-packages` 中同时存在同一 `app_id`,源码优先;环境 distribution 只是没有本地源码时的可导入来源。
|
|
73
|
+
- 若项目源码扫描范围内出现多个同名 `app_id` 来源,作者面命令必须要求人工收敛,不能用环境包或路径顺序静默裁决。
|
|
74
|
+
- 开发态运行时只把已装载 app 的 import root 及其本地 path 依赖 import root 纳入 `SettingsSnapshot.import_roots`;本地 path 依赖来自该包依赖声明与最近 source-root `[tool.uv.sources]` 的匹配结果,并递归展开。
|
|
75
|
+
- 不允许因为某个 source-root 被扫描,就把同一 source-root 下所有未声明依赖的包一并加入运行时 import path;可选能力必须仍由拥有者包的正式依赖或惰性扩展入口表达。
|
|
76
|
+
|
|
77
|
+
## 5. 开发工具链
|
|
78
|
+
|
|
79
|
+
`pz` 包在开发、锁定依赖、构建、测试执行层面统一采用 `uv` 管理。
|
|
80
|
+
|
|
81
|
+
正式要求:
|
|
82
|
+
|
|
83
|
+
- `pz` 必须提供标准 `pyproject.toml`。
|
|
84
|
+
- 开发环境统一通过 `pz env sync` 建立。
|
|
85
|
+
- 命令执行统一优先使用正式 `pz` CLI 或 `python -m pz_core`。
|
|
86
|
+
- 构建产物统一优先通过 `uv build` 产出。
|
|
87
|
+
- 依赖锁文件统一采用 `uv.lock`。
|
|
88
|
+
|
|
89
|
+
同时必须满足:
|
|
90
|
+
|
|
91
|
+
- 对外分发仍是标准 wheel / sdist。
|
|
92
|
+
- 用户侧可通过标准 `pip install pz-cli` 安装最小完整命令能力。
|
|
93
|
+
- 运行时行为不能依赖 `uv workspace` 或 `uv` 私有运行时语义。
|
|
94
|
+
|
|
95
|
+
## 6. 官方最小子包
|
|
96
|
+
|
|
97
|
+
官方维护的能力和业务能力一样,统一落成独立最小子包:
|
|
98
|
+
|
|
99
|
+
- distribution:`<distribution-name>`
|
|
100
|
+
- 目录名:`<app_id>`
|
|
101
|
+
- import 包名:`<app_id>`
|
|
102
|
+
- `app_id`:`<app_id>`
|
|
103
|
+
|
|
104
|
+
正式要求:
|
|
105
|
+
|
|
106
|
+
- 官方能力与业务能力在运行时装配模型上完全平权。
|
|
107
|
+
- 官方能力不得以集合层 namespace 作为长期正式 import 面。
|
|
108
|
+
- `pz_contrib` 只视为 `pz` 仓内的源码聚合容器,不是运行时单位。
|
|
109
|
+
- `pz_apps` 与 `pz` 都只是源码组织根。
|
|
110
|
+
|
|
111
|
+
典型官方最小子包类别包括:
|
|
112
|
+
|
|
113
|
+
- settings surface owner
|
|
114
|
+
- infra owner
|
|
115
|
+
- shared site UI owner
|
|
116
|
+
- settings runtime owner
|
|
117
|
+
- auth owner
|
|
118
|
+
- account / profile owner
|
|
119
|
+
- SEO owner
|
|
120
|
+
|
|
121
|
+
## 7. 独立子包
|
|
122
|
+
|
|
123
|
+
外部 business app、第三方 app、独立 app 子包:
|
|
124
|
+
|
|
125
|
+
- 均通过 `installed_apps` 进入系统。
|
|
126
|
+
- 与官方最小子包使用同一套 `apps.py` / `settings.py` / `migrations` 声明约定。
|
|
127
|
+
- 与官方最小子包使用同一套 `settings_center.settings` 读取约定。
|
|
128
|
+
- 可显式替换官方最小子包。
|
|
129
|
+
|
|
130
|
+
独立子包在代码依赖规则上定义为 `integration app`。
|
|
131
|
+
|
|
132
|
+
约束:
|
|
133
|
+
|
|
134
|
+
- 其它 app 不允许直接 import 独立子包内部 Python 模块。
|
|
135
|
+
- 与独立子包的交互只允许通过 capability、facade、events、CLI/task 协议或必要的 HTTP API。
|
|
136
|
+
- 官方最小子包和独立子包不是两套装配模型,而是同一装配模型下的两种公开交互类型。
|
|
137
|
+
|
|
138
|
+
## 8. 非 app 型能力拆分
|
|
139
|
+
|
|
140
|
+
以下能力不应留在 `pz` base 依赖或 base wheel 中:
|
|
141
|
+
|
|
142
|
+
- observability handlers / exporters
|
|
143
|
+
- mail sender integration
|
|
144
|
+
- object storage / cloud backends
|
|
145
|
+
- billing / stripe / external platform clients
|
|
146
|
+
- 其它与外部服务强绑定的 provider 实现
|
|
147
|
+
|
|
148
|
+
正式要求:
|
|
149
|
+
|
|
150
|
+
- 若它们需要作为官方默认实现存在,统一进入某个官方最小子包,例如 official infra owner。
|
|
151
|
+
- 若它们需要独立治理,则进入自己的最小子包 `<app_id>/`。
|
|
152
|
+
- 不引入第三套 `bundles/`、`providers/`、官方重型分发目录概念。
|
|
153
|
+
- base wheel 只保留基础包、最小装配能力、manifest/compiler/adapter glue、标准 CLI。
|
|
154
|
+
|
|
155
|
+
## 9. 源码目录与分发边界
|
|
156
|
+
|
|
157
|
+
目录边界必须和分发边界一致,不能只在 wheel 构建时排除文件。
|
|
158
|
+
|
|
159
|
+
正式要求:
|
|
160
|
+
|
|
161
|
+
- `pz/` 只保留基础包代码与标准安装包入口。
|
|
162
|
+
- 每个最小子包都必须拥有自己的源码根 `<app_id>/`。
|
|
163
|
+
- 每个最小子包内部的正式 Python 包目录也必须叫 `<app_id>/`。
|
|
164
|
+
- 正式 import path 固定为最小子包自己的包名 `<app_id>`。
|
|
165
|
+
- `pz/infra` 只保留薄绑定层,不作为具体实现的长期源码真相源。
|
|
166
|
+
- `infra` 的具体实现统一进入对应最小子包,例如 official infra owner。
|
|
167
|
+
|
|
168
|
+
补充禁止:
|
|
169
|
+
|
|
170
|
+
- 不得在 `pz` 基础包内新增业务或官方能力源码。
|
|
171
|
+
- 不得把任何最小子包重新塞回 `pz` base wheel。
|
|
172
|
+
- 不得通过 build `force-include` 把同一套源码同时喂给基础包与多个集合层壳。
|
|
173
|
+
- 不得通过固定相对路径反推旧集合层 app 根目录。
|
|
174
|
+
|
|
175
|
+
official infra owner 的完整目录结构以 `01-目录与分层规范.md` 为准;`public.py` 的正式导出面以 `13-正式Facade总表.md` 为准。
|
|
176
|
+
|
|
177
|
+
## 10. 最小子包 wheel 契约
|
|
178
|
+
|
|
179
|
+
正式方案:
|
|
180
|
+
|
|
181
|
+
- 不采用 namespace package。
|
|
182
|
+
- `pz` 基础包保持普通 package。
|
|
183
|
+
- 每个最小子包 wheel 只负责产出自己的 `<app_id>/**` 包树。
|
|
184
|
+
|
|
185
|
+
正式要求:
|
|
186
|
+
|
|
187
|
+
- `<app_id>` 必须通过正式 wheel 布局直接成立。
|
|
188
|
+
- `pz` base wheel 不产出任何业务或官方能力型包树。
|
|
189
|
+
- 每个最小子包 wheel 必须只产出自己的 `<app_id>/__init__.py` 与 `<app_id>/**`。
|
|
190
|
+
- 构建脚本不得依赖 `PYTHONPATH` 注入、repo-root 相对路径或手工复制目录来让集合层 namespace 成立。
|
|
191
|
+
- 同一 `app_id` 只允许由一个 wheel 提供。
|
|
192
|
+
- core wheel 与最小子包 wheel 不得同时提供同一路径文件。
|
|
193
|
+
|
|
194
|
+
禁止:
|
|
195
|
+
|
|
196
|
+
- 依赖源码 checkout 目录运行来证明集合层 import path 可用。
|
|
197
|
+
- 依赖 `sys.path` 注入、editable 模式特例或 vendored 目录结构补齐集合层 namespace。
|
|
198
|
+
- 让独立子包通过复制集合层目录结构伪装成官方组合包成员。
|
|
199
|
+
- 在 base wheel 中放置空壳集合层包,再要求其它 wheel 覆写同一文件。
|
|
200
|
+
|
|
201
|
+
## 11. 入口规范
|
|
202
|
+
|
|
203
|
+
正式入口:
|
|
204
|
+
|
|
205
|
+
- `pz`
|
|
206
|
+
- `python -m pz_core`
|
|
207
|
+
|
|
208
|
+
`pz-cli` distribution 通过 `console_scripts` 提供:
|
|
209
|
+
|
|
210
|
+
```toml
|
|
211
|
+
[project.scripts]
|
|
212
|
+
pz = "pz_core.pz_launcher:main"
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
正式要求:
|
|
216
|
+
|
|
217
|
+
- `pyproject.toml` 必须显式声明入口,不依赖目录执行。
|
|
218
|
+
- 所有正式脚本必须直接落到同一个 CLI 真相源。
|
|
219
|
+
- 所有用户文档、README、示例命令、帮助文案优先使用 `pz ...`。
|
|
220
|
+
- `python -m pz_core` 只作为技术入口复用同一正式 CLI 真相源,不作为第二套主路径。
|
|
221
|
+
- extras 命名与 `pyproject.toml` 中实际声明保持一致。
|
|
222
|
+
|
|
223
|
+
非正式入口不得出现在主帮助文案与正式教程中。
|
|
224
|
+
|
|
225
|
+
## 12. 项目上下文发现
|
|
226
|
+
|
|
227
|
+
CLI 查找项目上下文固定遵循以下优先级:
|
|
228
|
+
|
|
229
|
+
1. `--project-dir`
|
|
230
|
+
2. `PZ_PROJECT_DIR`
|
|
231
|
+
3. 当前目录向上搜索项目标记文件
|
|
232
|
+
|
|
233
|
+
项目标记文件唯一采用:
|
|
234
|
+
|
|
235
|
+
- `pz.jsonc`
|
|
236
|
+
|
|
237
|
+
不得默认假设:
|
|
238
|
+
|
|
239
|
+
- 当前目录必定是项目根。
|
|
240
|
+
- 项目根下一定存在 `app/`。
|
|
241
|
+
- 项目根下一定存在源码 checkout。
|
|
242
|
+
|
|
243
|
+
## 13. 项目配置文件
|
|
244
|
+
|
|
245
|
+
正式项目配置文件:
|
|
246
|
+
|
|
247
|
+
- `pz.jsonc`
|
|
248
|
+
- `pz.{PZ_ENV}.jsonc`
|
|
249
|
+
|
|
250
|
+
正式规则:
|
|
251
|
+
|
|
252
|
+
- 结构化配置放 JSONC。
|
|
253
|
+
- 敏感值与环境差异通过 `.env` / `.env.{PZ_ENV}` 或环境变量覆盖。
|
|
254
|
+
- `.env` 主要承载敏感值与开发便捷覆盖,不承载全部系统配置。
|
|
255
|
+
- app 私有配置统一进入其 `app_id` namespace。
|
|
256
|
+
|
|
257
|
+
## 14. 默认 app 策略
|
|
258
|
+
|
|
259
|
+
`pz` base 不默认内置业务 app。
|
|
260
|
+
|
|
261
|
+
正式规则:
|
|
262
|
+
|
|
263
|
+
- `installed_apps` 默认为空列表或由项目模板显式生成。
|
|
264
|
+
- 项目通过 `pz.jsonc` 显式声明需要的 app。
|
|
265
|
+
- 官方扩展组合由项目安装和 `installed_apps` 显式表达。
|
|
266
|
+
|
|
267
|
+
不采用:
|
|
268
|
+
|
|
269
|
+
- 在基础包默认设置中硬编码业务 `app`。
|
|
270
|
+
- 把大量官方 app 与业务 app 混在基础包默认装载清单中。
|
|
271
|
+
|
|
272
|
+
## 15. wheel / 安装要求
|
|
273
|
+
|
|
274
|
+
必须保证:
|
|
275
|
+
|
|
276
|
+
- 安装后可在 `site-packages` 中正常运行。
|
|
277
|
+
- 包目录可视为只读。
|
|
278
|
+
- 运行时不会尝试写回 `site-packages` 或源包目录。
|
|
279
|
+
- 构建产物不依赖 uv workspace 语义才能被普通 `pip install` 使用。
|
|
280
|
+
- wheel 安装后不需要额外执行初始化命令才能得到标准 CLI 入口。
|
|
281
|
+
- CLI 与迁移工具不会假设存在可写的 repo-root 合并目录。
|
|
282
|
+
- CLI 不通过修改 `PYTHONPATH` 或扫描包内 git 仓目录弥补项目边界不清晰。
|
|
283
|
+
|
|
284
|
+
wheel 中必须包含运行所需非 Python 资源:
|
|
285
|
+
|
|
286
|
+
- `templates/`
|
|
287
|
+
- `static/`
|
|
288
|
+
- `locales/`
|
|
289
|
+
- `migrations/`
|
|
290
|
+
- `configs/`
|
|
291
|
+
|
|
292
|
+
补充要求:
|
|
293
|
+
|
|
294
|
+
- 资源不会要求运行时写回同目录。
|
|
295
|
+
- asset build / migrations merge / templates merge 的输出目录都在外部 runtime/cache 目录。
|
|
296
|
+
- 包内源码组织目录不得被 CLI 当项目工作目录默认扫描。
|
|
297
|
+
|
|
298
|
+
## 16. extras 分层
|
|
299
|
+
|
|
300
|
+
目标不是一个超大全依赖包,而是轻量 base 加显式能力组合。
|
|
301
|
+
|
|
302
|
+
正式要求:
|
|
303
|
+
|
|
304
|
+
- base 仅包含最小运行所需。
|
|
305
|
+
- DB 驱动独立 extra。
|
|
306
|
+
- Redis 独立 extra。
|
|
307
|
+
- 观测能力独立 extra。
|
|
308
|
+
- 官方完整组合通过 `contrib` 或 `full` 类 extra 显式提供。
|
|
309
|
+
- SQLite 不要求额外第三方驱动。
|
|
310
|
+
- `aerich`、`asyncpg`、`asyncmy`、`redis`、`boto3`、`fastapi-mail`、`prefect`、`stripe` 等模块化依赖不得进入 base。
|
|
311
|
+
|
|
312
|
+
不在正式默认目标内:
|
|
313
|
+
|
|
314
|
+
- zipimport / zip-safe 运行。
|
|
315
|
+
|
|
316
|
+
## 17. 公共 API 与导入边界
|
|
317
|
+
|
|
318
|
+
稳定公共 import 面:
|
|
319
|
+
|
|
320
|
+
- `pz`
|
|
321
|
+
- `pz.app`
|
|
322
|
+
- 文档中声明的 `<app>.public`
|
|
323
|
+
|
|
324
|
+
默认不承诺稳定的 import 面:
|
|
325
|
+
|
|
326
|
+
- `pz.runtime.*`
|
|
327
|
+
- `pz.assembly.*`
|
|
328
|
+
- `pz.core.*`
|
|
329
|
+
- `pz.infra.*`
|
|
330
|
+
- 官方 app / 独立子包的内部实现模块。
|
|
331
|
+
- 任意未在文档中声明为 stable 的路径。
|
|
332
|
+
|
|
333
|
+
正式要求:
|
|
334
|
+
|
|
335
|
+
- 文档和代码层都必须把公共 API 收口到少量稳定入口。
|
|
336
|
+
- 如果外部项目确需依赖某能力,应先把它提升到 `public.py`,而不是扩散多种公共入口样式。
|
|
337
|
+
- app 的稳定公共入口只允许 `<app>.public`。
|
|
338
|
+
|
|
339
|
+
不再把以下路径当作外部稳定导出候选:
|
|
340
|
+
|
|
341
|
+
- `api.py`
|
|
342
|
+
- `ports.py`
|
|
343
|
+
- `sdk/`
|
|
344
|
+
- `service.py`
|
|
345
|
+
- `manager.py`
|
|
346
|
+
|
|
347
|
+
这些模块若存在,只能服务于内部实现拆分,不构成跨包稳定契约。
|
|
348
|
+
|
|
349
|
+
## 18. 构建与发布
|
|
350
|
+
|
|
351
|
+
要求:
|
|
352
|
+
|
|
353
|
+
- 同时支持构建 wheel 与 sdist。
|
|
354
|
+
- wheel 内容应由 CI 自动校验。
|
|
355
|
+
- 非 Python 资源通过正式包数据机制打包,并通过 `importlib.resources` 读取。
|
|
356
|
+
- 发布元数据围绕最终安装者,而不是围绕 monorepo 开发者。
|
|
357
|
+
- extras 的命名、说明、依赖集合必须在文档和 `pyproject.toml` 中保持一致。
|
|
358
|
+
|
|
359
|
+
发布前必须自动验证:
|
|
360
|
+
|
|
361
|
+
- wheel 内容。
|
|
362
|
+
- `console_scripts`。
|
|
363
|
+
- extras 依赖解析。
|
|
364
|
+
- 非源码目录 smoke run。
|
|
365
|
+
- base-only 安装 smoke。
|
|
366
|
+
- 最小子包 wheel import contract。
|
|
367
|
+
|
|
368
|
+
## 19. 版本治理
|
|
369
|
+
|
|
370
|
+
正式规则:
|
|
371
|
+
|
|
372
|
+
- 一个 Git 仓库可以承载多个最小子包,但发布、版本、release commit、tag 与 distribution 的正式单位始终是单个最小子包。
|
|
373
|
+
- 每个最小子包自己的 `[project].version` 是该 distribution 的唯一 release version 真相源;仓库根版本不得覆盖叶子版本。
|
|
374
|
+
- 同仓最小子包共享 Git 历史但拥有独立 distribution 版本与发布生命周期;独立版本不要求拆分 Git 仓库。
|
|
375
|
+
- `pz app add/update` 未指定 `--version` 时解析正式 index 中最新兼容稳定版,指定时只接受一个精确 PEP 440 版本;两条路径最终都写入 exact project pin 与 `uv.lock`,不得持久化浮动 `latest`。
|
|
376
|
+
- `pz app versions <app_id>` 是查看 available/latest/declared/locked/installed 版本的只读原子命令。
|
|
377
|
+
- `pz pub <app_id>` 是单包发布编排命令,固定组合 package-scoped commit、annotated package tag 与 build/upload 原子能力。
|
|
378
|
+
- 发布解析优先接受 `project_dir` Git root 中根 distribution 的精确匹配,否则枚举 `apps/.sources` 并复用正式 workspace 子包发现程序;不得另建扫描协议或回退发布 `apps/<app_id>` 业务复制目录。
|
|
379
|
+
- 根 distribution 的 release commit 使用显式 `.` 整仓 scope;嵌套最小子包只允许包含目标路径,同仓其他子包修改不得被隐式提交。
|
|
380
|
+
- package tag 固定为 `<distribution-name>@<version>`,并且必须与 release commit、当前 HEAD、`project.version`、wheel metadata 和已发布版本一致;build/upload 从当前干净 checkout 直接执行,不创建临时 worktree。
|
|
381
|
+
- `pz pub` 不自动选择或升级版本号,不自动生成 changelog,不执行 `git push`。
|
|
382
|
+
- commit/tag/upload 中途失败不得通过 reset、amend、删 tag 或历史改写回滚;精确匹配的已完成阶段由重跑幂等复用。
|
|
383
|
+
- 稳定公共契约的破坏性变更只能通过主版本引入。
|
|
384
|
+
- `required_pz` 作为 app 级版本约束。
|
|
385
|
+
- `pz` 基础层遵循 core freeze / extension-first 治理。
|
|
386
|
+
- 新增业务能力、平台能力、provider 实现、共享 middleware,默认通过官方扩展包或业务最小子包发布。
|
|
387
|
+
- 官方扩展包必须直接表现为最小子包 `<app_id>`;它们属于扩展层,不属于 `pz` 内核。
|
|
388
|
+
- 发布说明中维护本版本新增的正式契约、移除的旧入口和升级影响。
|
|
389
|
+
|
|
390
|
+
## 20. 外部 app 信任模型
|
|
391
|
+
|
|
392
|
+
外部 app / 独立子包本质上是可执行 Python 代码,`installed_apps` 不是安全沙箱。
|
|
393
|
+
|
|
394
|
+
正式要求:
|
|
395
|
+
|
|
396
|
+
- 文档中明确:外部 app 的引入属于受信代码接入。
|
|
397
|
+
- `pz` base 不承担第三方 app 的安全审计职责。
|
|
398
|
+
- 项目侧维护允许装载的 app 白名单/供应源策略。
|
|
399
|
+
- 第三方 app 至少声明:
|
|
400
|
+
- 版本。
|
|
401
|
+
- `required_pz`。
|
|
402
|
+
- 公开 API 面。
|
|
403
|
+
- 迁移/数据影响面。
|