simple-module-cli 0.0.16__tar.gz → 0.0.18__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.
Files changed (92) hide show
  1. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/PKG-INFO +1 -1
  2. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/pyproject.toml +1 -1
  3. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-creating/SKILL.md +1 -1
  4. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-database/SKILL.md +3 -15
  5. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_cli_package_update.py +11 -2
  6. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/.gitignore +0 -0
  7. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/LICENSE +0 -0
  8. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/README.md +0 -0
  9. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/__init__.py +0 -0
  10. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/_env.py +0 -0
  11. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/app_project.py +0 -0
  12. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/case.py +0 -0
  13. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/catalog.py +0 -0
  14. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/cli.py +0 -0
  15. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/new.py +0 -0
  16. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/package_update.py +0 -0
  17. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/plugins.py +0 -0
  18. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/recipes.py +0 -0
  19. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/scaffolding.py +0 -0
  20. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/README.md +0 -0
  21. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-cli/SKILL.md +0 -0
  22. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-conventions/SKILL.md +0 -0
  23. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-doctor/SKILL.md +0 -0
  24. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-inertia-pages/SKILL.md +0 -0
  25. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-locales/SKILL.md +0 -0
  26. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-migrations/SKILL.md +0 -0
  27. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-registries/SKILL.md +0 -0
  28. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills/simple-module-testing/SKILL.md +0 -0
  29. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/skills_cmd.py +0 -0
  30. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/.env.example +0 -0
  31. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/.gitignore +0 -0
  32. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/Makefile +0 -0
  33. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/README.md.tpl +0 -0
  34. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet +0 -0
  35. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/_optional/background_tasks/docker-compose.yml +0 -0
  36. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/_optional/background_tasks/host.Dockerfile +0 -0
  37. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/_optional/background_tasks/run_worker.py +0 -0
  38. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/_optional/background_tasks/worker.Dockerfile +0 -0
  39. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/alembic.ini +0 -0
  40. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/app.tsx +0 -0
  41. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/main.tsx +0 -0
  42. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/package.json.tpl +0 -0
  43. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/pages/Error.tsx +0 -0
  44. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/pages/Landing.tsx +0 -0
  45. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/pages.ts +0 -0
  46. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/styles.css +0 -0
  47. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/tsconfig.json +0 -0
  48. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/client_app/vite.config.ts +0 -0
  49. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/main.py +0 -0
  50. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/migrations/env.py +0 -0
  51. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/migrations/script.py.mako +0 -0
  52. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/migrations/versions/.gitkeep +0 -0
  53. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/pyproject.toml.tpl +0 -0
  54. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/routes.py +0 -0
  55. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/host/templates/index.html +0 -0
  56. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/.github/workflows/ci.yml +0 -0
  57. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/.github/workflows/publish.yml.tpl +0 -0
  58. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/.gitignore +0 -0
  59. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/README.md.tpl +0 -0
  60. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/__PACKAGE__/__init__.py +0 -0
  61. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py +0 -0
  62. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl +0 -0
  63. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/__PACKAGE__/module.py.tpl +0 -0
  64. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/__PACKAGE__/pages/.gitkeep +0 -0
  65. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/__PACKAGE__/services.py.tpl +0 -0
  66. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/__PACKAGE__/settings.py.tpl +0 -0
  67. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/package.json.tpl +0 -0
  68. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/pyproject.toml.tpl +0 -0
  69. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/tests/test_module.py.tpl +0 -0
  70. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/module/tsconfig.json.tpl +0 -0
  71. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/workspace/.env.example +0 -0
  72. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/workspace/.gitignore +0 -0
  73. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/workspace/Makefile +0 -0
  74. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/workspace/README.md.tpl +0 -0
  75. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/workspace/package.json.tpl +0 -0
  76. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/templates/workspace/pyproject.toml.tpl +0 -0
  77. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/simple_module_cli/wizard.py +0 -0
  78. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_build_packaging.py +0 -0
  79. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_case.py +0 -0
  80. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_cli_catalog.py +0 -0
  81. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_cli_new.py +0 -0
  82. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_cli_new_dest_tolerance.py +0 -0
  83. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_cli_new_regressions.py +0 -0
  84. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_cli_recipes.py +0 -0
  85. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_cli_wizard.py +0 -0
  86. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_env_helper.py +0 -0
  87. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_no_framework_deps.py +0 -0
  88. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_plugin_discovery.py +0 -0
  89. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_scaffold_rollback.py +0 -0
  90. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_scaffolding_host.py +0 -0
  91. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_scaffolding_module.py +0 -0
  92. {simple_module_cli-0.0.16 → simple_module_cli-0.0.18}/tests/test_skills_cmd.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simple_module_cli
