skeleton-framework 0.1.1__tar.gz → 0.1.3__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.
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/PKG-INFO +30 -13
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/README.md +29 -12
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/pyproject.toml +1 -1
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/cli.py +5 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/client.py +3 -1
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/client/init.py +1 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/config.py +153 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/copy.py +279 -0
- {skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src → skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/react}/main.tsx +1 -1
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/react/skeleton-config.json +30 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/react/skeleton-dependencies.json +21 -0
- {skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/templates/app/frontend → skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles}/skeleton-config.json +1 -1
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/solid/main.tsx +20 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/solid/skeleton-config.json +30 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/solid/skeleton-dependencies.json +22 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/solid/tsconfig.json +93 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/vue/main.ts +20 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/vue/skeleton-config.json +30 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/vue/skeleton-dependencies.json +21 -0
- skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/vue/tsconfig.json +91 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/config.py +3 -3
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/main.py +1 -1
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/main.py +1 -1
- skeleton_framework-0.1.3/skeleton/packages/.skeleton/skeleton-cli-1.0.0.tgz +0 -0
- skeleton_framework-0.1.3/skeleton/packages/.skeleton/skeleton-webpack-1.0.0.tgz +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/PKG-INFO +30 -13
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/SOURCES.txt +13 -3
- skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/config.py +0 -54
- skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/copy.py +0 -56
- skeleton_framework-0.1.1/skeleton/packages/.skeleton/skeleton-cli-1.0.0.tgz +0 -0
- skeleton_framework-0.1.1/skeleton/packages/.skeleton/skeleton-webpack-1.0.0.tgz +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/LICENSE +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/setup.cfg +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/client/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/client/install.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/build.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/init.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/install.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/pack.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/load.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/backend/requirements.txt +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/backend/routes.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/backend/src/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/backend/src/main.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/package.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/index.html +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/css/styles.css +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/img/skeleton.png +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/js/script.js +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/.gitignore +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-dependencies.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-layout.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-schemas.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-servers.json +0 -0
- {skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/templates/app/frontend → skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/react}/tsconfig.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/config.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/constants.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/context.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/env.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/layout.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/loader.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/repository.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/utils.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/settings/proxy.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/settings/services.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/app.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/client.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/config.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/context.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/headers.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/lifespan.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/loader.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/logging.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/parser.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/registry.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/reverseproxy.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/router.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/schemas.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/service.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/utils.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/validation.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/layout.json +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/__init__.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/actions.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/browser.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/cmd.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/command.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/frontend.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/gateway.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/hook.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/packages.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/parser.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/process.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/services.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/utils.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/validation.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/root.py +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/dependency_links.txt +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/entry_points.txt +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/requires.txt +0 -0
- {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skeleton-framework
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: A full-stack app framework: Python orchestration + FastAPI + WebPack frontend.
|
|
5
5
|
Author-email: lambdadotjoburg <lambdadotjoburg@gmail.com>
|
|
6
6
|
License-Expression: LicenseRef-Proprietary
|
|
@@ -68,9 +68,9 @@ Install Skeleton from PyPI:
|
|
|
68
68
|
python -m pip install skeleton-framework
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-

|
|
71
|
+

|
|
72
72
|
|
|
73
|
-

|
|
73
|
+

|
|
74
74
|
|
|
75
75
|
The installed Python distribution provides the `skeleton` command.
|
|
76
76
|
|
|
@@ -89,7 +89,7 @@ Configure the project, initialize its files, and install its dependencies:
|
|
|
89
89
|
skeleton --quickstart
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-

|
|
92
|
+

|
|
93
93
|
|
|
94
94
|
This combines the configuration, initialization, and installation stages.
|
|
95
95
|
|
|
@@ -107,11 +107,28 @@ Skeleton also exposes the individual stages when you want to configure the appli
|
|
|
107
107
|
|
|
108
108
|
### 1. Generate configuration
|
|
109
109
|
|
|
110
|
+
Generate the project configuration files before initialization.
|
|
111
|
+
Skeleton supports React and SolidJS frontend profiles.
|
|
112
|
+
|
|
113
|
+
Select the desired frontend framework using the `--config` command:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
skeleton --config react
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Or select SolidJS:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
skeleton --config solid
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
If no framework is specified, React is selected by default:
|
|
126
|
+
|
|
110
127
|
```bash
|
|
111
128
|
skeleton --config
|
|
112
129
|
```
|
|
113
130
|
|
|
114
|
-

|
|
131
|
+

|
|
115
132
|
|
|
116
133
|
This generates the project's configuration files:
|
|
117
134
|
|
|
@@ -129,7 +146,7 @@ Review and customize these files before initialization if necessary.
|
|
|
129
146
|
skeleton --init
|
|
130
147
|
```
|
|
131
148
|
|
|
132
|
-

|
|
149
|
+

|
|
133
150
|
|
|
134
151
|
Initialization creates the configured frontend and backend structure from the framework's templates, prepares dependency manifests, and configures the local frontend tooling packages.
|
|
135
152
|
|
|
@@ -139,7 +156,7 @@ Initialization creates the configured frontend and backend structure from the fr
|
|
|
139
156
|
skeleton --install
|
|
140
157
|
```
|
|
141
158
|
|
|
142
|
-

|
|
159
|
+

|
|
143
160
|
|
|
144
161
|
This installs frontend dependencies using npm and backend Python dependencies into the backend's `.venv` environment.
|
|
145
162
|
|
|
@@ -155,7 +172,7 @@ You can also explicitly select services:
|
|
|
155
172
|
skeleton --start frontend gateway --open
|
|
156
173
|
```
|
|
157
174
|
|
|
158
|
-

|
|
175
|
+

|
|
159
176
|
|
|
160
177
|
The selected services and runtime options determine which processes are started.
|
|
161
178
|
|
|
@@ -321,9 +338,9 @@ These commands are intended for contributors working in the Skeleton framework s
|
|
|
321
338
|
|
|
322
339
|
To get the skeleton framework onto your local machine for development, clone:
|
|
323
340
|
|
|
324
|
-
[
|
|
341
|
+
[Skeleton Github repository](https://github.com/lambdadotjoburg/skeleton.git)
|
|
325
342
|
|
|
326
|
-

|
|
343
|
+

|
|
327
344
|
|
|
328
345
|
### Initialize the framework development environment
|
|
329
346
|
|
|
@@ -331,7 +348,7 @@ To get the skeleton framework onto your local machine for development, clone:
|
|
|
331
348
|
python run.py --bootstrap
|
|
332
349
|
```
|
|
333
350
|
|
|
334
|
-

|
|
351
|
+

|
|
335
352
|
|
|
336
353
|
This combines `--init` and `--install` to initialize and install the framework's development environment.
|
|
337
354
|
|
|
@@ -341,7 +358,7 @@ This combines `--init` and `--install` to initialize and install the framework's
|
|
|
341
358
|
python run.py --dist
|
|
342
359
|
```
|
|
343
360
|
|
|
344
|
-

|
|
361
|
+

|
|
345
362
|
|
|
346
363
|
This combines `--pack` and `--build`.
|
|
347
364
|
|
|
@@ -400,7 +417,7 @@ source .venv/bin/activate
|
|
|
400
417
|
From the test project directory:
|
|
401
418
|
|
|
402
419
|
```bash
|
|
403
|
-
python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.
|
|
420
|
+
python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.3-py3-none-any.whl
|
|
404
421
|
```
|
|
405
422
|
|
|
406
423
|
Adjust the relative path, wheel filename & version to match your framework checkout and build output.
|
|
@@ -50,9 +50,9 @@ Install Skeleton from PyPI:
|
|
|
50
50
|
python -m pip install skeleton-framework
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-

|
|
53
|
+

|
|
54
54
|
|
|
55
|
-

|
|
55
|
+

|
|
56
56
|
|
|
57
57
|
The installed Python distribution provides the `skeleton` command.
|
|
58
58
|
|
|
@@ -71,7 +71,7 @@ Configure the project, initialize its files, and install its dependencies:
|
|
|
71
71
|
skeleton --quickstart
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-

|
|
74
|
+

|
|
75
75
|
|
|
76
76
|
This combines the configuration, initialization, and installation stages.
|
|
77
77
|
|
|
@@ -89,11 +89,28 @@ Skeleton also exposes the individual stages when you want to configure the appli
|
|
|
89
89
|
|
|
90
90
|
### 1. Generate configuration
|
|
91
91
|
|
|
92
|
+
Generate the project configuration files before initialization.
|
|
93
|
+
Skeleton supports React and SolidJS frontend profiles.
|
|
94
|
+
|
|
95
|
+
Select the desired frontend framework using the `--config` command:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
skeleton --config react
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Or select SolidJS:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
skeleton --config solid
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
If no framework is specified, React is selected by default:
|
|
108
|
+
|
|
92
109
|
```bash
|
|
93
110
|
skeleton --config
|
|
94
111
|
```
|
|
95
112
|
|
|
96
|
-

|
|
113
|
+

|
|
97
114
|
|
|
98
115
|
This generates the project's configuration files:
|
|
99
116
|
|
|
@@ -111,7 +128,7 @@ Review and customize these files before initialization if necessary.
|
|
|
111
128
|
skeleton --init
|
|
112
129
|
```
|
|
113
130
|
|
|
114
|
-

|
|
131
|
+

|
|
115
132
|
|
|
116
133
|
Initialization creates the configured frontend and backend structure from the framework's templates, prepares dependency manifests, and configures the local frontend tooling packages.
|
|
117
134
|
|
|
@@ -121,7 +138,7 @@ Initialization creates the configured frontend and backend structure from the fr
|
|
|
121
138
|
skeleton --install
|
|
122
139
|
```
|
|
123
140
|
|
|
124
|
-

|
|
141
|
+

|
|
125
142
|
|
|
126
143
|
This installs frontend dependencies using npm and backend Python dependencies into the backend's `.venv` environment.
|
|
127
144
|
|
|
@@ -137,7 +154,7 @@ You can also explicitly select services:
|
|
|
137
154
|
skeleton --start frontend gateway --open
|
|
138
155
|
```
|
|
139
156
|
|
|
140
|
-

|
|
157
|
+

|
|
141
158
|
|
|
142
159
|
The selected services and runtime options determine which processes are started.
|
|
143
160
|
|
|
@@ -303,9 +320,9 @@ These commands are intended for contributors working in the Skeleton framework s
|
|
|
303
320
|
|
|
304
321
|
To get the skeleton framework onto your local machine for development, clone:
|
|
305
322
|
|
|
306
|
-
[
|
|
323
|
+
[Skeleton Github repository](https://github.com/lambdadotjoburg/skeleton.git)
|
|
307
324
|
|
|
308
|
-

|
|
325
|
+

|
|
309
326
|
|
|
310
327
|
### Initialize the framework development environment
|
|
311
328
|
|
|
@@ -313,7 +330,7 @@ To get the skeleton framework onto your local machine for development, clone:
|
|
|
313
330
|
python run.py --bootstrap
|
|
314
331
|
```
|
|
315
332
|
|
|
316
|
-

|
|
333
|
+

|
|
317
334
|
|
|
318
335
|
This combines `--init` and `--install` to initialize and install the framework's development environment.
|
|
319
336
|
|
|
@@ -323,7 +340,7 @@ This combines `--init` and `--install` to initialize and install the framework's
|
|
|
323
340
|
python run.py --dist
|
|
324
341
|
```
|
|
325
342
|
|
|
326
|
-

|
|
343
|
+

|
|
327
344
|
|
|
328
345
|
This combines `--pack` and `--build`.
|
|
329
346
|
|
|
@@ -382,7 +399,7 @@ source .venv/bin/activate
|
|
|
382
399
|
From the test project directory:
|
|
383
400
|
|
|
384
401
|
```bash
|
|
385
|
-
python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.
|
|
402
|
+
python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.3-py3-none-any.whl
|
|
386
403
|
```
|
|
387
404
|
|
|
388
405
|
Adjust the relative path, wheel filename & version to match your framework checkout and build output.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "skeleton-framework"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.3"
|
|
8
8
|
description = "A full-stack app framework: Python orchestration + FastAPI + WebPack frontend."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -27,10 +27,15 @@ from pathlib import Path
|
|
|
27
27
|
# ============================================================
|
|
28
28
|
|
|
29
29
|
# skeleton --config
|
|
30
|
+
# skeleton --config react
|
|
31
|
+
# skeleton --config solid
|
|
32
|
+
# skeleton --config vue
|
|
33
|
+
|
|
30
34
|
# skeleton --init
|
|
31
35
|
# skeleton --install
|
|
32
36
|
# skeleton --start
|
|
33
37
|
# skeleton --start frontend gateway --open
|
|
38
|
+
|
|
34
39
|
# skeleton --quickstart
|
|
35
40
|
|
|
36
41
|
# skeleton --serve
|
|
@@ -176,11 +176,13 @@ def main(
|
|
|
176
176
|
|
|
177
177
|
from skeleton.infrastructure.bootstrap.src.config import config
|
|
178
178
|
|
|
179
|
+
framework = args[1] if len(args) > 1 else None
|
|
180
|
+
|
|
179
181
|
config(
|
|
180
182
|
framework_root=framework_root,
|
|
181
183
|
project_root=project_root,
|
|
184
|
+
framework=framework,
|
|
182
185
|
)
|
|
183
|
-
|
|
184
186
|
return 0
|
|
185
187
|
|
|
186
188
|
if command == "--init":
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import json, shutil
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
SUPPORTED_FRAMEWORKS = {"react", "solid"} # add vue
|
|
5
|
+
|
|
6
|
+
def read_json(path: Path) -> dict:
|
|
7
|
+
with path.open("r", encoding="utf-8") as file:
|
|
8
|
+
data = json.load(file)
|
|
9
|
+
|
|
10
|
+
if not isinstance(data, dict):
|
|
11
|
+
raise ValueError(f"Expected a JSON object: {path}")
|
|
12
|
+
|
|
13
|
+
return data
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def write_json(path: Path, data: dict) -> None:
|
|
17
|
+
with path.open("w", encoding="utf-8") as file:
|
|
18
|
+
json.dump(data, file, indent=4)
|
|
19
|
+
file.write("\n")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def config(
|
|
23
|
+
framework_root: Path,
|
|
24
|
+
project_root: Path,
|
|
25
|
+
framework: str | None = None,
|
|
26
|
+
) -> None:
|
|
27
|
+
|
|
28
|
+
templates_root = (
|
|
29
|
+
framework_root
|
|
30
|
+
/ "skeleton"
|
|
31
|
+
/ "infrastructure"
|
|
32
|
+
/ "bootstrap"
|
|
33
|
+
/ "src"
|
|
34
|
+
/ "templates"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
config_templates = templates_root / "config"
|
|
38
|
+
profiles_root = templates_root / "profiles"
|
|
39
|
+
|
|
40
|
+
if not config_templates.is_dir():
|
|
41
|
+
raise FileNotFoundError(
|
|
42
|
+
f"Configuration templates not found: {config_templates}"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
if not profiles_root.is_dir():
|
|
46
|
+
raise FileNotFoundError(
|
|
47
|
+
f"Framework profiles not found: {profiles_root}"
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
if framework is not None:
|
|
51
|
+
framework = framework.strip().lower()
|
|
52
|
+
|
|
53
|
+
if framework not in SUPPORTED_FRAMEWORKS:
|
|
54
|
+
supported = ", ".join(sorted(SUPPORTED_FRAMEWORKS))
|
|
55
|
+
raise ValueError(
|
|
56
|
+
f"Unsupported frontend framework: {framework!r}. "
|
|
57
|
+
f"Choose one of: {supported}"
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
project_root = project_root.resolve()
|
|
61
|
+
project_root.mkdir(parents=True, exist_ok=True)
|
|
62
|
+
|
|
63
|
+
# ---------------------------------------------------------
|
|
64
|
+
# Copy shared project configuration.
|
|
65
|
+
# ---------------------------------------------------------
|
|
66
|
+
|
|
67
|
+
for template in config_templates.iterdir():
|
|
68
|
+
destination = project_root / template.name
|
|
69
|
+
|
|
70
|
+
if destination.exists():
|
|
71
|
+
print(f"INFO: Preserving existing file: {destination}")
|
|
72
|
+
continue
|
|
73
|
+
|
|
74
|
+
if template.is_dir():
|
|
75
|
+
shutil.copytree(template, destination)
|
|
76
|
+
else:
|
|
77
|
+
shutil.copy2(template, destination)
|
|
78
|
+
|
|
79
|
+
print(f"INFO: Created: {destination}")
|
|
80
|
+
|
|
81
|
+
# ---------------------------------------------------------
|
|
82
|
+
# Determine the selected framework.
|
|
83
|
+
# ---------------------------------------------------------
|
|
84
|
+
|
|
85
|
+
frontend_config_path = project_root / "skeleton-config.json"
|
|
86
|
+
dependencies_path = project_root / "skeleton-dependencies.json"
|
|
87
|
+
|
|
88
|
+
if framework is not None:
|
|
89
|
+
selected_framework = framework
|
|
90
|
+
|
|
91
|
+
elif frontend_config_path.is_file():
|
|
92
|
+
existing_config = read_json(frontend_config_path)
|
|
93
|
+
selected_framework = existing_config.get("framework", "react")
|
|
94
|
+
|
|
95
|
+
if (
|
|
96
|
+
not isinstance(selected_framework, str)
|
|
97
|
+
or selected_framework not in SUPPORTED_FRAMEWORKS
|
|
98
|
+
):
|
|
99
|
+
raise ValueError(
|
|
100
|
+
f"Invalid framework in {frontend_config_path}: "
|
|
101
|
+
f"{selected_framework!r}"
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
else:
|
|
105
|
+
selected_framework = "react"
|
|
106
|
+
|
|
107
|
+
profile = profiles_root / selected_framework
|
|
108
|
+
|
|
109
|
+
if not profile.is_dir():
|
|
110
|
+
raise FileNotFoundError(
|
|
111
|
+
f"Framework profile not found: {profile}"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
profile_config_path = profile / "skeleton-config.json"
|
|
115
|
+
profile_dependencies_path = profile / "skeleton-dependencies.json"
|
|
116
|
+
|
|
117
|
+
for path in (profile_config_path, profile_dependencies_path):
|
|
118
|
+
if not path.is_file():
|
|
119
|
+
raise FileNotFoundError(
|
|
120
|
+
f"Required framework profile file not found: {path}"
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
# Read and validate both profile files before writing either.
|
|
124
|
+
frontend_config = read_json(profile_config_path)
|
|
125
|
+
dependencies = read_json(profile_dependencies_path)
|
|
126
|
+
|
|
127
|
+
# Ensure the selected profile identifies itself correctly.
|
|
128
|
+
frontend_config["framework"] = selected_framework
|
|
129
|
+
|
|
130
|
+
# ---------------------------------------------------------
|
|
131
|
+
# Generate the root-level framework configuration.
|
|
132
|
+
# ---------------------------------------------------------
|
|
133
|
+
|
|
134
|
+
# Explicit selection resets both framework-managed files
|
|
135
|
+
# to the chosen profile defaults.
|
|
136
|
+
#
|
|
137
|
+
# Without an explicit selection, preserve existing files
|
|
138
|
+
# and create only files that are missing.
|
|
139
|
+
|
|
140
|
+
if framework is not None or not frontend_config_path.exists():
|
|
141
|
+
write_json(frontend_config_path, frontend_config)
|
|
142
|
+
print(f"INFO: Created/updated: {frontend_config_path}")
|
|
143
|
+
else:
|
|
144
|
+
print(f"INFO: Preserving existing file: {frontend_config_path}")
|
|
145
|
+
|
|
146
|
+
if framework is not None or not dependencies_path.exists():
|
|
147
|
+
write_json(dependencies_path, dependencies)
|
|
148
|
+
print(f"INFO: Created/updated: {dependencies_path}")
|
|
149
|
+
else:
|
|
150
|
+
print(f"INFO: Preserving existing file: {dependencies_path}")
|
|
151
|
+
|
|
152
|
+
print(f"INFO: Selected frontend framework: {selected_framework}")
|
|
153
|
+
print("INFO: Configuration complete")
|