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,84 @@
|
|
|
1
|
+
# 99-资源收口后续 TODO
|
|
2
|
+
|
|
3
|
+
状态:Active Todo
|
|
4
|
+
|
|
5
|
+
本文档只记录 `pz` 资源主链在本轮收口后,仍待继续完成的正式问题。
|
|
6
|
+
|
|
7
|
+
正式设计真相仍以:
|
|
8
|
+
|
|
9
|
+
- `05-资源与运行目录规范.md`
|
|
10
|
+
- `31-pz启动与运行时编译流程.md`
|
|
11
|
+
|
|
12
|
+
为准。
|
|
13
|
+
|
|
14
|
+
## 1. `resource.contribution` 协议仍是旧模型
|
|
15
|
+
|
|
16
|
+
当前 `ResourceContributionSpec` 仍只提供:
|
|
17
|
+
|
|
18
|
+
- `templates_dir`
|
|
19
|
+
- `static_dir`
|
|
20
|
+
- `locales_dir`
|
|
21
|
+
- `migrations_dir`
|
|
22
|
+
|
|
23
|
+
对应入口:
|
|
24
|
+
|
|
25
|
+
- `pz/core/extensions/registry.py::ResourceContributionSpec`
|
|
26
|
+
- `pz/assembly/extensions/compiler.py::_coerce_resource_contribution_spec`
|
|
27
|
+
|
|
28
|
+
这和当前资源主链已经统一到:
|
|
29
|
+
|
|
30
|
+
- `resources.items`
|
|
31
|
+
- `ResourceSource.items`
|
|
32
|
+
- `ResourceManifest.items`
|
|
33
|
+
|
|
34
|
+
的正式模型不一致。
|
|
35
|
+
|
|
36
|
+
### 需要完成的事
|
|
37
|
+
|
|
38
|
+
1. 把 `resource.contribution` 收口到统一资源项协议。
|
|
39
|
+
2. 评估该协议是否应直接声明资源项列表,而不是四个固定目录字段。
|
|
40
|
+
3. 补上 `pages`、`template_config` 与后续统一资源项的扩展能力。
|
|
41
|
+
4. 删除固定字段心智,避免扩展点再次分叉出第二套资源模型。
|
|
42
|
+
|
|
43
|
+
## 2. `ResourceManifest.items` 还没有携带项目级来源聚合
|
|
44
|
+
|
|
45
|
+
当前 `compile_resource_manifest()` 创建 `manifest.items` 时,`source_dirs` 固定为空元组。
|
|
46
|
+
|
|
47
|
+
对应入口:
|
|
48
|
+
|
|
49
|
+
- `pz/assembly/resources/compiler.py::compile_resource_manifest`
|
|
50
|
+
|
|
51
|
+
当前只有:
|
|
52
|
+
|
|
53
|
+
- `manifest.sources[*].items`
|
|
54
|
+
|
|
55
|
+
持有每个 app 的实际来源目录集合。
|
|
56
|
+
|
|
57
|
+
这意味着:
|
|
58
|
+
|
|
59
|
+
- `ResourceManifest.items` 更像项目级输出项索引
|
|
60
|
+
- 还不是完整的“项目级资源项结果”
|
|
61
|
+
|
|
62
|
+
### 需要完成的事
|
|
63
|
+
|
|
64
|
+
1. 决定 `ResourceManifest.items` 是否应聚合项目级 `source_dirs`。
|
|
65
|
+
2. 如果应聚合,明确聚合顺序是否按 `installed_apps` 顺序保留。
|
|
66
|
+
3. 如果不聚合,就在 contract 和文档里进一步明确:
|
|
67
|
+
- `manifest.items` 只表达项目级输出
|
|
68
|
+
- `manifest.sources[*].items` 才表达来源明细
|
|
69
|
+
|
|
70
|
+
## 3. 资源消费方契约测试仍偏少
|
|
71
|
+
|
|
72
|
+
当前资源层已有 compiler contract tests,但消费方尚未充分验证:
|
|
73
|
+
|
|
74
|
+
- 页面域是否消费 `ResourceManifest`
|
|
75
|
+
- 模板配置域是否消费 `ResourceManifest`
|
|
76
|
+
- 运行时 facade 是否只依赖新模型
|
|
77
|
+
|
|
78
|
+
### 需要完成的事
|
|
79
|
+
|
|
80
|
+
1. 增加跨子系统契约测试,而不只测 resource compiler。
|
|
81
|
+
2. 至少覆盖:
|
|
82
|
+
- `pz_page_center` 的页面声明消费
|
|
83
|
+
- `pz_page_center` 的模板配置消费
|
|
84
|
+
- 新资源项模型在 runtime/facade 层的可用性
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# 4.0.11 发版前清单
|
|
2
|
+
|
|
3
|
+
> 设计迁移状态(2026-07-13):本文只保留 4.0.11 拆分 wheel 发布记录,不是 5.0.0 当前合同;当前基础包只发布 `pz-cli` 单 wheel。其中 `pz pub` 命令序列对应当时的 build/upload-only 实现,不包含新的 package-scoped commit、annotated tag 与 `pub upload` 原子阶段,不得把本清单当作新版本可直接执行模板。
|
|
4
|
+
|
|
5
|
+
本次发版目标:
|
|
6
|
+
|
|
7
|
+
- `pz==4.0.11`
|
|
8
|
+
- `pz-contrib==4.0.11`
|
|
9
|
+
- 本批 release manifest 中的官方最小子包统一提升到 `4.0.11`
|
|
10
|
+
- 薄安装 distribution 改为 `pz-cli==4.0.11`
|
|
11
|
+
|
|
12
|
+
正式安装口径:
|
|
13
|
+
|
|
14
|
+
- distribution 安装名:`pz-cli`
|
|
15
|
+
- 实际命令名:`pz`
|
|
16
|
+
- 真相源入口:`pz_core.cli:main`
|
|
17
|
+
|
|
18
|
+
升级说明:
|
|
19
|
+
|
|
20
|
+
- 终端用户安装方式从 `uv tool install pz` / `pip install pz` 收口为 `uv tool install pz-cli` / `pip install pz-cli`
|
|
21
|
+
- 已安装后的使用命令不变,仍然执行 `pz ...`
|
|
22
|
+
- `pz_contrib` 共享默认值已去业务化;业务默认值继续落在宿主 `pz.jsonc` 或业务 app 自己的默认配置
|
|
23
|
+
|
|
24
|
+
回滚说明:
|
|
25
|
+
|
|
26
|
+
- 若本次发布后需要回滚,先回退安装入口 distribution 到上一版 `pz-cli`
|
|
27
|
+
- 再按依赖反向顺序回退 `pz`、`pz-contrib` 与本批次已发布的官方最小子包
|
|
28
|
+
- 宿主项目回退后必须重新执行正式重装与健康检查
|
|
29
|
+
|
|
30
|
+
版本范围说明:
|
|
31
|
+
|
|
32
|
+
- release manifest 中的官方最小子包 `required_pz` 统一收口为 `>=4.0.0`
|
|
33
|
+
- `pz` 的 `contrib` extra 统一要求 `pz-contrib>=4.0.0`
|
|
34
|
+
- `pz-contrib` 聚合包统一要求本批次 release manifest 中的官方最小子包 `>=4.0.0`
|
|
35
|
+
|
|
36
|
+
建议发布顺序:
|
|
37
|
+
|
|
38
|
+
1. 先发基础包:`pz`
|
|
39
|
+
2. 再按 release manifest 顺序发布官方最小子包;具体包名与顺序以 owning repo 的 manifest 为准
|
|
40
|
+
3. 再发聚合包:`pz-contrib`
|
|
41
|
+
4. 最后发安装 facade:`pz-cli`
|
|
42
|
+
|
|
43
|
+
顺序说明:
|
|
44
|
+
|
|
45
|
+
- `pz` 是所有正式子包的基础依赖,必须先上传。
|
|
46
|
+
- `pz-contrib` 是聚合 distribution,必须放在最小子包之后。
|
|
47
|
+
- `pz-cli` 只是安装门面 distribution,但会直接依赖 `pz-core` 与完整 `pz-contrib` 集合包;它放在最后上传,是为了确保闭包中的 `pz-settings-center`、`pz-foundation`、`pz-contrib` 与 `pz-core` 都已发布。该闭包不包含 `pz_apps` 业务子包。
|
|
48
|
+
- 官方最小子包之间可能存在交叉依赖,上传阶段按 release manifest 固定顺序串行执行;安装闭环放到整批上传完成后统一验证。
|
|
49
|
+
|
|
50
|
+
可直接执行的 `pz pub` 命令序列:
|
|
51
|
+
|
|
52
|
+
默认先发到 `devpi_dev` 做完整验证;确认无误后,把 `PZ_RELEASE_TARGET` 改成 `devpi_pub`,再原样执行一遍。
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
export PZ_RELEASE_TARGET="${PZ_RELEASE_TARGET:-devpi_dev}"
|
|
56
|
+
set -a
|
|
57
|
+
source <deploy_repo_root>/docker-compose/devpi/.env
|
|
58
|
+
set +a
|
|
59
|
+
|
|
60
|
+
cd <pz_repo_root>
|
|
61
|
+
pz pub pz --target "$PZ_RELEASE_TARGET" --project-dir .
|
|
62
|
+
|
|
63
|
+
cd <pz_contrib_repo_root>
|
|
64
|
+
# 按 release manifest 中声明的顺序逐个发布官方最小子包。
|
|
65
|
+
pz pub <official-app-distribution> --target "$PZ_RELEASE_TARGET" --project-dir .
|
|
66
|
+
pz pub pz-contrib --target "$PZ_RELEASE_TARGET" --project-dir .
|
|
67
|
+
|
|
68
|
+
cd <pz_cli_repo_root>
|
|
69
|
+
pz pub pz-cli --target "$PZ_RELEASE_TARGET" --project-dir .
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
正式发布到公共索引前,先显式切换目标:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
export PZ_RELEASE_TARGET=devpi_pub
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
建议验证:
|
|
79
|
+
|
|
80
|
+
- 在源码仓根执行对应 `pz pub <package> --target devpi_dev`
|
|
81
|
+
- 完成 dev index 上传后,使用干净环境验证 `uv tool install --default-index https://packages.example.test/packages/pub/+simple/ pz-cli`
|
|
82
|
+
- 验证 `pz --help`
|
|
83
|
+
- 验证 `pz dev init`
|
|
84
|
+
- 验证宿主重装与 `pz run` 健康检查
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
# pz 新手指南
|
|
2
|
+
|
|
3
|
+
这份文档给一条最短可执行的新手路径,分成开发线和生产线。
|
|
4
|
+
|
|
5
|
+
如果本指南与正式设计文档冲突,以正式设计文档为准:
|
|
6
|
+
|
|
7
|
+
- [`04-Settings与配置规范`](./pz规范与使用/04-Settings与配置规范.md)
|
|
8
|
+
- [`09-CLI与Worker入口规范`](./pz规范与使用/09-CLI与Worker入口规范.md)
|
|
9
|
+
- [`14-分层与扩展规范`](./pz规范与使用/14-分层与扩展规范.md)
|
|
10
|
+
- [`15-子包开发使用手册`](./pz规范与使用/15-子包开发使用手册.md)
|
|
11
|
+
- [`20-私有包仓与统一认证部署规范`](./pz规范与使用/20-私有包仓与统一认证部署规范.md)
|
|
12
|
+
|
|
13
|
+
先记住正式边界:
|
|
14
|
+
|
|
15
|
+
- 新项目开发线的单一正式入口是:先执行 `bash scripts/install_pz.sh` 安装公开 `pz-cli` distribution,拿到 `pz` 后执行 `pz dev init`。
|
|
16
|
+
- 默认 `pz dev init` 负责项目骨架、默认本地 app、官方 `pz_apps` 全部正式最小叶子导入、托管 settings、初始环境安装与 IDE 投影。
|
|
17
|
+
- 需要保留上游 Git checkout 时显式使用 `pz dev init --link --clone-sources` 或 `pz dev init --link --source-dir <path>`;linked 模式默认基础分支是 `develop`,显式替代值只有 `main`。
|
|
18
|
+
- 开发线需要业务仓接管额外子包源码时使用 `pz dev add`;需要保留上游 checkout 联调时使用 `pz dev link`。
|
|
19
|
+
- 生产线只安装已发布 distribution,不拉开发源码,不保留本地 checkout 作为正式依赖。
|
|
20
|
+
- `pz dev add` 默认从 `develop` 分支更新或创建系统临时 Git cache,再导入一个最小子包到 `apps/<app_id>`,不保留嵌套 `.git`;`pz dev link` 才把 Git checkout 放在 `apps/.sources` 并建立 binding。
|
|
21
|
+
|
|
22
|
+
## 开发线
|
|
23
|
+
|
|
24
|
+
目标:从零安装公开 `pz-cli` distribution,确保全局 `pz` 可直接使用,然后在空目录里直接用 `pz dev init` 建好项目、接入官方源码并启动。
|
|
25
|
+
|
|
26
|
+
### 0. 先检查前置条件
|
|
27
|
+
|
|
28
|
+
开始前至少确认:
|
|
29
|
+
|
|
30
|
+
- 本机已经有可用的 Python
|
|
31
|
+
- 本机已经安装 `uv`
|
|
32
|
+
- 本机已经安装 `git`
|
|
33
|
+
- GitHub SSH key 已配置完成,可以直接访问 `git@github.com:...`
|
|
34
|
+
|
|
35
|
+
建议先跑:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
python --version
|
|
39
|
+
uv --version
|
|
40
|
+
git --version
|
|
41
|
+
ssh -T git@github.com
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 1. 安装 `pz`,并把它接入 PATH
|
|
45
|
+
|
|
46
|
+
当前 devpi 的正式 index 规划是:
|
|
47
|
+
|
|
48
|
+
- `https://packages.example.test/packages/pub/+simple/`:公开读,适合直接安装 `pz`
|
|
49
|
+
- `https://packages.example.test/packages/dev/+simple/`:开发包私有 index
|
|
50
|
+
- `https://packages.example.test/packages/prod/+simple/`:正式包私有 index
|
|
51
|
+
|
|
52
|
+
新手安装 `pz` 时,正式口径固定为安装脚本包装,直接走 `pub`,不需要私有安装凭据:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
bash scripts/install_pz.sh
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
完成后重新打开一个 shell,或执行:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
exec "$SHELL" -l
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
然后确认:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pz --help
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
补充说明:
|
|
71
|
+
|
|
72
|
+
- `pub` 是公开安装面;拿 CLI 不需要 Basic Auth
|
|
73
|
+
- `scripts/install_pz.sh` 会正式安装公开 `pz-cli==5.0.0` distribution;单个 wheel 固定提供 `pz_core`、`pz_settings_center` 与 `pz_foundation`
|
|
74
|
+
- `dev` / `prod` 仍然是私有 index,给内部安装已发布私有包与发布链路使用
|
|
75
|
+
- 如果你后续要安装私有包、发布内部包或使用 `pz pub`,再配置对应的安装/上传账号
|
|
76
|
+
- `pip install pz` 只适合你已经明确管理好解释器和 PATH 的场景;它不是新手正式入口,也不承诺装完后当前 shell 立刻能直接找到 `pz`
|
|
77
|
+
- `pip install pz-cli` / `uv tool install pz-cli` 与安装脚本表达同一条正式安装语义:公开安装 facade 是 `pz-cli`,实际命令仍然是 `pz`,最终仍然进入 `pz_core.cli:main`
|
|
78
|
+
- `pz` 每次执行都会按正式顺序选择 provider:项目 `.venv` -> 项目 dev manifest 里记录的 `apps/.sources/pz` bootstrap runtime -> 当前解释器 `site-packages` -> `uv tool run --from pz-cli pz`
|
|
79
|
+
- 所以检查“刚安装好的 `pz-cli` 是否正常”时,仍然必须离开 `pz` 源码树再执行,避免把源码树遮蔽误判成正式 provider 选择结果。
|
|
80
|
+
- 项目根 `.env` 里的 `DEVPI_OWNER` / `DEVPI_OWNER_PASSWORD` / `DEVPI_INSTALL_USER` / `DEVPI_INSTALL_PASSWORD` 会被 `pz pub`、`pz app add`、`pz app update` 优先复用到正式私有包仓链路里;如果你已经在 shell 里显式导出了这些环境变量,CLI 不会再覆盖它们
|
|
81
|
+
|
|
82
|
+
### 2. 在空目录里直接执行 `pz dev init`
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
mkdir demo_project
|
|
86
|
+
cd demo_project
|
|
87
|
+
pz dev init --project-dir .
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
这就是开发线的新手正式入口。对于空目录,它会一次性完成:
|
|
91
|
+
|
|
92
|
+
- 创建项目骨架:`pyproject.toml`、`main.py`、`pz.jsonc`、`pz.{env}.jsonc`、`.env*`
|
|
93
|
+
- 创建默认本地 app:默认使用当前目录名归一化后的 slug;需要覆盖时可传 `--app-name <slug>`
|
|
94
|
+
- 通过 `dev source cache` 固定官方 `pz_apps` revision,并把全部正式最小叶子导入 `apps/<app_id>`;项目不保留该 Git checkout
|
|
95
|
+
- 默认项目配置声明 `pz_settings_center`、`pz_foundation` 与 `apps`;运行时只发现 `apps/` 下的真实本地 app 和可见受管快捷方式
|
|
96
|
+
- 刷新项目根托管 settings 区块,把默认本地 app 与官方 source-root 的 settings 模板同步进 `pz*.jsonc` / `.env*`
|
|
97
|
+
- 执行一次初始环境安装:创建或复用项目根 `.venv`,安装完整依赖闭包
|
|
98
|
+
- 执行一次 `pz dev ide sync`:已有 `.idea/` 时生成 PyCharm source-root 投影,已有 `.vscode/` 时维护 VS Code `python.analysis.extraPaths`;不存在的 IDE 目录不会由 PZ 创建
|
|
99
|
+
- 刷新 `AGENTS.md`
|
|
100
|
+
- 默认执行完成后可以直接 `pz run`
|
|
101
|
+
|
|
102
|
+
生成结果至少包括:
|
|
103
|
+
|
|
104
|
+
- `main.py`
|
|
105
|
+
- `pyproject.toml`
|
|
106
|
+
- `pz.jsonc`
|
|
107
|
+
- `pz.develop.jsonc`
|
|
108
|
+
- `pz.test.jsonc`
|
|
109
|
+
- `pz.product.jsonc`
|
|
110
|
+
- `.env`
|
|
111
|
+
- `.env.develop`
|
|
112
|
+
- `.env.test`
|
|
113
|
+
- `.env.product`
|
|
114
|
+
- `apps/`
|
|
115
|
+
- `apps/<当前目录名归一化后的 app>/`
|
|
116
|
+
|
|
117
|
+
补充说明:
|
|
118
|
+
|
|
119
|
+
- 默认导入的源码由业务仓统一管理,不保留嵌套 `.git`,PZ 不自动覆盖或更新
|
|
120
|
+
- linked 初始化必须写成 `--link --clone-sources` 或 `--link --source-dir <path>`;两个 source selector 必须且只能出现一个
|
|
121
|
+
- linked 模式的 `[tool.uv.sources]` 只写一个 `pz-cli = { path = "apps/.sources/pz", editable = true }`;不得恢复旧拆分 distribution 的 source 键
|
|
122
|
+
- linked 模式默认基础分支是 `develop`;只有显式 `--base-branch main` 才使用 `main`,业务分支名固定来自 `business_app_id`
|
|
123
|
+
- `pz dev init` 按正式新手流程做幂等收口,不会重复覆盖既有业务源码
|
|
124
|
+
- 如果暂时不跑最终初始环境安装,可显式传 `--no-sync`;后续再执行一次 `pz env install --project-dir .`,IDE 投影同步不因此跳过
|
|
125
|
+
|
|
126
|
+
### 3. 需要更多源码时,选择 `pz dev add` 或 `pz dev link`
|
|
127
|
+
|
|
128
|
+
正式口径下,开发模式直接执行:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
pz dev init --project-dir .
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
这一步默认把官方正式最小子包导入业务仓。额外源码仍必须根据所有权选择导入或链接。
|
|
135
|
+
|
|
136
|
+
希望源码成为当前业务仓的一部分时,执行:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
pz dev add git@github.com:<org>/<repo>.git --project-dir .
|
|
140
|
+
pz dev add ../catalog/pz_page_center --project-dir .
|
|
141
|
+
pz dev add pz_page_center --project-dir .
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
补充说明:
|
|
145
|
+
|
|
146
|
+
- 输入必须唯一解析到一个正式最小子包
|
|
147
|
+
- Git 默认读取 `develop` 分支;系统临时 cache 已存在时先更新,不存在时 clone,再把固定 full revision 的源码导入 `apps/<app_id>`,不带 `.git`
|
|
148
|
+
- cache 只减少网络开销;导入后 `apps/<app_id>` 是业务代码的唯一真相源,cache 更新失败不会静默使用陈旧版本
|
|
149
|
+
- 导入后由业务仓统一管理,PZ 不自动更新、覆盖或删除
|
|
150
|
+
- 任意真实本地 app 或 linked binding 已暴露相同 `app_id` 时直接失败;冲突按 app 身份判断,不按路径名称判断
|
|
151
|
+
|
|
152
|
+
希望继续在上游 Git checkout 上联调时,执行:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
pz dev link git@github.com:<org>/<repo>.git --project-dir .
|
|
156
|
+
pz dev link ../catalog --project-dir .
|
|
157
|
+
pz dev link pz_page_center --base-branch main --project-dir .
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
linked 模式补充说明:
|
|
161
|
+
|
|
162
|
+
- `pz dev link` 默认基础分支是 `develop`,显式替代值只有 `main`
|
|
163
|
+
- 目标业务分支由 manifest 的 `business_app_id` 决定,不接受任意目标分支参数
|
|
164
|
+
- `pz dev link pz_apps` 暴露目录 binding;`pz dev link pz_page_center` 只暴露该叶子 binding
|
|
165
|
+
- checkout 位于 `apps/.sources/<repo_key>`;物理 `.sources` 本身永远不进入运行时 app 发现
|
|
166
|
+
- 已有 checkout 需要重新对齐业务分支时,使用 `pz dev branch <repo-or-app>`
|
|
167
|
+
- 删除 binding 使用 `pz dev unlink <binding>`,不会删除业务仓真实源码
|
|
168
|
+
|
|
169
|
+
### 4. 按需刷新托管配置区块
|
|
170
|
+
|
|
171
|
+
`pz dev init` 会在 scaffold、默认 app 和官方源码基线准备完成后刷新托管配置区块。只有你后面新增了 app、增加了 dev source,或者确实要重建托管配置区块时,才手工执行:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
pz settings update --project-dir .
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
如果你只想处理项目根 `AGENTS.md`,正式命令是:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
pz settings refresh-agents --project-dir .
|
|
181
|
+
pz settings reset-agents --project-dir .
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
边界:
|
|
185
|
+
|
|
186
|
+
- `pz settings refresh-agents` 只刷新根 `AGENTS.md` 的 pz 托管区块,保留用户手写内容
|
|
187
|
+
- `pz settings reset-agents` 直接把根 `AGENTS.md` 重置为当前正式托管块,不保留用户手写内容
|
|
188
|
+
|
|
189
|
+
执行完后,项目根应至少保有:
|
|
190
|
+
|
|
191
|
+
- `pz.jsonc`
|
|
192
|
+
- `pz.develop.jsonc`
|
|
193
|
+
- `pz.test.jsonc`
|
|
194
|
+
- `pz.product.jsonc`
|
|
195
|
+
- `.env`
|
|
196
|
+
- `.env.develop`
|
|
197
|
+
- `.env.test`
|
|
198
|
+
- `.env.product`
|
|
199
|
+
|
|
200
|
+
环境配置说明:
|
|
201
|
+
|
|
202
|
+
- `PZ_ENV` 是唯一正式环境选择变量,可选值固定为 `develop`、`test`、`product`
|
|
203
|
+
- 未显式指定 `PZ_ENV` 时,默认按 `develop` 处理
|
|
204
|
+
- `pz.jsonc` 放项目基础装配和通用非敏感配置
|
|
205
|
+
- `pz.develop.jsonc` / `pz.test.jsonc` / `pz.product.jsonc` 放对应环境的非敏感静态覆盖
|
|
206
|
+
- `.env` 放通用敏感配置基线,例如数据库密码、Redis 密码、第三方密钥
|
|
207
|
+
- `.env.develop` / `.env.test` / `.env.product` 放对应环境自己的敏感覆盖
|
|
208
|
+
- 正式约束是:非敏感配置优先写 JSONC,敏感配置优先写 `.env`
|
|
209
|
+
|
|
210
|
+
覆盖顺序:
|
|
211
|
+
|
|
212
|
+
1. `pz.jsonc`
|
|
213
|
+
2. `pz.{PZ_ENV}.jsonc`
|
|
214
|
+
3. `.env`
|
|
215
|
+
4. `.env.{PZ_ENV}`
|
|
216
|
+
5. 显式环境变量
|
|
217
|
+
|
|
218
|
+
各子包 `configs/default.jsonc` 与 `configs/default.env` 只在 `pz settings init/update` 时读取,用来生成或补全项目根 `pz*.jsonc` 与 `.env*`;启动阶段不直接读取子包默认文件。
|
|
219
|
+
|
|
220
|
+
最终优先级从低到高是:
|
|
221
|
+
|
|
222
|
+
- `pz.jsonc`
|
|
223
|
+
- `pz.{PZ_ENV}.jsonc`
|
|
224
|
+
- 通用 `.env`
|
|
225
|
+
- 环境 `.env`
|
|
226
|
+
- 显式环境变量
|
|
227
|
+
|
|
228
|
+
直接例子:
|
|
229
|
+
|
|
230
|
+
- `database.host`、`project.base_url` 这类非敏感环境差异,放 `pz.product.jsonc`
|
|
231
|
+
- `<infra_owner>__database__password`、`<infra_owner>__cache__password`、`<auth_owner>__oauth_client_secret` 这类敏感值,放 `.env.product`
|
|
232
|
+
- 如果部署平台再显式注入环境变量,那么它会覆盖 `.env.product`
|
|
233
|
+
|
|
234
|
+
补充说明:
|
|
235
|
+
|
|
236
|
+
- 如果你面对的不是一个刚通过 `pz dev init` 创建的新项目,而是一个已经存在、但还没有 `pz.jsonc` 的目录,才适合先跑 `pz env init --project-dir .` 或 `pz settings init --project-dir .`
|
|
237
|
+
- CLI 初始化入口固定为分组命令,统一写成 `pz env init`、`pz app init`、`pz dev init`、`pz settings init` 这类形式。
|
|
238
|
+
- app 导入问题、运行时装配问题、启动链问题,统一留到 `pz run` 或显式运行运行时命令时再处理;不要把这类动作塞回 `pz dev init`
|
|
239
|
+
|
|
240
|
+
### 4.1 项目根命令扩展
|
|
241
|
+
|
|
242
|
+
`pz` 的根命令现在分两层扩展:
|
|
243
|
+
|
|
244
|
+
- app CLI:每个 app 的正式入口固定为 `<app>/cli/*.py`,显式调用形式固定是 `pz <app_id> <tool>`
|
|
245
|
+
- project CLI:项目自己的快捷命令统一写在 `pz.jsonc` 顶层 `commands`
|
|
246
|
+
|
|
247
|
+
例子:
|
|
248
|
+
|
|
249
|
+
```jsonc
|
|
250
|
+
{
|
|
251
|
+
"commands": {
|
|
252
|
+
"hello": "echo hello",
|
|
253
|
+
"test:smoke": ["python", "-m", "pytest", "-q"],
|
|
254
|
+
"worker:smoke": {
|
|
255
|
+
"argv": ["python", "-m", "pytest", "tests/test_worker.py", "-q"],
|
|
256
|
+
"description": "Run worker smoke checks."
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
执行时可以直接写:
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
pz hello
|
|
266
|
+
pz test:smoke
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
补充约束:
|
|
270
|
+
|
|
271
|
+
- 如果某个 app CLI tool 在当前项目里只出现一次,它会自动注册成 `pz <tool>`
|
|
272
|
+
- 如果多个 app 暴露了同名 tool,根命令不会抢占,必须显式写成 `pz <app_id> <tool>`
|
|
273
|
+
- 内建正式命令优先,项目 `commands` 不允许覆盖 `pz run`、`pz dev`、`pz list`、`pz check`、`pz db` 等正式入口
|
|
274
|
+
- `pz --help` 会把这些扩展命令列到 `Extensions:` 小节
|
|
275
|
+
|
|
276
|
+
### 5. 根据需要补做 `pz env install` 或额外 `pz env sync`
|
|
277
|
+
|
|
278
|
+
如果当前项目已经通过 `pz dev init` 走过默认路径,项目根 `.venv` 和全部导入 app 的依赖闭包已经同步过一次。
|
|
279
|
+
|
|
280
|
+
如果你之前在 `pz dev init` 时显式传了 `--no-sync`,或者只是想补做一次正式初始环境安装,直接执行:
|
|
281
|
+
|
|
282
|
+
`--no-sync` 不会提前创建项目根 `.venv`;环境仍由下面的正式原子命令统一创建和同步。
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
pz env install --project-dir .
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
如果你是在后续 `pz dev add` 或 `pz dev link` 之后继续执行:
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
pz env init --project-dir .
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
那么当前项目根以及新增的业务源码或 linked 开发源码根,也会按同一正式口径继续完成托管区刷新和初始环境安装。
|
|
295
|
+
|
|
296
|
+
如果你只是想再次同步依赖,而不需要重做骨架与 settings 刷新,直接执行:
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
pz env sync --project-dir .
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
如果 linked 源码仓也需要单独开发,进入 `pz dev link` 输出的 checkout 根再执行一次:
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# 进入 pz dev link 输出的对应本地 checkout 根目录
|
|
306
|
+
cd ...
|
|
307
|
+
python -m pip install -e .
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### 6. 启动项目
|
|
311
|
+
|
|
312
|
+
普通 `pz` 项目默认直接使用:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
pz run
|
|
316
|
+
pz run develop
|
|
317
|
+
pz run dev
|
|
318
|
+
pz run test
|
|
319
|
+
pz run product
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
这里的正式口径是:
|
|
323
|
+
|
|
324
|
+
- `pz run` / `pz run develop` / `pz run dev` 会进入同一个 develop 环境
|
|
325
|
+
- `pz run test` / `pz run product` 分别进入 test / product
|
|
326
|
+
- 它会直接 handoff 到项目根 `main.py`,不再在外面保留第二层长期父进程
|
|
327
|
+
- 它不会创建第二个宿主入口,也不会替代项目自己的 `main.py`
|
|
328
|
+
- 安装后的 `pz` / `pz` 来自正式 `console_scripts`,不依赖额外 shim 回写
|
|
329
|
+
- 这些命令底层都只是在进入 `main.py` 前显式设置 `PZ_ENV`
|
|
330
|
+
- 其中 `pz run = pz run develop = pz run dev`
|
|
331
|
+
- 规范环境名仍然是 `develop`,`dev` 只是 CLI 别名
|
|
332
|
+
- `pz run test` 对应 `test`,`pz run product` 对应 `product`
|
|
333
|
+
- 运行时 snapshot 中看到的 `project.pz_env` 是编译后的派生结果,不是新的外部选择变量
|
|
334
|
+
|
|
335
|
+
开发线约束:
|
|
336
|
+
|
|
337
|
+
- 业务仓源码接管走 `pz dev add`
|
|
338
|
+
- 上游 checkout 联调走 `pz dev link`
|
|
339
|
+
- 依赖同步走 `pz env sync`
|
|
340
|
+
- 宿主启动命令统一走 `pz run` 三态入口
|
|
341
|
+
- 本地源码 checkout 只属于开发态,不等于已发布产物
|
|
342
|
+
|
|
343
|
+
## 生产线
|
|
344
|
+
|
|
345
|
+
目标:只使用已发布产物部署,不把开发态源码 checkout 带进生产环境。
|
|
346
|
+
|
|
347
|
+
### 1. 准备项目代码与配置文件
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
pz env doctor --project-dir .
|
|
351
|
+
pz env init --project-dir .
|
|
352
|
+
pz settings update --project-dir .
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
然后补齐:
|
|
356
|
+
|
|
357
|
+
- `pz.jsonc`
|
|
358
|
+
- `pz.product.jsonc`
|
|
359
|
+
- `.env`
|
|
360
|
+
- `.env.product`
|
|
361
|
+
|
|
362
|
+
生产环境配置口径:
|
|
363
|
+
|
|
364
|
+
- 启动命令必须显式进入 `product`
|
|
365
|
+
- `product` 不能靠 `.env.product` 文件存在与否自动推导
|
|
366
|
+
- 生产环境的非敏感差异写 `pz.product.jsonc`
|
|
367
|
+
- 生产环境的敏感差异写 `.env.product` 或部署平台显式环境变量
|
|
368
|
+
|
|
369
|
+
### 2. 生产环境只安装已发布 distribution
|
|
370
|
+
|
|
371
|
+
不要在生产环境执行:
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
pz dev add ...
|
|
375
|
+
pz dev link ...
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
正式做法是让项目依赖指向已发布版本,然后安装:
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
pz app versions <app_id> --project-dir .
|
|
382
|
+
pz app add <app_id> --project-dir .
|
|
383
|
+
# 或精确指定
|
|
384
|
+
pz app add <app_id> --version 1.4.2 --project-dir .
|
|
385
|
+
pz env sync --project-dir .
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
`app add` 与 `app update` 都是编排命令:默认选择兼容的最新稳定版本,也可用 `--version` 精确指定;底层版本查询、精确声明和安装仍由可单独执行的原子命令承担。最终项目声明和 `uv.lock` 只记录精确版本,不记录 `latest`。
|
|
389
|
+
|
|
390
|
+
需要发布正式版本时,若当前目录本身就是目标 distribution 的 Git 仓库根,可直接使用;否则先确保目标源码仓已经通过 `apps/.sources/<repo_key>` 暴露为 Git source-root:
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
pz pub <app_id> --target devpi_prod --project-dir .
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
目标发布合同下,这一个编排命令会:
|
|
397
|
+
|
|
398
|
+
1. 优先精确匹配当前 Git 仓库根的 distribution,否则枚举 `apps/.sources` 并复用正式 workspace 子包发现程序唯一定位目标子包;
|
|
399
|
+
2. 根 distribution 提交整仓 `.` scope,嵌套子包只提交目标路径,commit subject 为 `release(<app_id>): <version>`;
|
|
400
|
+
3. 创建 `<distribution-name>@<version>` annotated tag;
|
|
401
|
+
4. 要求当前 checkout clean 且 HEAD 等于 tag commit,直接验证 `project.version` 与 wheel metadata 后上传,不创建临时 worktree。
|
|
402
|
+
|
|
403
|
+
业务仓中的复制目录不是发布源。当前仓库根不匹配且没有 `.sources` Git 仓库、仓库中找不到目标子包、或多个仓库重复发现目标子包都会在 Git mutation 前分别报错。它不会自动升级版本号,也不会执行 `git push`。发布失败后已创建的 commit/tag 会保留;重跑 upload 前必须让干净 HEAD 回到精确 tag commit。
|
|
404
|
+
|
|
405
|
+
### 3. 用正式生产命令启动 `product`
|
|
406
|
+
|
|
407
|
+
```bash
|
|
408
|
+
pz run product
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
生产环境启动也遵循同一原则:
|
|
412
|
+
|
|
413
|
+
- 正式命令固定写成 `pz run product`
|
|
414
|
+
- `product` 必须通过显式命令进入,不能靠文件存在与否猜测
|
|
415
|
+
- 这仍然只是执行项目根 `main.py`,不是额外的生产启动脚本
|
|
416
|
+
|
|
417
|
+
生产线约束:
|
|
418
|
+
|
|
419
|
+
- 正式依赖来源是已发布 distribution,不是本地源码 checkout
|
|
420
|
+
- 发布链正式走 `pz pub`
|
|
421
|
+
- 生产启动命令必须显式进入 `product`
|
|
422
|
+
- 生产问题优先通过正式配置、正式入口、正式发布链解决,不靠开发态 link 或临时路径 hack
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from .settings import (
|
|
4
|
+
InfraContext,
|
|
5
|
+
InfraComponent,
|
|
6
|
+
ResourceItemContract,
|
|
7
|
+
ResilienceSettings,
|
|
8
|
+
ResourceSettings,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"InfraContext",
|
|
13
|
+
"InfraComponent",
|
|
14
|
+
"ResourceItemContract",
|
|
15
|
+
"ResilienceSettings",
|
|
16
|
+
"ResourceSettings",
|
|
17
|
+
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from .contracts import (
|
|
4
|
+
DatabaseAdapter,
|
|
5
|
+
DatabaseMigrationPort,
|
|
6
|
+
DatabaseMigrationSnapshot,
|
|
7
|
+
DatabaseReadinessProbe,
|
|
8
|
+
DatabaseSession,
|
|
9
|
+
DatabaseTransaction,
|
|
10
|
+
DbOwner,
|
|
11
|
+
MigrationSource,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"DatabaseAdapter",
|
|
16
|
+
"DatabaseMigrationPort",
|
|
17
|
+
"DatabaseMigrationSnapshot",
|
|
18
|
+
"DatabaseReadinessProbe",
|
|
19
|
+
"DatabaseSession",
|
|
20
|
+
"DatabaseTransaction",
|
|
21
|
+
"DbOwner",
|
|
22
|
+
"MigrationSource",
|
|
23
|
+
]
|