3
- Version: 0.0.16
3
+ Version: 0.0.18
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "simple_module_cli"
3
- version = "0.0.16"
3
+ version = "0.0.18"
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"
@@ -68,7 +68,7 @@ class OrdersModule(ModuleBase):
68
68
  )
69
69
  ```
70
70
 
71
- `ModuleMeta.name` is load-bearing in three places: the Postgres schema name, the SQLite `__tablename__` prefix you author, and the PascalCase Inertia component namespace. So directory `blog_posts` → `name="BlogPosts"` → `inertia.render("BlogPosts/Index", ...)` → `pages/Index.tsx`. Mismatches fire diagnostic codes `SM003` (orphan page) / `SM004` (phantom render).
71
+ `ModuleMeta.name` is load-bearing in two places: the `__tablename__` prefix you author and the PascalCase Inertia component namespace. So directory `blog_posts` → `name="BlogPosts"` → `inertia.render("BlogPosts/Index", ...)` → `pages/Index.tsx`. Mismatches fire diagnostic codes `SM003` (orphan page) / `SM004` (phantom render).
72
72
 
73
73
  For modules you intend to publish, also add `version=` (your module's semver) and `requires_framework=` (a PEP 440 spec for the framework API range, e.g. `">=1.0,<2.0"`) so the host can reject incompatible installs at boot.
74
74
 
@@ -18,26 +18,14 @@ from simple_module_db.mixins import AuditMixin
18
18
  Base = create_module_base("orders")
19
19
 
20
20
  class Order(Base, AuditMixin, table=True):
21
- __tablename__ = "orders_order" # SQLite-safe prefix; required (see below)
21
+ __tablename__ = "orders_order" # module-name prefix; required
22
22
  id: int | None = Field(default=None, primary_key=True)
23
23
  name: str = Field(max_length=200)
24
24
  ```
25
25
 
26
- The provider is auto-detected from `SM_DATABASE_URL`. Pin it explicitly only in tests:
26
+ ## Table naming
27
27
 
28
- ```python
29
- from simple_module_db.base import create_module_base, DatabaseProvider
30
- Base = create_module_base("orders", provider=DatabaseProvider.SQLITE)
31
- ```
32
-
33
- ## Postgres vs SQLite — the same code, different physical layout
34
-
35
- | Provider | Physical placement | Required convention |
36
- |---|---|---|
37
- | **PostgreSQL** | One **schema** per module (`orders.order`, `users.user`). Created automatically. | Set `__tablename__` to a name unique within the module. |
38
- | **SQLite** | Single schema. Cross-module name collisions break things. | Prefix `__tablename__` with the module name (`orders_order`). |
39
-
40
- Always include the module-name prefix in `__tablename__`. It's redundant on Postgres (the schema already namespaces it) and **required** on SQLite. Code that runs in CI on SQLite and prod on Postgres needs both — pick the prefix.
28
+ All modules — on Postgres and SQLite alike — share the host's single schema. Cross-module name collisions break things, so `__tablename__` must be prefixed with the module name (e.g. `orders_order`, `users_user`). The framework does not enforce the prefix; it's a convention the migrations and diagnostics rely on.
41
29
 
42
30
  ## Mixins
43
31
 
@@ -157,14 +157,23 @@ def test_excludes_prereleases_by_default(tmp_path: Path) -> None:
157
157
 
158
158
 
159
159
  def test_missing_pyproject_exits_nonzero(tmp_path: Path) -> None:
160
- with pytest.raises(click.exceptions.Exit) as exc:
160
+ # typer >= 0.26 vendors click as ``typer._click``; the raised ``Exit``
161
+ # no longer inherits from ``click.exceptions.Exit``. Catch both.
162
+ _exit_types: tuple[type[BaseException], ...] = (click.exceptions.Exit,)
163
+ try:
164
+ from typer._click.exceptions import Exit as _TyExit
165
+
166
+ _exit_types = (*_exit_types, _TyExit)
167
+ except ImportError:
168
+ pass
169
+ with pytest.raises(_exit_types) as exc:
161
170
  pu.run_update(
162
171
  path=tmp_path,
163
172
  dry_run=False,
164
173
  include_pre=False,
165
174
  fetcher=_fake_pypi({}),
166
175
  )
167
- assert exc.value.exit_code == 1
176
+ assert getattr(exc.value, "exit_code", getattr(exc.value, "code", None)) == 1
168
177
 
169
178
 
170
179
  def test_cli_command_registered() -> None: