simple-module-cli 0.0.2__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.
Files changed (92) hide show
  1. simple_module_cli/__init__.py +0 -0
  2. simple_module_cli/_env.py +12 -0
  3. simple_module_cli/app_project.py +123 -0
  4. simple_module_cli/case.py +30 -0
  5. simple_module_cli/catalog.py +107 -0
  6. simple_module_cli/cli.py +104 -0
  7. simple_module_cli/new.py +124 -0
  8. simple_module_cli/plugins.py +56 -0
  9. simple_module_cli/recipes.py +93 -0
  10. simple_module_cli/scaffolding.py +124 -0
  11. simple_module_cli/templates/host/.env.example +20 -0
  12. simple_module_cli/templates/host/.gitignore +19 -0
  13. simple_module_cli/templates/host/Makefile +24 -0
  14. simple_module_cli/templates/host/README.md.tpl +59 -0
  15. simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet +12 -0
  16. simple_module_cli/templates/host/_optional/background_tasks/docker-compose.yml +60 -0
  17. simple_module_cli/templates/host/_optional/background_tasks/run_worker.py +17 -0
  18. simple_module_cli/templates/host/_optional/background_tasks/worker.Dockerfile +37 -0
  19. simple_module_cli/templates/host/alembic.ini +36 -0
  20. simple_module_cli/templates/host/client_app/app.tsx +16 -0
  21. simple_module_cli/templates/host/client_app/main.tsx +2 -0
  22. simple_module_cli/templates/host/client_app/package.json.tpl +23 -0
  23. simple_module_cli/templates/host/client_app/pages/Error.tsx +13 -0
  24. simple_module_cli/templates/host/client_app/pages.ts +47 -0
  25. simple_module_cli/templates/host/client_app/styles.css +7 -0
  26. simple_module_cli/templates/host/client_app/tsconfig.json +16 -0
  27. simple_module_cli/templates/host/client_app/vite.config.ts +39 -0
  28. simple_module_cli/templates/host/main.py +27 -0
  29. simple_module_cli/templates/host/migrations/env.py +80 -0
  30. simple_module_cli/templates/host/migrations/script.py.mako +26 -0
  31. simple_module_cli/templates/host/migrations/versions/.gitkeep +1 -0
  32. simple_module_cli/templates/host/pyproject.toml.tpl +17 -0
  33. simple_module_cli/templates/host/templates/index.html +12 -0
  34. simple_module_cli/templates/module/.github/workflows/ci.yml +32 -0
  35. simple_module_cli/templates/module/.github/workflows/publish.yml.tpl +52 -0
  36. simple_module_cli/templates/module/.gitignore +14 -0
  37. simple_module_cli/templates/module/README.md.tpl +82 -0
  38. simple_module_cli/templates/module/__PACKAGE__/__init__.py +0 -0
  39. simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py +0 -0
  40. simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl +11 -0
  41. simple_module_cli/templates/module/__PACKAGE__/module.py.tpl +46 -0
  42. simple_module_cli/templates/module/__PACKAGE__/pages/.gitkeep +1 -0
  43. simple_module_cli/templates/module/__PACKAGE__/services.py.tpl +22 -0
  44. simple_module_cli/templates/module/package.json.tpl +16 -0
  45. simple_module_cli/templates/module/pyproject.toml.tpl +39 -0
  46. simple_module_cli/templates/module/tests/__init__.py +0 -0
  47. simple_module_cli/templates/module/tests/test_module.py.tpl +27 -0
  48. simple_module_cli/templates/module/tsconfig.json.tpl +11 -0
  49. simple_module_cli/wizard.py +48 -0
  50. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/.env.example +20 -0
  51. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/.gitignore +19 -0
  52. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/Makefile +24 -0
  53. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/README.md.tpl +59 -0
  54. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet +12 -0
  55. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/_optional/background_tasks/docker-compose.yml +60 -0
  56. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/_optional/background_tasks/run_worker.py +17 -0
  57. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/_optional/background_tasks/worker.Dockerfile +37 -0
  58. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/alembic.ini +36 -0
  59. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/app.tsx +16 -0
  60. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/main.tsx +2 -0
  61. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/package.json.tpl +23 -0
  62. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/pages/Error.tsx +13 -0
  63. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/pages.ts +47 -0
  64. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/styles.css +7 -0
  65. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/tsconfig.json +16 -0
  66. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/vite.config.ts +39 -0
  67. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/main.py +27 -0
  68. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/migrations/env.py +80 -0
  69. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/migrations/script.py.mako +26 -0
  70. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/migrations/versions/.gitkeep +1 -0
  71. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/pyproject.toml.tpl +17 -0
  72. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/templates/index.html +12 -0
  73. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/.github/workflows/ci.yml +32 -0
  74. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/.github/workflows/publish.yml.tpl +52 -0
  75. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/.gitignore +14 -0
  76. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/README.md.tpl +82 -0
  77. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/__init__.py +0 -0
  78. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py +0 -0
  79. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl +11 -0
  80. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/module.py.tpl +46 -0
  81. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/pages/.gitkeep +1 -0
  82. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/services.py.tpl +22 -0
  83. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/package.json.tpl +16 -0
  84. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/pyproject.toml.tpl +39 -0
  85. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/tests/__init__.py +0 -0
  86. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/tests/test_module.py.tpl +27 -0
  87. simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/tsconfig.json.tpl +11 -0
  88. simple_module_cli-0.0.2.dist-info/METADATA +63 -0
  89. simple_module_cli-0.0.2.dist-info/RECORD +92 -0
  90. simple_module_cli-0.0.2.dist-info/WHEEL +4 -0
  91. simple_module_cli-0.0.2.dist-info/entry_points.txt +3 -0
  92. simple_module_cli-0.0.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,82 @@
1
+ # simple_module_{{PACKAGE_NAME}}
2
+
3
+ The `{{MODULE_NAME}}` module for SimpleModule hosts.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pip install simple_module_{{PACKAGE_NAME}}
9
+ ```
10
+
11
+ A host that installs this package picks it up automatically via
12
+ `entry_points`. No additional wiring is required.
13
+
14
+ ## Development
15
+
16
+ ```bash
17
+ uv sync --extra dev
18
+ uv run pytest
19
+ ```
20
+
21
+ ## Frontend assets (optional)
22
+
23
+ If this module ships TSX pages:
24
+
25
+ 1. Drop them in `{{PACKAGE_NAME}}/pages/` (the scaffold created the
26
+ directory). One file per Inertia page — e.g. `Browse.tsx`,
27
+ `Detail.tsx`.
28
+ 2. Build them with your bundler of choice (Vite/esbuild/etc.) into
29
+ `{{PACKAGE_NAME}}/static/dist/`. This directory is **gitignored** —
30
+ only the wheel carries it.
31
+ 3. Before releasing (`uv build`), rebuild the assets. Your
32
+ `publish.yml` CI should run the bundler before `uv build`; add
33
+ a step after "Install project + dev deps" such as
34
+ `npm ci && npm run build`.
35
+
36
+ Hosts mount the bundle automatically at
37
+ `/modules/{{MODULE_SLUG}}/static` — the generated
38
+ `{{MODULE_NAME}}Module.static_mounts()` method returns the directory
39
+ when it exists, an empty dict otherwise (so dev without a build step
40
+ doesn't fail).
41
+
42
+ ## Continuous integration
43
+
44
+ Two workflows live under `.github/workflows/`:
45
+
46
+ - **`ci.yml`** — runs on every push to `main` and on every pull request.
47
+ Installs deps, runs `ruff check`, then `pytest`.
48
+ - **`publish.yml`** — runs only when a tag matching `v*` is pushed.
49
+ Re-runs tests, builds the wheel + sdist, and uploads to PyPI via
50
+ trusted publishing (no API token).
51
+
52
+ ## Publishing
53
+
54
+ One-time PyPI setup (do this before your first release):
55
+
56
+ 1. Create the project's Trusted Publisher entry at
57
+ <https://pypi.org/manage/account/publishing/>:
58
+ - PyPI project name: `simple_module_{{PACKAGE_NAME}}`
59
+ - Owner / Repository: your GitHub org + this repo
60
+ - Workflow filename: `publish.yml`
61
+ - Environment (recommended): `pypi`
62
+ 2. On GitHub → Settings → Environments, create `pypi`. Add required
63
+ reviewers if you want a manual approval gate before every release.
64
+
65
+ Every release after that is three commands:
66
+
67
+ ```bash
68
+ # 1) bump the version in pyproject.toml, commit
69
+ # 2) tag
70
+ git tag v0.2.0
71
+ git push --tags
72
+ # 3) done — the publish workflow uploads to PyPI
73
+ ```
74
+
75
+ No `PYPI_API_TOKEN` secret exists anywhere. Trusted publishing mints a
76
+ short-lived OIDC token scoped to this repo + workflow + environment.
77
+
78
+ ## API-version contract
79
+
80
+ The `Meta.requires_framework` field declares which `simple_module_core`
81
+ versions this module supports. Update the spec on each framework major
82
+ bump after verifying compatibility.
@@ -0,0 +1,11 @@
1
+ """API routes for the {{MODULE_NAME}} module."""
2
+
3
+ from fastapi import APIRouter
4
+
5
+ router = APIRouter()
6
+
7
+
8
+ @router.get("/")
9
+ async def list_items() -> dict:
10
+ """Placeholder endpoint. Replace with real resources."""
11
+ return {"module": "{{MODULE_NAME}}", "items": []}
@@ -0,0 +1,46 @@
1
+ """{{MODULE_NAME}} module — generated by `sm create-module`."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib.resources
6
+ from pathlib import Path
7
+
8
+ from fastapi import APIRouter, FastAPI
9
+ from simple_module_core import ModuleBase, ModuleMeta
10
+
11
+
12
+ class {{MODULE_NAME}}Module(ModuleBase):
13
+ meta = ModuleMeta(
14
+ name="{{MODULE_NAME}}",
15
+ route_prefix="/api/{{MODULE_SLUG}}",
16
+ view_prefix="/{{MODULE_SLUG}}",
17
+ depends_on=[],
18
+ version="0.1.0",
19
+ requires_framework=">=1.0,<2.0",
20
+ )
21
+
22
+ def register_routes(self, api_router: APIRouter, view_router: APIRouter) -> None:
23
+ from {{PACKAGE_NAME}}.endpoints.api import router as api
24
+
25
+ api_router.include_router(api)
26
+
27
+ def register_settings(self, app: FastAPI) -> None:
28
+ from {{PACKAGE_NAME}}.services import {{MODULE_NAME}}Services
29
+ from {{PACKAGE_NAME}}.settings import {{MODULE_NAME}}Settings
30
+
31
+ app.state.{{PACKAGE_NAME}} = {{MODULE_NAME}}Services(settings={{MODULE_NAME}}Settings())
32
+
33
+ def static_mounts(self) -> dict[str, Path]:
34
+ """Expose pre-built frontend assets when they exist.
35
+
36
+ Returns an empty dict when ``static/dist/`` hasn't been built yet,
37
+ so ``uv run pytest`` works during development. In production, the
38
+ wheel ships the built bundle via ``force-include`` in
39
+ ``pyproject.toml`` and the host mounts it at
40
+ ``/modules/{{MODULE_SLUG}}/static``.
41
+ """
42
+ pkg_root = Path(str(importlib.resources.files("{{PACKAGE_NAME}}")))
43
+ dist = pkg_root / "static" / "dist"
44
+ if not dist.is_dir():
45
+ return {}
46
+ return {"/modules/{{MODULE_SLUG}}/static": dist}
@@ -0,0 +1 @@
1
+ # Keep this directory; TSX pages go here (e.g. Browse.tsx, Detail.tsx).
@@ -0,0 +1,22 @@
1
+ """Module-scoped state container.
2
+
3
+ Stored as ``app.state.{{PACKAGE_NAME}}`` by
4
+ :meth:`{{MODULE_NAME}}Module.register_settings`.
5
+
6
+ Not frozen — ``on_startup`` may set fields that depend on the DB or
7
+ other framework services. Convention: set once during boot, treat as
8
+ read-only after.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from dataclasses import dataclass
14
+
15
+ from {{PACKAGE_NAME}}.settings import {{MODULE_NAME}}Settings
16
+
17
+
18
+ @dataclass
19
+ class {{MODULE_NAME}}Services:
20
+ """{{MODULE_NAME}} module singletons."""
21
+
22
+ settings: {{MODULE_NAME}}Settings
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@simple-module-py/{{MODULE_SLUG}}",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "description": "Frontend assets for the {{MODULE_NAME}} module",
6
+ "peerDependencies": {
7
+ "react": "^19.0.0",
8
+ "react-dom": "^19.0.0",
9
+ "@inertiajs/react": "^2.0.0",
10
+ "@simple-module-py/ui": "*"
11
+ },
12
+ "devDependencies": {
13
+ "@simple-module-py/tsconfig": "*"
14
+ },
15
+ "dependencies": {}
16
+ }
@@ -0,0 +1,39 @@
1
+ [project]
2
+ name = "simple_module_{{PACKAGE_NAME}}"
3
+ version = "0.1.0"
4
+ description = "{{MODULE_NAME}} module for SimpleModule hosts"
5
+ requires-python = ">=3.12"
6
+ dependencies = [
7
+ "simple_module_core>=1.0,<2.0",
8
+ "simple_module_db>=1.0,<2.0",
9
+ "simple_module_hosting>=1.0,<2.0",
10
+ "sqlalchemy>=2.0",
11
+ ]
12
+
13
+ [project.entry-points.simple_module]
14
+ {{PACKAGE_NAME}} = "{{PACKAGE_NAME}}.module:{{MODULE_NAME}}Module"
15
+
16
+ [project.optional-dependencies]
17
+ dev = [
18
+ "pytest>=8.0",
19
+ "pytest-asyncio>=0.24",
20
+ # Shared fixtures (fake_event_bus, build_test_app, etc.) for testing
21
+ # modules in isolation. The pytest11 entry_point auto-registers them.
22
+ "simple_module_test>=0.1,<1.0",
23
+ ]
24
+
25
+ [build-system]
26
+ requires = ["hatchling"]
27
+ build-backend = "hatchling.build"
28
+
29
+ [tool.hatch.build.targets.wheel]
30
+ packages = ["{{PACKAGE_NAME}}"]
31
+
32
+ # Ship the built frontend bundle + per-module JS dep manifest inside the wheel.
33
+ # static/dist/ is gitignored, so force-include picks up the working-tree build
34
+ # during `uv build` — run your bundler (vite/esbuild) first. package.json lives
35
+ # at the module root so npm workspaces see it; copying it into <pkg>/ lets the
36
+ # host discover JS deps via importlib.resources after a pip install.
37
+ [tool.hatch.build.targets.wheel.force-include]
38
+ "{{PACKAGE_NAME}}/static/dist" = "{{PACKAGE_NAME}}/static/dist"
39
+ "package.json" = "{{PACKAGE_NAME}}/package.json"
@@ -0,0 +1,27 @@
1
+ """Smoke tests for the {{MODULE_NAME}} module.
2
+
3
+ The ``build_test_app`` and ``fake_event_bus`` fixtures come from the
4
+ ``simple_module_test`` pytest plugin (registered via entry_points when
5
+ that package is installed). No conftest.py is required.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from {{PACKAGE_NAME}}.module import {{MODULE_NAME}}Module
11
+
12
+
13
+ class TestMeta:
14
+ def test_meta_name(self):
15
+ assert {{MODULE_NAME}}Module.meta.name == "{{MODULE_NAME}}"
16
+
17
+ def test_meta_requires_framework(self):
18
+ assert {{MODULE_NAME}}Module.meta.requires_framework is not None
19
+
20
+
21
+ class TestRoutes:
22
+ async def test_app_boots_with_module(self, build_test_app):
23
+ """Module registers cleanly into a minimal FastAPI host."""
24
+ app = build_test_app({{MODULE_NAME}}Module)
25
+ paths = {getattr(r, "path", None) for r in app.routes}
26
+ # The placeholder GET / endpoint lives under the route_prefix.
27
+ assert any(p and p.startswith("/api/{{MODULE_SLUG}}") for p in paths)
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "@simple-module-py/tsconfig/base.json",
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "paths": {
6
+ "@/*": ["./{{PACKAGE_NAME}}/*"],
7
+ "@simple-module-py/ui/*": ["../../packages/ui/src/*"]
8
+ }
9
+ },
10
+ "include": ["{{PACKAGE_NAME}}/**/*.ts", "{{PACKAGE_NAME}}/**/*.tsx"]
11
+ }
@@ -0,0 +1,63 @@
1
+ Metadata-Version: 2.4
2
+ Name: simple_module_cli
3
+ Version: 0.0.2
4
+ Summary: Standalone scaffolder for the SimpleModule framework — `sm new`, `sm create-module`, plugin host.
5
+ Project-URL: Homepage, https://github.com/antosubash/simple_module_python
6
+ Project-URL: Repository, https://github.com/antosubash/simple_module_python
7
+ Project-URL: Issues, https://github.com/antosubash/simple_module_python/issues
8
+ Author-email: Anto Subash <antosubash@live.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: cli,fastapi,modular-monolith,scaffolding,simple-module
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Software Development :: Code Generators
19
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
20
+ Classifier: Typing :: Typed
21
+ Requires-Python: >=3.12
22
+ Requires-Dist: tomlkit>=0.13
23
+ Requires-Dist: typer>=0.12
24
+ Description-Content-Type: text/markdown
25
+
26
+ # simple_module_cli
27
+
28
+ Standalone scaffolder for the [SimpleModule framework](https://github.com/antosubash/simple_module_python).
29
+
30
+ ## Install
31
+
32
+ ```bash
33
+ pip install simple_module_cli
34
+ # or, to keep the CLI in its own venv:
35
+ pipx install simple_module_cli
36
+ # or, to run it without installing:
37
+ uvx --from simple_module_cli sm new my-app
38
+ ```
39
+
40
+ The package depends only on `typer` and `tomlkit` — installing it does **not** pull in FastAPI, SQLModel, or any other framework runtime.
41
+
42
+ ## Usage
43
+
44
+ ```bash
45
+ sm new my-app # interactive wizard
46
+ sm new my-app --yes --preset full # all built-in modules + background jobs
47
+ sm create-module my_feature # scaffold a publishable module package
48
+ sm create-host bare-host # scaffold a bare host (no opinionated wiring)
49
+ ```
50
+
51
+ Built-in commands: `sm new`, `sm create-host`, `sm create-module`.
52
+
53
+ When other framework packages are installed, they contribute additional subcommands via the `simple_module_cli.cli_plugins` entry-point group:
54
+
55
+ | Package | Commands |
56
+ |---|---|
57
+ | `simple_module_hosting` | `sm host gen-pages`, `sm host sync-js-deps` |
58
+ | `simple_module_users` | `sm users create-admin` |
59
+ | `simple_module_settings` | `sm settings import-from-env` |
60
+
61
+ ## License
62
+
63
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,92 @@
1
+ simple_module_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ simple_module_cli/_env.py,sha256=Lq_HBA9jL4a_K6fZhVkoCvlorhs0pH5C1eS0wFZ-5H0,408
3
+ simple_module_cli/app_project.py,sha256=SYINWShXtrgsU_iUT-coU6JF6xlpTIfNtFCKDcWCoRE,4657
4
+ simple_module_cli/case.py,sha256=zwB2oVqZnqmz-7YXhswIz4jNW_Y_BkWZTn6D_Fc8RCs,997
5
+ simple_module_cli/catalog.py,sha256=N4RoidWSwXhBbOOZqxO9d9o7pKpsap0BRTsiFJWw1no,3489
6
+ simple_module_cli/cli.py,sha256=O95rCG5CDrXC0MHeZP_z8xvidq9DHyxWYMU4OlgV_w0,3064
7
+ simple_module_cli/new.py,sha256=w80zKZm2XQLaVs5AZAzSnbzwSYoRZoTWuDCcYwlRN2A,4194
8
+ simple_module_cli/plugins.py,sha256=xt-a1crksCdtZRcjzPDkPeH3X8Dranj-IkG1nwTMO9g,1903
9
+ simple_module_cli/recipes.py,sha256=K12uW814e8WljGKtd6vQ-Bu-HaigP1OiqqUEFuxXzZ8,3134
10
+ simple_module_cli/scaffolding.py,sha256=NsidsLvp-29Gfji9PTaeot-zGXCWaWfzLV9fCOlUnbE,3886
11
+ simple_module_cli/wizard.py,sha256=1MifT7s458C1bXkN9iooET2dUQ9K-JloG2tx7cgz16s,1723
12
+ simple_module_cli/templates/host/.env.example,sha256=52NXbAWL7XKRiW2jOMbne05d6p2QOb6NNhN08FrYdQs,780
13
+ simple_module_cli/templates/host/.gitignore,sha256=q_xzoBdIHbXWEwAaokRKI6Yw8LlqkZEkhq2rlWBju80,223
14
+ simple_module_cli/templates/host/Makefile,sha256=eeKn8s92NU-zJ7XMfCJN3NsLulHqZgbqxxSsifbNvug,425
15
+ simple_module_cli/templates/host/README.md.tpl,sha256=n3JtananlMSTfUKh5QfTp2-vontSg-GhHIBbZjfD378,1622
16
+ simple_module_cli/templates/host/alembic.ini,sha256=Iw2BNlafy955Ip84-sROCSZQx3btnL_WkUYMiyKAycg,523
17
+ simple_module_cli/templates/host/main.py,sha256=zA2V8CSPmYxfBm6EPpQf0CxQZxWiwfxU6U6Z5wr5YCw,620
18
+ simple_module_cli/templates/host/pyproject.toml.tpl,sha256=YKkBlSPewzNG-3GTjBqmxEh5uY-9L5BNsv5IN20QNm8,395
19
+ simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet,sha256=vm3NQuz0NF9zxJ_ad1olIbESDSKGSXCDtMhCv3_tJuk,586
20
+ simple_module_cli/templates/host/_optional/background_tasks/docker-compose.yml,sha256=-_GsTB6Wn5Y4vBpIh1D2jrIbskTSg41lM0z7UEqtoic,1198
21
+ simple_module_cli/templates/host/_optional/background_tasks/run_worker.py,sha256=xRsiVpE5stxFtfkaW_ObHW7euB97RlfZ4ZdjqYfd2Eg,592
22
+ simple_module_cli/templates/host/_optional/background_tasks/worker.Dockerfile,sha256=hfm5NOqD-PQwHdTmNR26C7_MqKfT4TJ55OPbmx32DK4,1070
23
+ simple_module_cli/templates/host/client_app/app.tsx,sha256=PnMxiExNqvr1SzVXuqq3o5vZg9px5xd-YQE9NVnqcbY,372
24
+ simple_module_cli/templates/host/client_app/main.tsx,sha256=eGDSRJr4UTdX6vri01XWNY-UVVOHc10lrTVGkrYtDRc,39
25
+ simple_module_cli/templates/host/client_app/package.json.tpl,sha256=-t16doPDXYIZjLWkc2HenyOhGKF5HTjnAY9tHdhilBs,504
26
+ simple_module_cli/templates/host/client_app/pages.ts,sha256=VIB1738vWihTdRXr-XgGWmAG2Lawm3Yx6xObRcexVRY,1517
27
+ simple_module_cli/templates/host/client_app/styles.css,sha256=_T6KO2ndN1BfPZHts5o2Z-RPoQ8QBjgdvM1jgUbwE48,87
28
+ simple_module_cli/templates/host/client_app/tsconfig.json,sha256=XSfdhUkSE7oYBod45vNVoB8BP6o9Mq-v6OSRV6hruE8,395
29
+ simple_module_cli/templates/host/client_app/vite.config.ts,sha256=SutRzxb30zhsZNigTiTOoVYsLeiBMGh_5JKiJ0Qg030,1180
30
+ simple_module_cli/templates/host/client_app/pages/Error.tsx,sha256=5cao7DmhuRBuS6IolvvIvCyeGsEH3oow8t14k8poqu0,307
31
+ simple_module_cli/templates/host/migrations/env.py,sha256=BKy4w3ucxNy0mLcnpx3Y3z2NAVwV0ryaE_G63PpOQyQ,2290
32
+ simple_module_cli/templates/host/migrations/script.py.mako,sha256=WL6l766ire0f1QNiTvopoksk1FV5KTCQjTw3MNutiIY,621
33
+ simple_module_cli/templates/host/migrations/versions/.gitkeep,sha256=ZVznI8gTedHSg8-1m0BGBSc7NVZbVGcy74MOnW_7Lkc,29
34
+ simple_module_cli/templates/host/templates/index.html,sha256=2Ei05NgvJphd5mDrIq6IaiMEJrRsB3KITrc_X2W-32g,275
35
+ simple_module_cli/templates/module/.gitignore,sha256=Eo1Lld-nxFdy1WXFhOIzaheBjqB_AnM46_g9VKxT0eY,267
36
+ simple_module_cli/templates/module/README.md.tpl,sha256=Y7wsz9NMMj_JoJAapVhmt1Jj5ySwJzVvUFpQtkc5b0U,2599
37
+ simple_module_cli/templates/module/package.json.tpl,sha256=tLi5VwzEd56ULFa0dy_yo6bdhDuPHlpFAD3hREIaw28,393
38
+ simple_module_cli/templates/module/pyproject.toml.tpl,sha256=Euz06QxP95MVtoKnNTo3xBMDvwb6dfPJoWcP7kVYlTc,1377
39
+ simple_module_cli/templates/module/tsconfig.json.tpl,sha256=OLZybYSFmZqwS7_dkCbfFQSwQd2UnN82PGJaOElTVNA,296
40
+ simple_module_cli/templates/module/.github/workflows/ci.yml,sha256=1RaWyGVouHQWzjJ4fQ_mNFbVjOm_uyci_e04woyiI9o,590
41
+ simple_module_cli/templates/module/.github/workflows/publish.yml.tpl,sha256=Kgl2bZ96u_Dw8RDW_bigUJuKZUiqDirwzu8Gx8ReZqQ,1476
42
+ simple_module_cli/templates/module/__PACKAGE__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ simple_module_cli/templates/module/__PACKAGE__/module.py.tpl,sha256=jBgL_1qlM9AyIq3OzByLANcrnGJ5OklsW1Yb4YE9bbc,1674
44
+ simple_module_cli/templates/module/__PACKAGE__/services.py.tpl,sha256=QIaYi46pgnKl4mFKMUKbRGSRg7cal5uRgg_kbjCICck,551
45
+ simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl,sha256=pCvRH_npycyHxnrRwLoovyV_-UF5JoPWNBgSm0mLSfw,268
47
+ simple_module_cli/templates/module/__PACKAGE__/pages/.gitkeep,sha256=ozHKCaZJVarwrSmvRbf6u9Kzo-b72Gh1I2nq063SrO0,72
48
+ simple_module_cli/templates/module/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ simple_module_cli/templates/module/tests/test_module.py.tpl,sha256=hdFJQQCqb3jEKy_MKD0NCWIIcC8uKul8wqJtUL3kHK0,993
50
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/.env.example,sha256=52NXbAWL7XKRiW2jOMbne05d6p2QOb6NNhN08FrYdQs,780
51
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/.gitignore,sha256=q_xzoBdIHbXWEwAaokRKI6Yw8LlqkZEkhq2rlWBju80,223
52
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/Makefile,sha256=eeKn8s92NU-zJ7XMfCJN3NsLulHqZgbqxxSsifbNvug,425
53
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/README.md.tpl,sha256=n3JtananlMSTfUKh5QfTp2-vontSg-GhHIBbZjfD378,1622
54
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/alembic.ini,sha256=Iw2BNlafy955Ip84-sROCSZQx3btnL_WkUYMiyKAycg,523
55
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/main.py,sha256=zA2V8CSPmYxfBm6EPpQf0CxQZxWiwfxU6U6Z5wr5YCw,620
56
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/pyproject.toml.tpl,sha256=YKkBlSPewzNG-3GTjBqmxEh5uY-9L5BNsv5IN20QNm8,395
57
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet,sha256=vm3NQuz0NF9zxJ_ad1olIbESDSKGSXCDtMhCv3_tJuk,586
58
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/_optional/background_tasks/docker-compose.yml,sha256=-_GsTB6Wn5Y4vBpIh1D2jrIbskTSg41lM0z7UEqtoic,1198
59
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/_optional/background_tasks/run_worker.py,sha256=xRsiVpE5stxFtfkaW_ObHW7euB97RlfZ4ZdjqYfd2Eg,592
60
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/_optional/background_tasks/worker.Dockerfile,sha256=hfm5NOqD-PQwHdTmNR26C7_MqKfT4TJ55OPbmx32DK4,1070
61
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/app.tsx,sha256=PnMxiExNqvr1SzVXuqq3o5vZg9px5xd-YQE9NVnqcbY,372
62
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/main.tsx,sha256=eGDSRJr4UTdX6vri01XWNY-UVVOHc10lrTVGkrYtDRc,39
63
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/package.json.tpl,sha256=-t16doPDXYIZjLWkc2HenyOhGKF5HTjnAY9tHdhilBs,504
64
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/pages.ts,sha256=VIB1738vWihTdRXr-XgGWmAG2Lawm3Yx6xObRcexVRY,1517
65
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/styles.css,sha256=_T6KO2ndN1BfPZHts5o2Z-RPoQ8QBjgdvM1jgUbwE48,87
66
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/tsconfig.json,sha256=XSfdhUkSE7oYBod45vNVoB8BP6o9Mq-v6OSRV6hruE8,395
67
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/vite.config.ts,sha256=SutRzxb30zhsZNigTiTOoVYsLeiBMGh_5JKiJ0Qg030,1180
68
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/client_app/pages/Error.tsx,sha256=5cao7DmhuRBuS6IolvvIvCyeGsEH3oow8t14k8poqu0,307
69
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/migrations/env.py,sha256=BKy4w3ucxNy0mLcnpx3Y3z2NAVwV0ryaE_G63PpOQyQ,2290
70
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/migrations/script.py.mako,sha256=WL6l766ire0f1QNiTvopoksk1FV5KTCQjTw3MNutiIY,621
71
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/migrations/versions/.gitkeep,sha256=ZVznI8gTedHSg8-1m0BGBSc7NVZbVGcy74MOnW_7Lkc,29
72
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/host/templates/index.html,sha256=2Ei05NgvJphd5mDrIq6IaiMEJrRsB3KITrc_X2W-32g,275
73
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/.gitignore,sha256=Eo1Lld-nxFdy1WXFhOIzaheBjqB_AnM46_g9VKxT0eY,267
74
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/README.md.tpl,sha256=Y7wsz9NMMj_JoJAapVhmt1Jj5ySwJzVvUFpQtkc5b0U,2599
75
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/package.json.tpl,sha256=tLi5VwzEd56ULFa0dy_yo6bdhDuPHlpFAD3hREIaw28,393
76
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/pyproject.toml.tpl,sha256=Euz06QxP95MVtoKnNTo3xBMDvwb6dfPJoWcP7kVYlTc,1377
77
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/tsconfig.json.tpl,sha256=OLZybYSFmZqwS7_dkCbfFQSwQd2UnN82PGJaOElTVNA,296
78
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/.github/workflows/ci.yml,sha256=1RaWyGVouHQWzjJ4fQ_mNFbVjOm_uyci_e04woyiI9o,590
79
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/.github/workflows/publish.yml.tpl,sha256=Kgl2bZ96u_Dw8RDW_bigUJuKZUiqDirwzu8Gx8ReZqQ,1476
80
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/module.py.tpl,sha256=jBgL_1qlM9AyIq3OzByLANcrnGJ5OklsW1Yb4YE9bbc,1674
82
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/services.py.tpl,sha256=QIaYi46pgnKl4mFKMUKbRGSRg7cal5uRgg_kbjCICck,551
83
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl,sha256=pCvRH_npycyHxnrRwLoovyV_-UF5JoPWNBgSm0mLSfw,268
85
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/__PACKAGE__/pages/.gitkeep,sha256=ozHKCaZJVarwrSmvRbf6u9Kzo-b72Gh1I2nq063SrO0,72
86
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ simple_module_cli-0.0.2.data/data/simple_module_cli/templates/module/tests/test_module.py.tpl,sha256=hdFJQQCqb3jEKy_MKD0NCWIIcC8uKul8wqJtUL3kHK0,993
88
+ simple_module_cli-0.0.2.dist-info/METADATA,sha256=C6lewzIVysDCbk-J07o_007OIfz_AkHUEHlv0QpcVtk,2404
89
+ simple_module_cli-0.0.2.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
90
+ simple_module_cli-0.0.2.dist-info/entry_points.txt,sha256=XN6pi0tQ_x0XqPf7HR3mC5XGtEPWy3QX97M3fq_o4lc,93
91
+ simple_module_cli-0.0.2.dist-info/licenses/LICENSE,sha256=Yn66lhLklsF5p7pa85_ksQrJ79Q-FgOaUAHevLBjer4,1068
92
+ simple_module_cli-0.0.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ simple-module = simple_module_cli.cli:main
3
+ sm = simple_module_cli.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Anto Subash
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.