simple-module-cli 0.0.39__tar.gz → 0.0.40__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.39 → simple_module_cli-0.0.40}/PKG-INFO +1 -1
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/pyproject.toml +1 -1
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/git_source.py +19 -4
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/update_cmd.py +2 -12
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_add_spec_parse.py +31 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_update_sources.py +35 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/.gitignore +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/LICENSE +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/README.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/__init__.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/_add_install.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/_add_sources.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/_app_project_manifests.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/_env.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/_local_env.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/_module_build.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/_module_host.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/_templating.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/add_cmd.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/app_project.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/case.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/catalog.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/cli.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/docker_assets.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/docker_cmd.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/framework_repo.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/module_cmd.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/new.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/openapi_cmd.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/openapi_types.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/package_update.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/pins.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/plugins.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/pypi.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/pyproject_edit.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/recipes.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/requirements.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/scaffolding.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/README.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-cli/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-conventions/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-creating/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-database/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-doctor/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-inertia-pages/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-locales/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-migrations/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-registries/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills/simple-module-testing/SKILL.md +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/skills_cmd.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/Makefile.snippet +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/compose-base-postgres.yml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/compose-base-sqlite.yml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/compose-tasks-postgres.yml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/compose-tasks-sqlite.yml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/compose-worker.yml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/dockerignore +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/host-flat.Dockerfile +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/host.Dockerfile +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/docker/worker.Dockerfile.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/.env.example +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/.gitignore +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/Makefile +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/README.md.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/_optional/background_tasks/run_worker.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/alembic.ini +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/app.tsx +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/main.tsx +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/module-assets.ts +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/package.json.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/pages/Error.tsx +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/pages/Landing.tsx +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/pages.ts +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/styles.css +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/tsconfig.json +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/vite.config.ts +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/client_app/vite.dev-url.ts +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/main.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/migrations/env.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/migrations/script.py.mako +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/migrations/versions/.gitkeep +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/routes.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/templates/index.html +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/.github/workflows/ci.yml +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/.github/workflows/publish.yml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/.gitignore +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/README.md.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/__init__.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/constants.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/contracts/__init__.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/contracts/schemas.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/deps.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/endpoints/views.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/locales/en.json.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/models.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/module.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/pages/Browse.tsx.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/pages/Create.tsx.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/pages/Edit.tsx.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/pages/api.generated.ts.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/pages/api.ts.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/py.typed +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/service.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/services.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/__PACKAGE__/settings.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/_optional/framework_repo/LICENSE +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/_optional/framework_repo/README.md.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/_optional/framework_repo/__PACKAGE__/pages/Browse.tsx.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/_optional/framework_repo/__PACKAGE__/pages/Create.tsx.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/_optional/framework_repo/__PACKAGE__/pages/Edit.tsx.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/_optional/framework_repo/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/_optional/standalone/package.json.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/_optional/standalone/tsconfig.json.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/package.json.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/tests/test___PACKAGE__.py.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/module/tsconfig.json.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/workspace/.env.example +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/workspace/.gitignore +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/workspace/Makefile +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/workspace/README.md.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/workspace/package.json.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/workspace/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/uv_workspace.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/wizard.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/conftest.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_build_packaging.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_case.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_add_cmd.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_add_workspace_member.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_asset_prerequisites.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_catalog.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_catalog_depends_on.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_docker_assets.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_docker_workers.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_gen_types_scaffold.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_git_scan.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_new.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_new_dest_tolerance.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_new_git_module.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_new_migration_bootstrap.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_new_regressions.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_new_scaffold_layout.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_openapi_export.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_openapi_gen_types.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_package_update.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_package_update_pins.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_pyproject_edit.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_recipes.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_vite_port_env.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_wizard.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_cli_wizard_git.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_create_module_ci_skip.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_env_helper.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_framework_repo_wiring.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_module_cmd_build.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_module_cmd_e2e.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_module_cmd_verify.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_module_css_assets.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_module_css_build.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_module_css_subdir_sources.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_module_npm_aliases.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_module_pages_manifest.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_no_framework_deps.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_plugin_discovery.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_scaffold_app_tsx_spa_links.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_scaffold_rollback.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_scaffolded_host_setup_wizard.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_scaffolding_framework_repo.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_scaffolding_host.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_scaffolding_module.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_scaffolding_module_js.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_skills_cmd.py +0 -0
- {simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/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.40
|
|
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
|
|
@@ -11,12 +11,14 @@ tomlkit alone (see test_no_framework_deps.py); clones are read with tomllib.
|
|
|
11
11
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
+
import re
|
|
14
15
|
import subprocess
|
|
15
16
|
import tomllib
|
|
16
17
|
from collections.abc import Callable, Iterable
|
|
17
18
|
from dataclasses import dataclass
|
|
18
19
|
from pathlib import Path
|
|
19
20
|
from typing import Literal
|
|
21
|
+
from urllib.parse import urlsplit
|
|
20
22
|
|
|
21
23
|
__all__ = [
|
|
22
24
|
"FoundModule",
|
|
@@ -84,9 +86,8 @@ def _parse_git(raw: str) -> GitAddSpec:
|
|
|
84
86
|
)
|
|
85
87
|
ref: str | None = None
|
|
86
88
|
head, sep, tail = body.rpartition("@")
|
|
87
|
-
#
|
|
88
|
-
|
|
89
|
-
if sep and tail and "/" not in tail and "://" in head:
|
|
89
|
+
# Only an @ in the URL path separates a ref; userinfo belongs to the authority.
|
|
90
|
+
if sep and tail and "://" in head and "@" in urlsplit(body).path:
|
|
90
91
|
body, ref = head, tail
|
|
91
92
|
if "://" not in body:
|
|
92
93
|
raise SpecError(f"cannot parse a git URL out of {raw!r}")
|
|
@@ -114,7 +115,21 @@ def _cmp(a: str, b: str) -> int:
|
|
|
114
115
|
width = max(len(ta), len(tb))
|
|
115
116
|
ta += (0,) * (width - len(ta))
|
|
116
117
|
tb += (0,) * (width - len(tb))
|
|
117
|
-
|
|
118
|
+
if ta != tb:
|
|
119
|
+
return (ta > tb) - (ta < tb)
|
|
120
|
+
pa, pb = _prerelease_key(a), _prerelease_key(b)
|
|
121
|
+
return (pa > pb) - (pa < pb)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _prerelease_key(version: str) -> tuple[int, int]:
|
|
125
|
+
# shortcut: handles Python a/b/rc suffixes; use a full parser for other version schemes.
|
|
126
|
+
match = re.search(r"(alpha|beta|a|b|rc)(\d*)$", version, re.IGNORECASE)
|
|
127
|
+
if match is None:
|
|
128
|
+
return (3, 0)
|
|
129
|
+
return (
|
|
130
|
+
{"a": 0, "alpha": 0, "b": 1, "beta": 1, "rc": 2}[match[1].lower()],
|
|
131
|
+
int(match[2] or "0"),
|
|
132
|
+
)
|
|
118
133
|
|
|
119
134
|
|
|
120
135
|
_OPS = ("<=", ">=", "==", "!=", "<", ">")
|
|
@@ -21,7 +21,6 @@ from simple_module_cli.git_source import (
|
|
|
21
21
|
derive_range,
|
|
22
22
|
list_remote_refs,
|
|
23
23
|
pick_latest_tag,
|
|
24
|
-
version_tuple,
|
|
25
24
|
)
|
|
26
25
|
from simple_module_cli.pyproject_edit import (
|
|
27
26
|
dep_constraint,
|
|
@@ -41,11 +40,6 @@ def _groups(sources: dict[str, dict]) -> dict[str, list[str]]:
|
|
|
41
40
|
return by_url
|
|
42
41
|
|
|
43
42
|
|
|
44
|
-
def _older_tag(a: str, b: str) -> str:
|
|
45
|
-
"""The lower of two v-prefixed tags — every sibling must accept the shared tag."""
|
|
46
|
-
return a if version_tuple(a[1:]) <= version_tuple(b[1:]) else b
|
|
47
|
-
|
|
48
|
-
|
|
49
43
|
def run_sources_update(
|
|
50
44
|
pyproject: Path,
|
|
51
45
|
*,
|
|
@@ -87,12 +81,8 @@ def run_sources_update(
|
|
|
87
81
|
if not tag_pinned:
|
|
88
82
|
continue
|
|
89
83
|
tags, _ = list_remote_refs(url, **git_kwargs)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
best = pick_latest_tag(tags, dep_constraint(doc, name))
|
|
93
|
-
if best is None:
|
|
94
|
-
continue
|
|
95
|
-
candidate = best if candidate is None else _older_tag(candidate, best)
|
|
84
|
+
constraint = ",".join(dep_constraint(doc, name) or "" for name in tag_pinned)
|
|
85
|
+
candidate = pick_latest_tag(tags, constraint)
|
|
96
86
|
if candidate is None:
|
|
97
87
|
continue
|
|
98
88
|
current = {str(sources[n]["tag"]) for n in tag_pinned}
|
|
@@ -50,6 +50,16 @@ def test_git_ssh_userinfo_with_ref() -> None:
|
|
|
50
50
|
assert p.git.ref == "main"
|
|
51
51
|
|
|
52
52
|
|
|
53
|
+
@pytest.mark.parametrize("scheme", ["https://", "ssh://git@"])
|
|
54
|
+
def test_git_spec_ref_with_slash(scheme: str) -> None:
|
|
55
|
+
url = f"{scheme}github.com/x/repo.git"
|
|
56
|
+
p = parse_add_spec(f"git+{url}@feature/new#subdirectory=modules/blog")
|
|
57
|
+
assert p.git is not None
|
|
58
|
+
assert p.git.url == url
|
|
59
|
+
assert p.git.ref == "feature/new"
|
|
60
|
+
assert p.git.subdirectory == "modules/blog"
|
|
61
|
+
|
|
62
|
+
|
|
53
63
|
def test_path_spec() -> None:
|
|
54
64
|
p = parse_add_spec("../mod")
|
|
55
65
|
assert p.kind == "path"
|
|
@@ -89,3 +99,24 @@ def test_pick_latest_tag() -> None:
|
|
|
89
99
|
assert pick_latest_tag(tags, ">=1.0,<2.0") == "v1.10.0"
|
|
90
100
|
assert pick_latest_tag(tags, None) == "v2.0.0"
|
|
91
101
|
assert pick_latest_tag(["nope"], None) is None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@pytest.mark.parametrize("prerelease", ["1.1.0a1", "1.1.0b1", "1.1.0rc1"])
|
|
105
|
+
def test_prerelease_does_not_satisfy_final_floor(prerelease: str) -> None:
|
|
106
|
+
assert not satisfies(prerelease, ">=1.1.0")
|
|
107
|
+
assert not satisfies(prerelease, "==1.1.0")
|
|
108
|
+
assert satisfies(prerelease, "<1.1.0")
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@pytest.mark.parametrize(
|
|
112
|
+
("tags", "expected"),
|
|
113
|
+
[
|
|
114
|
+
(["v1.1.0rc1", "v1.1.0"], "v1.1.0"),
|
|
115
|
+
(["v1.1.0rc2", "v1.1.0rc10"], "v1.1.0rc10"),
|
|
116
|
+
(["v1.1.0a1", "v1.1.0b1", "v1.1.0rc1"], "v1.1.0rc1"),
|
|
117
|
+
(["v1.1.0alpha2", "v1.1.0beta1", "v1.1.0"], "v1.1.0"),
|
|
118
|
+
(["v1.1.0alpha2", "v1.1.0beta1"], "v1.1.0beta1"),
|
|
119
|
+
],
|
|
120
|
+
)
|
|
121
|
+
def test_pick_latest_tag_orders_prereleases(tags: list[str], expected: str) -> None:
|
|
122
|
+
assert pick_latest_tag(tags, None) == expected
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
|
|
7
|
+
import pytest
|
|
7
8
|
from simple_module_cli.update_cmd import run_sources_update
|
|
8
9
|
|
|
9
10
|
|
|
@@ -125,3 +126,37 @@ def test_no_newer_tag_is_a_quiet_noop(tmp_path: Path, capsys) -> None:
|
|
|
125
126
|
)
|
|
126
127
|
assert p.read_text(encoding="utf-8") == before
|
|
127
128
|
assert "up to date" in capsys.readouterr().out
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
@pytest.mark.parametrize(
|
|
132
|
+
("blog_range", "comments_range", "expected"),
|
|
133
|
+
[
|
|
134
|
+
(">=0.3,<1.0", ">=0.1,<0.3", None), # disjoint ranges
|
|
135
|
+
(">=0.1,<1.0,!=0.3.0", ">=0.1,<0.4", "v0.2.0"), # hole below best tags
|
|
136
|
+
(">=0.1,<1.0", ">=0.8,<1.0", None), # one sibling has no matching tag
|
|
137
|
+
],
|
|
138
|
+
)
|
|
139
|
+
def test_group_update_requires_tag_accepted_by_every_sibling(
|
|
140
|
+
tmp_path: Path, blog_range: str, comments_range: str, expected: str | None
|
|
141
|
+
) -> None:
|
|
142
|
+
p = _host(tmp_path, "https://github.com/x/mods")
|
|
143
|
+
before = (
|
|
144
|
+
p.read_text(encoding="utf-8")
|
|
145
|
+
.replace("simple_module_blog>=0.1.0,<1.0", f"simple_module_blog{blog_range}")
|
|
146
|
+
.replace("simple_module_comments>=0.1.0,<1.0", f"simple_module_comments{comments_range}")
|
|
147
|
+
)
|
|
148
|
+
p.write_text(before, encoding="utf-8")
|
|
149
|
+
calls, runner = _recorder()
|
|
150
|
+
run_sources_update(
|
|
151
|
+
p,
|
|
152
|
+
only="simple_module_blog",
|
|
153
|
+
dry_run=False,
|
|
154
|
+
git_runner=_git_stub(["v0.1.0", "v0.2.0", "v0.3.0", "v0.5.0"]),
|
|
155
|
+
exec_runner=runner,
|
|
156
|
+
)
|
|
157
|
+
after = p.read_text(encoding="utf-8")
|
|
158
|
+
if expected is None:
|
|
159
|
+
assert after == before
|
|
160
|
+
assert calls == []
|
|
161
|
+
else:
|
|
162
|
+
assert after.count(f'tag = "{expected}"') == 2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/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
|
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/.env.example
RENAMED
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/.gitignore
RENAMED
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/Makefile
RENAMED
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/simple_module_cli/templates/host/README.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/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.39 → simple_module_cli-0.0.40}/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.39 → simple_module_cli-0.0.40}/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.39 → simple_module_cli-0.0.40}/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
|
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/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
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/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
|
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/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
|
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/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.39 → simple_module_cli-0.0.40}/tests/test_scaffold_app_tsx_spa_links.py
RENAMED
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/tests/test_scaffolded_host_setup_wizard.py
RENAMED
|
File without changes
|
{simple_module_cli-0.0.39 → simple_module_cli-0.0.40}/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.39 → simple_module_cli-0.0.40}/tests/test_template_requires_framework.py
RENAMED
|
File without changes
|