pyweber 1.6.0.dev3__tar.gz → 1.6.2__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.
- {pyweber-1.6.0.dev3/pyweber.egg-info → pyweber-1.6.2}/PKG-INFO +11 -7
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/README.md +7 -3
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyproject.toml +4 -4
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/create_app.py +39 -11
- {pyweber-1.6.0.dev3 → pyweber-1.6.2/pyweber.egg-info}/PKG-INFO +11 -7
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber.egg-info/requires.txt +2 -2
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/LICENSE +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/MANIFEST.in +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/NOTICE +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/admin/index.html +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/admin/src/script.js +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/admin/src/style.css +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/auth/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/auth/decorators.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/auth/passwords.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/auth/rbac.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/auth/session.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/cli/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/cli/commands.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/components/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/components/form.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/components/general.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/components/input.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/config/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/config/config.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/connection/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/connection/http.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/connection/reload.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/connection/selector.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/connection/session.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/connection/websocket.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/core/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/core/element.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/core/events.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/core/html_parser.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/core/template.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/core/window.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/db/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/db/cli.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/db/config.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/db/engine.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/db/model.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/db/query.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/db/session.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/context.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/cookies.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/dom_merge.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/element.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/error_pages.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/field.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/field_storage.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/file.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/file_stream.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/handoff.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/headers.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/middleware.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/openapi.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/rate_limit.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/request.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/response.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/routes.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/run.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/security.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/stream_stats.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/strem_stats.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/task_manager.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/template_diff.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/models/ws_message.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/pyweber/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/pyweber/pyweber.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/services/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/services/openapi_setup.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/services/response_pipeline.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/services/static_files.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/services/template_service.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/session_store/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/.gitignore +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/config.toml +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/css.css +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/docs.html +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/favicon/android-chrome-192x192.png +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/favicon/android-chrome-512x512.png +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/favicon/apple-touch-icon.png +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/favicon/favicon-16x16.png +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/favicon/favicon-32x32.png +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/favicon/favicon.ico +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/favicon/pyweber.png +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/favicon/site.webmanifest +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/handlers.js +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/html.html +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/html401.html +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/html404.html +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/html500.html +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/js.js +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/loading.html +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/main.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/pyweber.css +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/static/update.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/testing/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/testing/client.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/__init__.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/async_utils.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/deprecation.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/exceptions.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/icons.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/loads.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/mime.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/security.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/types.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber/utils/utils.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber.egg-info/SOURCES.txt +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber.egg-info/dependency_links.txt +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber.egg-info/entry_points.txt +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/pyweber.egg-info/top_level.txt +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/setup.cfg +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/tests/test_config.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/tests/test_context.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/tests/test_cookies.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/tests/test_public_api.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/tests/test_response.py +0 -0
- {pyweber-1.6.0.dev3 → pyweber-1.6.2}/tests/test_template_diff.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyweber
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.2
|
|
4
4
|
Summary: A lightweight Python framework for building and managing web applications.
|
|
5
|
-
Author-email:
|
|
5
|
+
Author-email: Pyweber Limitada <pypi.dev@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
7
|
Project-URL: Documentation, https://pyweber.dev/
|
|
8
8
|
Project-URL: Source, https://github.com/pyweber/pyweber
|
|
@@ -26,8 +26,8 @@ Requires-Dist: pytest-asyncio; extra == "dev"
|
|
|
26
26
|
Provides-Extra: fast-html
|
|
27
27
|
Requires-Dist: lxml; extra == "fast-html"
|
|
28
28
|
Provides-Extra: db
|
|
29
|
-
Requires-Dist: sqlalchemy
|
|
30
|
-
Requires-Dist: alembic>=1.
|
|
29
|
+
Requires-Dist: sqlalchemy>=2.0.51; extra == "db"
|
|
30
|
+
Requires-Dist: alembic>=1.19.0; extra == "db"
|
|
31
31
|
Provides-Extra: db-sqlite
|
|
32
32
|
Requires-Dist: aiosqlite>=0.20; extra == "db-sqlite"
|
|
33
33
|
Provides-Extra: db-pg
|
|
@@ -44,7 +44,11 @@ Dynamic: license-file
|
|
|
44
44
|
|
|
45
45
|
<img src="https://pyweber.readthedocs.io/images/pyweber.png" alt="Pyweber Logo">
|
|
46
46
|
|
|
47
|
-
[](https://github.com/pyweber/pyweber/actions/workflows/tests.yml)
|
|
48
|
+
[](https://pyweber.readthedocs.io/en/latest/)
|
|
49
|
+
[](https://pypi.org/project/pyweber/)
|
|
50
|
+
[](https://coveralls.io/github/pyweber/pyweber?branch=master)
|
|
51
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
48
52
|
|
|
49
53
|
Pyweber is a lightweight Python web framework designed to create dynamic, reactive web applications with a simple and intuitive API. It combines the simplicity of Python with the reactivity of modern frontend frameworks.
|
|
50
54
|
|
|
@@ -70,7 +74,7 @@ Pyweber is a lightweight Python web framework designed to create dynamic, reacti
|
|
|
70
74
|
Older lines are **not recommended** for production. Use a current release:
|
|
71
75
|
|
|
72
76
|
```bash
|
|
73
|
-
pip install -U 'pyweber>=1.
|
|
77
|
+
pip install -U 'pyweber>=1.6'
|
|
74
78
|
```
|
|
75
79
|
|
|
76
80
|
See [Supported versions](https://pyweber.dev/guides/supported-versions/) (docs) for yank / security notes. `pyproject.toml` cannot warn when someone pins an old wheel — that requires [PyPI yanking](https://docs.pypi.org/project-management/yanking/).
|
|
@@ -271,7 +275,7 @@ pyweber add-section --section-name database
|
|
|
271
275
|
pyweber --update
|
|
272
276
|
```
|
|
273
277
|
|
|
274
|
-
Visit [Pyweber Docs](https://pyweber.dev/) for complete documentation. See [CHANGELOG.md](CHANGELOG.md) for release notes (latest: **1.
|
|
278
|
+
Visit [Pyweber Docs](https://pyweber.dev/) for complete documentation. See [CHANGELOG.md](CHANGELOG.md) for release notes (latest: **1.6.0** — optional ORM/Redis, identity-preserving WS sync, reactive event fixes).
|
|
275
279
|
|
|
276
280
|
## License
|
|
277
281
|
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
<img src="https://pyweber.readthedocs.io/images/pyweber.png" alt="Pyweber Logo">
|
|
4
4
|
|
|
5
|
-
[](https://github.com/pyweber/pyweber/actions/workflows/tests.yml)
|
|
6
|
+
[](https://pyweber.readthedocs.io/en/latest/)
|
|
7
|
+
[](https://pypi.org/project/pyweber/)
|
|
8
|
+
[](https://coveralls.io/github/pyweber/pyweber?branch=master)
|
|
9
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
6
10
|
|
|
7
11
|
Pyweber is a lightweight Python web framework designed to create dynamic, reactive web applications with a simple and intuitive API. It combines the simplicity of Python with the reactivity of modern frontend frameworks.
|
|
8
12
|
|
|
@@ -28,7 +32,7 @@ Pyweber is a lightweight Python web framework designed to create dynamic, reacti
|
|
|
28
32
|
Older lines are **not recommended** for production. Use a current release:
|
|
29
33
|
|
|
30
34
|
```bash
|
|
31
|
-
pip install -U 'pyweber>=1.
|
|
35
|
+
pip install -U 'pyweber>=1.6'
|
|
32
36
|
```
|
|
33
37
|
|
|
34
38
|
See [Supported versions](https://pyweber.dev/guides/supported-versions/) (docs) for yank / security notes. `pyproject.toml` cannot warn when someone pins an old wheel — that requires [PyPI yanking](https://docs.pypi.org/project-management/yanking/).
|
|
@@ -229,7 +233,7 @@ pyweber add-section --section-name database
|
|
|
229
233
|
pyweber --update
|
|
230
234
|
```
|
|
231
235
|
|
|
232
|
-
Visit [Pyweber Docs](https://pyweber.dev/) for complete documentation. See [CHANGELOG.md](CHANGELOG.md) for release notes (latest: **1.
|
|
236
|
+
Visit [Pyweber Docs](https://pyweber.dev/) for complete documentation. See [CHANGELOG.md](CHANGELOG.md) for release notes (latest: **1.6.0** — optional ORM/Redis, identity-preserving WS sync, reactive event fixes).
|
|
233
237
|
|
|
234
238
|
## License
|
|
235
239
|
|
|
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyweber"
|
|
7
|
-
version = "1.6.
|
|
7
|
+
version = "1.6.2"
|
|
8
8
|
description = "A lightweight Python framework for building and managing web applications."
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
authors = [{ name = "
|
|
10
|
+
authors = [{ name = "Pyweber Limitada", email = "pypi.dev@gmail.com" }]
|
|
11
11
|
license = "Apache-2.0"
|
|
12
12
|
requires-python = ">=3.10"
|
|
13
13
|
dependencies = ["watchdog", "toml", "questionary", "qrcode[pil]"]
|
|
@@ -31,7 +31,7 @@ include = ["pyweber*"]
|
|
|
31
31
|
[project.optional-dependencies]
|
|
32
32
|
dev = ["pytest", "pytest-cov", "pytest-asyncio"]
|
|
33
33
|
fast-html = ["lxml"]
|
|
34
|
-
db = ["sqlalchemy
|
|
34
|
+
db = ["sqlalchemy>=2.0.51", "alembic>=1.19.0"]
|
|
35
35
|
db-sqlite = ["aiosqlite>=0.20"]
|
|
36
36
|
db-pg = ["asyncpg>=0.29"]
|
|
37
37
|
db-mysql = ["aiomysql>=0.2"]
|
|
@@ -45,5 +45,5 @@ pyweber = ["static/**/*", "admin/**/*"]
|
|
|
45
45
|
omit = ["pyweber/cli/commands.py"]
|
|
46
46
|
|
|
47
47
|
[tool.coverage.report]
|
|
48
|
-
fail_under =
|
|
48
|
+
fail_under = 88
|
|
49
49
|
show_missing = true
|
|
@@ -86,13 +86,41 @@ class CreateApp:
|
|
|
86
86
|
@property
|
|
87
87
|
def main_module(cls):
|
|
88
88
|
return os.path.basename(os.path.abspath(sys.argv[0])).split('.')[0]
|
|
89
|
-
|
|
89
|
+
|
|
90
|
+
def _entry_as_main(self):
|
|
91
|
+
"""Return ``__main__`` when it is the process entry script (``sys.argv[0]``).
|
|
92
|
+
|
|
93
|
+
``python main.py`` / the CLI load the file as ``__main__``. Reusing that
|
|
94
|
+
module avoids a second execution via ``import_module("main")``.
|
|
95
|
+
"""
|
|
96
|
+
mod = sys.modules.get('__main__')
|
|
97
|
+
main_file = getattr(mod, '__file__', None)
|
|
98
|
+
if not main_file:
|
|
99
|
+
return None
|
|
100
|
+
try:
|
|
101
|
+
if Path(main_file).resolve() != Path(sys.argv[0]).resolve():
|
|
102
|
+
return None
|
|
103
|
+
except OSError:
|
|
104
|
+
return None
|
|
105
|
+
return mod
|
|
106
|
+
|
|
90
107
|
def get_main_module(self):
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if
|
|
94
|
-
|
|
95
|
-
|
|
108
|
+
name = self.main_module
|
|
109
|
+
entry = self._entry_as_main()
|
|
110
|
+
if entry is not None:
|
|
111
|
+
# Alias so hot-reload / lookups by basename ("main") see the same object
|
|
112
|
+
sys.modules.setdefault(name, entry)
|
|
113
|
+
return sys.modules[name]
|
|
114
|
+
|
|
115
|
+
if name not in sys.modules:
|
|
116
|
+
return import_module(name)
|
|
117
|
+
|
|
118
|
+
# Hot-reload already ran in reload_modules(); only reload here when
|
|
119
|
+
# there was no __main__ alias (e.g. tests / non-script entry).
|
|
120
|
+
if self.started and self.is_reloadable_module(name):
|
|
121
|
+
return reload(sys.modules[name])
|
|
122
|
+
|
|
123
|
+
return sys.modules[name]
|
|
96
124
|
|
|
97
125
|
def project_modules(self):
|
|
98
126
|
modules: dict[str, ModuleType] = {}
|
|
@@ -197,9 +225,9 @@ class CreateApp:
|
|
|
197
225
|
|
|
198
226
|
def update(self, module: str = None):
|
|
199
227
|
self.started = True
|
|
200
|
-
self.reload_modules(changed_file=module)
|
|
201
|
-
|
|
202
|
-
from pyweber.utils.deprecation import deprecated_alias
|
|
203
|
-
|
|
204
|
-
CreatApp = deprecated_alias('CreatApp', CreateApp, alternative='CreateApp')
|
|
228
|
+
self.reload_modules(changed_file=module)
|
|
229
|
+
|
|
230
|
+
from pyweber.utils.deprecation import deprecated_alias
|
|
231
|
+
|
|
232
|
+
CreatApp = deprecated_alias('CreatApp', CreateApp, alternative='CreateApp')
|
|
205
233
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyweber
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.2
|
|
4
4
|
Summary: A lightweight Python framework for building and managing web applications.
|
|
5
|
-
Author-email:
|
|
5
|
+
Author-email: Pyweber Limitada <pypi.dev@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
7
|
Project-URL: Documentation, https://pyweber.dev/
|
|
8
8
|
Project-URL: Source, https://github.com/pyweber/pyweber
|
|
@@ -26,8 +26,8 @@ Requires-Dist: pytest-asyncio; extra == "dev"
|
|
|
26
26
|
Provides-Extra: fast-html
|
|
27
27
|
Requires-Dist: lxml; extra == "fast-html"
|
|
28
28
|
Provides-Extra: db
|
|
29
|
-
Requires-Dist: sqlalchemy
|
|
30
|
-
Requires-Dist: alembic>=1.
|
|
29
|
+
Requires-Dist: sqlalchemy>=2.0.51; extra == "db"
|
|
30
|
+
Requires-Dist: alembic>=1.19.0; extra == "db"
|
|
31
31
|
Provides-Extra: db-sqlite
|
|
32
32
|
Requires-Dist: aiosqlite>=0.20; extra == "db-sqlite"
|
|
33
33
|
Provides-Extra: db-pg
|
|
@@ -44,7 +44,11 @@ Dynamic: license-file
|
|
|
44
44
|
|
|
45
45
|
<img src="https://pyweber.readthedocs.io/images/pyweber.png" alt="Pyweber Logo">
|
|
46
46
|
|
|
47
|
-
[](https://github.com/pyweber/pyweber/actions/workflows/tests.yml)
|
|
48
|
+
[](https://pyweber.readthedocs.io/en/latest/)
|
|
49
|
+
[](https://pypi.org/project/pyweber/)
|
|
50
|
+
[](https://coveralls.io/github/pyweber/pyweber?branch=master)
|
|
51
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
48
52
|
|
|
49
53
|
Pyweber is a lightweight Python web framework designed to create dynamic, reactive web applications with a simple and intuitive API. It combines the simplicity of Python with the reactivity of modern frontend frameworks.
|
|
50
54
|
|
|
@@ -70,7 +74,7 @@ Pyweber is a lightweight Python web framework designed to create dynamic, reacti
|
|
|
70
74
|
Older lines are **not recommended** for production. Use a current release:
|
|
71
75
|
|
|
72
76
|
```bash
|
|
73
|
-
pip install -U 'pyweber>=1.
|
|
77
|
+
pip install -U 'pyweber>=1.6'
|
|
74
78
|
```
|
|
75
79
|
|
|
76
80
|
See [Supported versions](https://pyweber.dev/guides/supported-versions/) (docs) for yank / security notes. `pyproject.toml` cannot warn when someone pins an old wheel — that requires [PyPI yanking](https://docs.pypi.org/project-management/yanking/).
|
|
@@ -271,7 +275,7 @@ pyweber add-section --section-name database
|
|
|
271
275
|
pyweber --update
|
|
272
276
|
```
|
|
273
277
|
|
|
274
|
-
Visit [Pyweber Docs](https://pyweber.dev/) for complete documentation. See [CHANGELOG.md](CHANGELOG.md) for release notes (latest: **1.
|
|
278
|
+
Visit [Pyweber Docs](https://pyweber.dev/) for complete documentation. See [CHANGELOG.md](CHANGELOG.md) for release notes (latest: **1.6.0** — optional ORM/Redis, identity-preserving WS sync, reactive event fixes).
|
|
275
279
|
|
|
276
280
|
## License
|
|
277
281
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|