tina4-python 3.1.2__tar.gz → 3.2.0__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.
- {tina4_python-3.1.2 → tina4_python-3.2.0}/.gitignore +60 -60
- {tina4_python-3.1.2 → tina4_python-3.2.0}/PKG-INFO +26 -9
- {tina4_python-3.1.2 → tina4_python-3.2.0}/README.md +725 -701
- {tina4_python-3.1.2 → tina4_python-3.2.0}/pyproject.toml +70 -78
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/CLAUDE.md +1780 -1780
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/HtmlElement.py +124 -124
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/Testing.py +183 -183
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/__init__.py +40 -40
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/ai/__init__.py +412 -412
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/api/__init__.py +144 -144
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/auth/__init__.py +183 -183
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/cache/__init__.py +727 -727
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/cli/__init__.py +524 -524
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/container/__init__.py +85 -85
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/__init__.py +32 -32
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/cache.py +161 -161
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/constants.py +47 -47
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/events.py +130 -130
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/middleware.py +139 -139
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/request.py +162 -162
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/response.py +234 -234
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/router.py +240 -240
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/core/server.py +966 -950
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/crud/__init__.py +264 -264
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/__init__.py +17 -17
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/adapter.py +345 -345
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/connection.py +278 -278
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/firebird.py +254 -254
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/mssql.py +243 -243
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/mysql.py +213 -213
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/odbc.py +172 -172
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/postgres.py +235 -235
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/database/sqlite.py +211 -211
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/debug/__init__.py +225 -225
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/debug/error_overlay.py +245 -241
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/dev_admin/__init__.py +1731 -1731
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/dotenv/__init__.py +159 -159
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/frond/FROND.md +490 -490
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/frond/__init__.py +12 -12
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/frond/engine.py +1314 -1314
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/auth/meta.json +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/auth/src/routes/api/gallery_auth.py +121 -121
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/database/meta.json +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/database/src/routes/api/gallery_db.py +48 -48
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/error-overlay/meta.json +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/error-overlay/src/routes/api/gallery_crash.py +19 -19
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/orm/meta.json +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/orm/src/orm/Product.py +10 -10
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/orm/src/routes/api/gallery_products.py +17 -17
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/queue/meta.json +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/queue/src/routes/api/gallery_queue.py +259 -259
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/rest-api/meta.json +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/rest-api/src/routes/api/gallery_hello.py +19 -19
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/templates/meta.json +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/templates/src/routes/gallery_page.py +15 -15
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/gallery/templates/src/templates/gallery_page.twig +255 -255
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/graphql/__init__.py +622 -622
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/i18n/__init__.py +108 -108
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/messenger/__init__.py +833 -833
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/migration/__init__.py +13 -13
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/migration/runner.py +244 -244
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/orm/__init__.py +38 -38
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/orm/fields.py +295 -295
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/orm/model.py +682 -682
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/css/tina4.css +2463 -2463
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/css/tina4.min.css +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/images/logo.svg +5 -5
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/js/frond.min.js +419 -419
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/js/tina4-dev-admin.min.js +326 -326
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/js/tina4.min.js +92 -92
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/swagger/index.html +90 -90
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/swagger/oauth2-redirect.html +63 -63
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/queue/__init__.py +505 -505
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/queue_backends/__init__.py +20 -20
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/queue_backends/kafka_backend.py +358 -358
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/queue_backends/rabbitmq_backend.py +425 -425
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/__init__.py +456 -456
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_alerts.scss +34 -34
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_badges.scss +22 -22
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_buttons.scss +69 -69
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_cards.scss +49 -49
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_forms.scss +156 -156
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_grid.scss +81 -81
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_modals.scss +84 -84
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_nav.scss +149 -149
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_reset.scss +94 -94
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_tables.scss +54 -54
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_typography.scss +55 -55
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_utilities.scss +197 -197
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/_variables.scss +117 -117
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/base.scss +1 -1
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/colors.scss +48 -48
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/scss/tina4css/tina4.scss +17 -17
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/seeder/__init__.py +182 -182
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/service/__init__.py +414 -414
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/session/__init__.py +253 -253
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/session_handlers/__init__.py +18 -18
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/session_handlers/mongodb_handler.py +339 -339
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/session_handlers/redis_handler.py +206 -206
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/session_handlers/valkey_handler.py +208 -208
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/swagger/__init__.py +285 -285
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/components/crud.twig +516 -516
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/docker/distroless/Dockerfile +61 -61
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/docker/poetry/Dockerfile +57 -57
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/docker/python/Dockerfile +61 -61
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/docker/uv/Dockerfile +58 -58
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/errors/302.twig +14 -14
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/errors/401.twig +9 -9
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/errors/403.twig +29 -29
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/errors/404.twig +29 -29
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/errors/500.twig +38 -38
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/errors/502.twig +9 -9
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/errors/503.twig +12 -12
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/errors/base.twig +37 -37
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/frontend/README.md +130 -130
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/af/LC_MESSAGES/messages.po +233 -233
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/en/LC_MESSAGES/messages.po +233 -233
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/es/LC_MESSAGES/messages.po +233 -233
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/fr/LC_MESSAGES/messages.po +233 -233
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/ja/LC_MESSAGES/messages.po +233 -233
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/zh/LC_MESSAGES/messages.po +233 -233
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/websocket/__init__.py +492 -492
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/wsdl/__init__.py +356 -356
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/favicon.ico +0 -0
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/public/images/tina4-logo-icon.webp +0 -0
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/templates/readme.md +0 -0
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/af/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/es/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/ja/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.1.2 → tina4_python-3.2.0}/tina4_python/translations/zh/LC_MESSAGES/messages.mo +0 -0
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
/.idea/
|
|
2
|
-
/venv/
|
|
3
|
-
/dist/
|
|
4
|
-
/src/public/
|
|
5
|
-
/.pypirc
|
|
6
|
-
/src/templates/index.twig
|
|
7
|
-
/secrets/
|
|
8
|
-
/.env
|
|
9
|
-
/public/css/test.css
|
|
10
|
-
/sessions/
|
|
11
|
-
/tests/secrets/domain.cert
|
|
12
|
-
/tests/secrets/private.key
|
|
13
|
-
/tests/secrets/public.key
|
|
14
|
-
/tests/src/public/css/readme.md
|
|
15
|
-
/tests/src/public/images/403.png
|
|
16
|
-
/tests/src/public/images/404.png
|
|
17
|
-
/tests/src/public/images/logo.png
|
|
18
|
-
/tests/src/public/images/readme.md
|
|
19
|
-
/tests/src/public/js/readme.md
|
|
20
|
-
/tests/src/public/swagger/index.html
|
|
21
|
-
/tests/src/public/swagger/oauth2-redirect.html
|
|
22
|
-
/tests/src/public/favicon.ico
|
|
23
|
-
/tests/src/templates/errors/403.twig
|
|
24
|
-
/tests/src/templates/errors/404.twig
|
|
25
|
-
/tests/src/templates/readme.md
|
|
26
|
-
/tests/src/__init__.py
|
|
27
|
-
/tests/.env
|
|
28
|
-
/tests/app.py
|
|
29
|
-
/test.db
|
|
30
|
-
*.db-wal
|
|
31
|
-
*.db-shm
|
|
32
|
-
*.db-journal
|
|
33
|
-
test_queue*.db
|
|
34
|
-
/queue.db
|
|
35
|
-
/logs/
|
|
36
|
-
/migrations/__test_user.sql
|
|
37
|
-
/migrations/__test_user_item.sql
|
|
38
|
-
/tina4_python.egg-info/
|
|
39
|
-
/src/templates/crud/
|
|
40
|
-
/.venv/
|
|
41
|
-
/publish.bat
|
|
42
|
-
/Dockerfile
|
|
43
|
-
/data.db
|
|
44
|
-
/publish.sh
|
|
45
|
-
/src/scss/
|
|
46
|
-
/broken
|
|
47
|
-
__pycache__/
|
|
48
|
-
.DS_Store
|
|
49
|
-
.coverage
|
|
50
|
-
/benchmarks/.env
|
|
51
|
-
/benchmarks/data.db
|
|
52
|
-
/benchmarks/logs/
|
|
53
|
-
/benchmarks/sessions/
|
|
54
|
-
/benchmarks/secrets/
|
|
55
|
-
/benchmarks/results/
|
|
56
|
-
/benchmarks/__pycache__/
|
|
57
|
-
.claude/
|
|
58
|
-
*.c
|
|
59
|
-
*.so
|
|
60
|
-
build/
|
|
1
|
+
/.idea/
|
|
2
|
+
/venv/
|
|
3
|
+
/dist/
|
|
4
|
+
/src/public/
|
|
5
|
+
/.pypirc
|
|
6
|
+
/src/templates/index.twig
|
|
7
|
+
/secrets/
|
|
8
|
+
/.env
|
|
9
|
+
/public/css/test.css
|
|
10
|
+
/sessions/
|
|
11
|
+
/tests/secrets/domain.cert
|
|
12
|
+
/tests/secrets/private.key
|
|
13
|
+
/tests/secrets/public.key
|
|
14
|
+
/tests/src/public/css/readme.md
|
|
15
|
+
/tests/src/public/images/403.png
|
|
16
|
+
/tests/src/public/images/404.png
|
|
17
|
+
/tests/src/public/images/logo.png
|
|
18
|
+
/tests/src/public/images/readme.md
|
|
19
|
+
/tests/src/public/js/readme.md
|
|
20
|
+
/tests/src/public/swagger/index.html
|
|
21
|
+
/tests/src/public/swagger/oauth2-redirect.html
|
|
22
|
+
/tests/src/public/favicon.ico
|
|
23
|
+
/tests/src/templates/errors/403.twig
|
|
24
|
+
/tests/src/templates/errors/404.twig
|
|
25
|
+
/tests/src/templates/readme.md
|
|
26
|
+
/tests/src/__init__.py
|
|
27
|
+
/tests/.env
|
|
28
|
+
/tests/app.py
|
|
29
|
+
/test.db
|
|
30
|
+
*.db-wal
|
|
31
|
+
*.db-shm
|
|
32
|
+
*.db-journal
|
|
33
|
+
test_queue*.db
|
|
34
|
+
/queue.db
|
|
35
|
+
/logs/
|
|
36
|
+
/migrations/__test_user.sql
|
|
37
|
+
/migrations/__test_user_item.sql
|
|
38
|
+
/tina4_python.egg-info/
|
|
39
|
+
/src/templates/crud/
|
|
40
|
+
/.venv/
|
|
41
|
+
/publish.bat
|
|
42
|
+
/Dockerfile
|
|
43
|
+
/data.db
|
|
44
|
+
/publish.sh
|
|
45
|
+
/src/scss/
|
|
46
|
+
/broken
|
|
47
|
+
__pycache__/
|
|
48
|
+
.DS_Store
|
|
49
|
+
.coverage
|
|
50
|
+
/benchmarks/.env
|
|
51
|
+
/benchmarks/data.db
|
|
52
|
+
/benchmarks/logs/
|
|
53
|
+
/benchmarks/sessions/
|
|
54
|
+
/benchmarks/secrets/
|
|
55
|
+
/benchmarks/results/
|
|
56
|
+
/benchmarks/__pycache__/
|
|
57
|
+
.claude/
|
|
58
|
+
*.c
|
|
59
|
+
*.so
|
|
60
|
+
build/
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tina4-python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0
|
|
4
4
|
Summary: Tina4 Python v3 — Zero-dependency, lightweight web framework
|
|
5
5
|
Author-email: Andre van Zuydam <andrevanzuydam@gmail.com>
|
|
6
6
|
License: MIT
|
|
7
7
|
Requires-Python: >=3.12
|
|
8
|
-
Requires-Dist: fdb>=2.0.4
|
|
9
|
-
Requires-Dist: mysql-connector-python>=9.6.0
|
|
10
|
-
Requires-Dist: pika>=1.3.2
|
|
11
|
-
Requires-Dist: psycopg2-binary>=2.9.11
|
|
12
|
-
Requires-Dist: pymongo>=4.16.0
|
|
13
|
-
Requires-Dist: pymssql>=2.3.13
|
|
14
|
-
Requires-Dist: redis>=7.3.0
|
|
15
8
|
Provides-Extra: all-db
|
|
16
9
|
Requires-Dist: firebird-driver>=1.10; extra == 'all-db'
|
|
17
10
|
Requires-Dist: mysql-connector-python>=9.0; extra == 'all-db'
|
|
@@ -82,7 +75,31 @@ cd my-app && tina4 serve
|
|
|
82
75
|
|
|
83
76
|
Open http://localhost:7145 — your app is running.
|
|
84
77
|
|
|
85
|
-
>
|
|
78
|
+
<details>
|
|
79
|
+
<summary><strong>Without the Tina4 CLI</strong></summary>
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# 1. Create project
|
|
83
|
+
mkdir my-app && cd my-app
|
|
84
|
+
uv init && uv add tina4-python
|
|
85
|
+
|
|
86
|
+
# 2. Create entry point
|
|
87
|
+
echo 'from tina4_python.core import run; run()' > app.py
|
|
88
|
+
|
|
89
|
+
# 3. Create .env
|
|
90
|
+
echo 'TINA4_DEBUG=true' > .env
|
|
91
|
+
echo 'TINA4_LOG_LEVEL=ALL' >> .env
|
|
92
|
+
|
|
93
|
+
# 4. Create route directory
|
|
94
|
+
mkdir -p src/routes
|
|
95
|
+
|
|
96
|
+
# 5. Run
|
|
97
|
+
uv run python app.py
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Open http://localhost:7145
|
|
101
|
+
|
|
102
|
+
</details>
|
|
86
103
|
|
|
87
104
|
---
|
|
88
105
|
|