simple-module-cli 0.0.38__tar.gz → 0.0.39__tar.gz
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.
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/PKG-INFO +3 -3
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/pyproject.toml +3 -3
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-conventions/SKILL.md +11 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-creating/SKILL.md +6 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/service.py.tpl +7 -1
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/conftest.py +15 -0
- simple_module_cli-0.0.39/tests/test_cli_asset_prerequisites.py +19 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_openapi_gen_types.py +2 -2
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_css_build.py +11 -8
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/.gitignore +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/LICENSE +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/README.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/__init__.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_add_install.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_add_sources.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_app_project_manifests.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_env.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_local_env.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_module_build.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_module_host.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_templating.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/add_cmd.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/app_project.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/case.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/catalog.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/cli.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/docker_assets.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/docker_cmd.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/framework_repo.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/git_source.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/module_cmd.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/new.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/openapi_cmd.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/openapi_types.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/package_update.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/pins.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/plugins.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/pypi.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/pyproject_edit.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/recipes.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/requirements.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/scaffolding.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/README.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-cli/SKILL.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-database/SKILL.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-doctor/SKILL.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-inertia-pages/SKILL.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-locales/SKILL.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-migrations/SKILL.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-registries/SKILL.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills/simple-module-testing/SKILL.md +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/skills_cmd.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/Makefile.snippet +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/compose-base-postgres.yml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/compose-base-sqlite.yml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/compose-tasks-postgres.yml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/compose-tasks-sqlite.yml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/compose-worker.yml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/dockerignore +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/host-flat.Dockerfile +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/host.Dockerfile +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/docker/worker.Dockerfile.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/.env.example +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/.gitignore +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/Makefile +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/README.md.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/_optional/background_tasks/run_worker.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/alembic.ini +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/app.tsx +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/main.tsx +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/module-assets.ts +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/package.json.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/pages/Error.tsx +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/pages/Landing.tsx +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/pages.ts +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/styles.css +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/tsconfig.json +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/vite.config.ts +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/client_app/vite.dev-url.ts +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/main.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/migrations/env.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/migrations/script.py.mako +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/migrations/versions/.gitkeep +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/routes.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/templates/index.html +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/.github/workflows/ci.yml +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/.github/workflows/publish.yml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/.gitignore +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/README.md.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/__init__.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/constants.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/contracts/__init__.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/contracts/schemas.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/deps.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/endpoints/views.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/locales/en.json.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/models.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/module.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/pages/Browse.tsx.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/pages/Create.tsx.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/pages/Edit.tsx.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/pages/api.generated.ts.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/pages/api.ts.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/py.typed +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/services.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/__PACKAGE__/settings.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/_optional/framework_repo/LICENSE +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/_optional/framework_repo/README.md.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/_optional/framework_repo/__PACKAGE__/pages/Browse.tsx.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/_optional/framework_repo/__PACKAGE__/pages/Create.tsx.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/_optional/framework_repo/__PACKAGE__/pages/Edit.tsx.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/_optional/framework_repo/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/_optional/standalone/package.json.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/_optional/standalone/tsconfig.json.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/package.json.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/tests/test___PACKAGE__.py.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/tsconfig.json.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/workspace/.env.example +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/workspace/.gitignore +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/workspace/Makefile +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/workspace/README.md.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/workspace/package.json.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/workspace/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/update_cmd.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/uv_workspace.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/wizard.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_build_packaging.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_case.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_add_cmd.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_add_spec_parse.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_add_workspace_member.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_catalog.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_catalog_depends_on.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_docker_assets.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_docker_workers.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_gen_types_scaffold.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_git_scan.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_new.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_new_dest_tolerance.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_new_git_module.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_new_migration_bootstrap.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_new_regressions.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_new_scaffold_layout.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_openapi_export.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_package_update.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_package_update_pins.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_pyproject_edit.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_recipes.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_update_sources.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_vite_port_env.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_wizard.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_wizard_git.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_create_module_ci_skip.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_env_helper.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_framework_repo_wiring.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_cmd_build.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_cmd_e2e.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_cmd_verify.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_css_assets.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_css_subdir_sources.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_npm_aliases.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_pages_manifest.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_no_framework_deps.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_plugin_discovery.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffold_app_tsx_spa_links.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffold_rollback.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffolded_host_setup_wizard.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffolding_framework_repo.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffolding_host.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffolding_module.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffolding_module_js.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_skills_cmd.py +0 -0
- {simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_template_requires_framework.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: simple_module_cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.39
|
|
4
4
|
Summary: Standalone scaffolder for the SimpleModule framework — `smpy new`, `smpy create-module`, plugin host.
|
|
5
5
|
Project-URL: Homepage, https://github.com/antosubash/simple_module_python
|
|
6
6
|
Project-URL: Repository, https://github.com/antosubash/simple_module_python
|
|
@@ -19,8 +19,8 @@ Classifier: Topic :: Software Development :: Code Generators
|
|
|
19
19
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
20
20
|
Classifier: Typing :: Typed
|
|
21
21
|
Requires-Python: >=3.12
|
|
22
|
-
Requires-Dist: tomlkit
|
|
23
|
-
Requires-Dist: typer
|
|
22
|
+
Requires-Dist: tomlkit<0.16,>=0.13
|
|
23
|
+
Requires-Dist: typer<0.28,>=0.12
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
|
|
26
26
|
# simple_module_cli
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "simple_module_cli"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.39"
|
|
4
4
|
description = "Standalone scaffolder for the SimpleModule framework — `smpy new`, `smpy create-module`, plugin host."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
@@ -20,8 +20,8 @@ classifiers = [
|
|
|
20
20
|
"Typing :: Typed",
|
|
21
21
|
]
|
|
22
22
|
dependencies = [
|
|
23
|
-
"typer>=0.12",
|
|
24
|
-
"tomlkit>=0.13",
|
|
23
|
+
"typer>=0.12,<0.28",
|
|
24
|
+
"tomlkit>=0.13,<0.16",
|
|
25
25
|
]
|
|
26
26
|
|
|
27
27
|
[project.scripts]
|
|
@@ -121,6 +121,17 @@ Build a `MailMessage(to, subject, text)` and send it with `current_mail_sender()
|
|
|
121
121
|
|
|
122
122
|
Which module holds the accounts depends on the auth provider (`users` or `keycloak`). To name, look up, search or count users, use `get_user_directory(app)` from `simple_module_core.user_directory`: `get_many(db, ids, with_roles=...)`, `search(db, term, limit=...)`, `match_ids(term)` (a subquery) and `stats(db, active_window=...)`. Name a user with `DirectoryUser.label`. `roles is None` means the provider does not know them (Keycloak) — refuse anything that needs roles rather than treating the user as role-less. Importing `users.models` from another module silently queries an empty table under Keycloak.
|
|
123
123
|
|
|
124
|
+
### 13. Raise domain exceptions from services
|
|
125
|
+
|
|
126
|
+
Define a per-module base error in `<module>/exceptions.py` or `errors.py` and
|
|
127
|
+
subclass it for business failures. Services must not raise `HTTPException`:
|
|
128
|
+
CLI commands, tasks and durable handlers need transport-independent failures.
|
|
129
|
+
Follow `file_storage`: map errors in endpoints or install HTTP handlers through
|
|
130
|
+
`register_exception_handlers(app)`. Preserve status codes, exact JSON bodies,
|
|
131
|
+
headers and translation keys when migrating; translate at the request boundary.
|
|
132
|
+
Endpoint-level `HTTPException` for pure request validation is fine. Inertia
|
|
133
|
+
forms may catch domain errors to report field errors or redirect.
|
|
134
|
+
|
|
124
135
|
## Related skills
|
|
125
136
|
|
|
126
137
|
- **simple-module-database** — per-module Base, mixins, session lifecycle
|
|
@@ -129,4 +129,10 @@ The new module should appear in the registered-modules log line. If it has a vie
|
|
|
129
129
|
- **`name=` collides.** Two modules with the same `ModuleMeta.name` raise `SM008` at dev boot / `make doctor` (their lowercased names would also collide as table prefixes in the shared schema).
|
|
130
130
|
- **Registered the module by hand in host code.** Don't — discovery is entry-point-only; host code never imports module code.
|
|
131
131
|
|
|
132
|
+
Services raise domain exceptions derived from a per-module base in
|
|
133
|
+
`exceptions.py` or `errors.py`, never `HTTPException`. Map them in endpoints or
|
|
134
|
+
`register_exception_handlers(app)` (as in `file_storage`); translate at the
|
|
135
|
+
request boundary. Preserve existing status codes, JSON bodies and headers.
|
|
136
|
+
Endpoint-level `HTTPException` for pure request validation remains fine.
|
|
137
|
+
|
|
132
138
|
For framework-wide rules that apply once the module exists (SQLModel-everywhere, file-size cap, settings layout, no `session.commit()` in services), see the **simple-module-conventions** skill. For migration mechanics see **simple-module-migrations**.
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
"""{{SINGULAR_CLASS}} service implementation.
|
|
1
|
+
"""{{SINGULAR_CLASS}} service implementation.
|
|
2
|
+
|
|
3
|
+
Business failures raise domain exceptions derived from a per-module base in
|
|
4
|
+
exceptions.py or errors.py, never HTTPException. Map them in endpoints or via
|
|
5
|
+
ModuleBase.register_exception_handlers; keep HTTP status, payload, headers and
|
|
6
|
+
translation at that boundary so this service also works in CLI/tasks.
|
|
7
|
+
"""
|
|
2
8
|
|
|
3
9
|
from __future__ import annotations
|
|
4
10
|
|
|
@@ -7,6 +7,7 @@ how the factory below gets shared.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
+
import os
|
|
10
11
|
import subprocess
|
|
11
12
|
import sys
|
|
12
13
|
from pathlib import Path
|
|
@@ -154,3 +155,17 @@ def make_git_module_repo(tmp_path: Path):
|
|
|
154
155
|
return repo
|
|
155
156
|
|
|
156
157
|
return factory
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
@pytest.fixture
|
|
161
|
+
def require_cli_asset():
|
|
162
|
+
"""Keep optional local tooling from silently reducing CI coverage."""
|
|
163
|
+
|
|
164
|
+
def require(available: bool, message: str) -> None:
|
|
165
|
+
if available:
|
|
166
|
+
return
|
|
167
|
+
if os.environ.get("CI"):
|
|
168
|
+
pytest.fail(f"{message}. On CI this must fail rather than skip.")
|
|
169
|
+
pytest.skip(message)
|
|
170
|
+
|
|
171
|
+
return require
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""Missing frontend prerequisites may skip locally but must fail on CI."""
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@pytest.mark.parametrize("ci", [None, "true"])
|
|
7
|
+
def test_cli_missing_asset_prerequisite_fails_on_ci(monkeypatch, require_cli_asset, ci):
|
|
8
|
+
if ci:
|
|
9
|
+
monkeypatch.setenv("CI", ci)
|
|
10
|
+
else:
|
|
11
|
+
monkeypatch.delenv("CI", raising=False)
|
|
12
|
+
outcome = pytest.fail.Exception if ci else pytest.skip.Exception
|
|
13
|
+
with pytest.raises(outcome, match="missing tool"):
|
|
14
|
+
require_cli_asset(False, "missing tool")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_cli_available_asset_prerequisite_runs_on_ci(monkeypatch, require_cli_asset):
|
|
18
|
+
monkeypatch.setenv("CI", "true")
|
|
19
|
+
require_cli_asset(True, "missing tool")
|
|
@@ -185,8 +185,8 @@ def test_pinned_version_matches_the_ui_dev_dependency() -> None:
|
|
|
185
185
|
assert ui["devDependencies"]["openapi-typescript"] == ot.OPENAPI_TYPESCRIPT_VERSION
|
|
186
186
|
|
|
187
187
|
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
def test_real_tool_emits_paths(importable: Path, require_cli_asset) -> None:
|
|
189
|
+
require_cli_asset(LOCAL_TOOL.is_file(), "needs `npm ci` (openapi-typescript)")
|
|
190
190
|
targets = ot.module_targets(
|
|
191
191
|
[_fake_module(importable, "gt_real", "Widgets", opted_in=True)], importable, []
|
|
192
192
|
)
|
|
@@ -6,9 +6,8 @@ resolves the path and keeps the rule. This is the one assertion that exercises
|
|
|
6
6
|
that whole chain, so it drives a genuine build rather than inspecting the
|
|
7
7
|
generated text.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
and local runs do have it.
|
|
9
|
+
Missing build prerequisites skip locally and fail on CI, where the Python
|
|
10
|
+
and JS build jobs install the required Node dependencies.
|
|
12
11
|
"""
|
|
13
12
|
|
|
14
13
|
from __future__ import annotations
|
|
@@ -22,17 +21,21 @@ import pytest
|
|
|
22
21
|
REPO_ROOT = Path(__file__).resolve().parents[3]
|
|
23
22
|
|
|
24
23
|
pytestmark = [
|
|
25
|
-
pytest.mark.skipif(
|
|
26
|
-
not (REPO_ROOT / "node_modules").is_dir(),
|
|
27
|
-
reason="node_modules absent — run `npm install` to exercise the real build",
|
|
28
|
-
),
|
|
29
|
-
pytest.mark.skipif(shutil.which("npm") is None, reason="npm not on PATH"),
|
|
30
24
|
# Both tests rewrite the shared tree (generated manifests, host/static/dist, a
|
|
31
25
|
# probe page under audit_log), so under xdist they must share one worker.
|
|
32
26
|
pytest.mark.xdist_group("repo-build"),
|
|
33
27
|
]
|
|
34
28
|
|
|
35
29
|
|
|
30
|
+
@pytest.fixture(autouse=True)
|
|
31
|
+
def require_build_tools(require_cli_asset):
|
|
32
|
+
require_cli_asset(shutil.which("npm") is not None, "npm not on PATH")
|
|
33
|
+
require_cli_asset(
|
|
34
|
+
(REPO_ROOT / "node_modules").is_dir(),
|
|
35
|
+
"node_modules absent — run `npm ci` to exercise the real build",
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
36
39
|
class TestModuleCssReachesBundle:
|
|
37
40
|
def test_module_class_is_emitted_by_vite_build(self):
|
|
38
41
|
"""A class defined only in a module's styles.css appears in the built CSS.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/_app_project_manifests.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/.env.example
RENAMED
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/.gitignore
RENAMED
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/Makefile
RENAMED
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/README.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/alembic.ini
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/main.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/host/routes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/module/.gitignore
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/simple_module_cli/templates/workspace/Makefile
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_add_workspace_member.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_cli_new_migration_bootstrap.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_module_css_subdir_sources.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffold_app_tsx_spa_links.py
RENAMED
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffolded_host_setup_wizard.py
RENAMED
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_scaffolding_framework_repo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.38 → simple_module_cli-0.0.39}/tests/test_template_requires_framework.py
RENAMED
|
File without changes
|