flet-easy 0.3.0.dev8__tar.gz → 0.3.0.dev10__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.
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/PKG-INFO +1 -1
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/mkdocs.yml +1 -21
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/pyproject.toml +74 -74
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/__init__.py +3 -1
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/auto_route.py +5 -1
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/datasy.py +11 -8
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/extra.py +2 -2
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/extrasJwt.py +2 -2
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/fletEasy.py +28 -33
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/inheritance.py +3 -3
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/jwt.py +2 -2
- flet_easy-0.3.0.dev10/src/flet_easy/logger.py +74 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/middleware.py +2 -2
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/pagesy.py +9 -3
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/route.py +46 -36
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/cache-pages/pyproject.toml +2 -2
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/cache-pages/witch-main.py +22 -10
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/cache-pages/without-main.py +20 -8
- flet_easy-0.3.0.dev10/tests/flet-app/pyproject.toml +27 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/assets/database.db +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/components/custom.py +0 -1
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/components/login.py +1 -1
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/controllers/login.py +3 -3
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/controllers/register.py +1 -1
- flet_easy-0.3.0.dev10/tests/flet-app/src/core/config.py +39 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/main.py +7 -13
- flet_easy-0.3.0.dev10/tests/flet-app/src/models/connection.py +19 -0
- flet_easy-0.3.0.dev10/tests/flet-app/src/models/methods.py +37 -0
- flet_easy-0.3.0.dev10/tests/flet-app/src/models/models.py +11 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/views/counter.py +2 -2
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/views/dashboard.py +0 -4
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/views/index.py +22 -6
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/uv.lock +1382 -1381
- flet_easy-0.3.0.dev8/tests/b.py +0 -34
- flet_easy-0.3.0.dev8/tests/b2.py +0 -41
- flet_easy-0.3.0.dev8/tests/c1.py +0 -41
- flet_easy-0.3.0.dev8/tests/flet-app/pyproject.toml +0 -58
- flet_easy-0.3.0.dev8/tests/flet-app/src/core/config.py +0 -76
- flet_easy-0.3.0.dev8/tests/flet-app/src/models/connection.py +0 -11
- flet_easy-0.3.0.dev8/tests/flet-app/src/models/methods.py +0 -41
- flet_easy-0.3.0.dev8/tests/flet-app/src/models/models.py +0 -7
- flet_easy-0.3.0.dev8/tests/v1.py +0 -51
- flet_easy-0.3.0.dev8/tests/v2.py +0 -17
- flet_easy-0.3.0.dev8/tests/v3.py +0 -95
- flet_easy-0.3.0.dev8/tests/v4.py +0 -51
- flet_easy-0.3.0.dev8/tests/x.py +0 -22
- flet_easy-0.3.0.dev8/tests/x1.py +0 -34
- flet_easy-0.3.0.dev8/tests/x2.py +0 -63
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.github/workflows/docs-update.yml +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.github/workflows/linters.yml +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.github/workflows/publish-pypi.yml +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.github/workflows/tests.yml +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.gitignore +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.markdownlint.yaml +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/.python-version +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/CHANGELOG.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/CONTRIBUTING.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/LICENSE +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/README.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/add-pages/by-means-of-functions.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/add-pages/in-automatic.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/add-pages/through-classes.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/add-pages/through-decorators.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/ControlResponse.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/Use-class-new-page.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/app-example.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/fs-init.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/jwt-app.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/jwt-web.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/on_keyboard.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/protected-route.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/route-advanced.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/route-custom.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/route-simple.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/share-data.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/use-example.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/gifs/view-config.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/app-api.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/favicon.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/funtion_add_page.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/logo.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/on-resize.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/run_view.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/struct-views.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/v0.2.0/FletEasy.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/v0.2.0/export_asgi.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/v0.2.0/fastapi_run.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/v0.2.0/method_run.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/v0.2.0/struct-app.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/images/v0.2.0/template_dxs.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/assets/js/dynamic-year.js +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/basic-jwt.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/begin.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/cli-to-create-app.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/customized-app/control-view-configuration.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/customized-app/events.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/customized-app/general-settings.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/customized-app/page-404.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/customized-app/route-protection.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/data-sharing-between-pages.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/dynamic-routes.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/events/keyboard-event.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/events/on-resize.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/how-to-use.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/index.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/installation.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/middleware.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/overrides/main.html +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/ref.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/responsiveControlsy.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/run-the-app.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/stylesheets/extra.css +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/docs/working-with-other-apps.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/media/app-example.gif +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/media/logo.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/ruff.toml +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/cli/main.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/exceptions.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/job.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/src/flet_easy/view_404.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/README.md +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/assets/icon.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/components/__init__.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/components/counter.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/components/drawer.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/components/register.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/controllers/__init__.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/controllers/counter.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/core/__init__.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/core/sensitive.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/models/__init__.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/views/login.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-app/src/views/share.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/favicon.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/icon.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/icons/icon-192 - copia.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/icons/icon-192.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/icons/icon-512.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/icons/icon-maskable-512.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/icons/loading-animation.png +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/index.html +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/assets/manifest.json +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/controllers/__init__.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/controllers/contador.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/core/__init__.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/core/config.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/main.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/model/__init__.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/model/contador.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/counter.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/index.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/login.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/on_keyboard.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/pubsub.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/resize.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/response.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/share_data.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/task.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/flet-fastapi/views/test.py +0 -0
- {flet_easy-0.3.0.dev8 → flet_easy-0.3.0.dev10}/tests/routing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flet-easy
|
|
3
|
-
Version: 0.3.0.
|
|
3
|
+
Version: 0.3.0.dev10
|
|
4
4
|
Summary: ⚡Flet-Easy is a user-friendly add-on package for Flet, offering a cleaner code structure with numerous customizable features like JWT, routers, decorators, middleware and more.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Daxexs
|
|
6
6
|
Project-URL: Repository, https://github.com/Daxexs/flet-easy
|
|
@@ -2,7 +2,7 @@ site_name: Flet-Easy
|
|
|
2
2
|
site_url: https://daxexs.github.io/flet-easy/
|
|
3
3
|
site_author: Daxexs
|
|
4
4
|
site_description: >-
|
|
5
|
-
Flet-Easy is a user-friendly add-on package for Flet, offering a cleaner code structure with numerous customizable features like JWT, routers, decorators, middleware
|
|
5
|
+
Flet-Easy is a user-friendly add-on package for Flet, offering a cleaner code structure with numerous customizable features like JWT, routers, decorators, middleware and more.
|
|
6
6
|
edit_uri: edit/main/docs/
|
|
7
7
|
copyright: Copyright © <span id="dynamic-year"></span> Daxexs
|
|
8
8
|
repo_name: Daxexs/flet-easy
|
|
@@ -107,26 +107,6 @@ extra:
|
|
|
107
107
|
content: "Flet-Easy is a user-friendly add-on package for Flet with customizable features like JWT, routers, and more."
|
|
108
108
|
- name: keywords
|
|
109
109
|
content: "Flet, flet-easy, flet easy, decorators, CLI, middleware, routing, responsive design, jwt"
|
|
110
|
-
- name: author
|
|
111
|
-
content: "Daxexs"
|
|
112
|
-
- property: og:title
|
|
113
|
-
content: "Flet-Easy - User-friendly add-on package for Flet"
|
|
114
|
-
- property: og:description
|
|
115
|
-
content: "Flet-Easy is a user-friendly add-on package for Flet, offering a cleaner code structure with numerous customizable features like JWT, routers, decorators, middleware, and more."
|
|
116
|
-
- property: og:type
|
|
117
|
-
content: "website"
|
|
118
|
-
- property: og:url
|
|
119
|
-
content: "https://daxexs.github.io/flet-easy/"
|
|
120
|
-
- property: og:image
|
|
121
|
-
content: "https://daxexs.github.io/flet-easy/assets/images/logo.png"
|
|
122
|
-
- name: twitter:card
|
|
123
|
-
content: "summary_large_image"
|
|
124
|
-
- name: twitter:title
|
|
125
|
-
content: "Flet-Easy - User-friendly add-on package for Flet"
|
|
126
|
-
- name: twitter:description
|
|
127
|
-
content: "Flet-Easy is a user-friendly add-on package for Flet, offering a cleaner code structure with numerous customizable features like JWT, routers, decorators, middleware, and more."
|
|
128
|
-
- name: twitter:image
|
|
129
|
-
content: "https://daxexs.github.io/flet-easy/assets/images/logo.png"
|
|
130
110
|
|
|
131
111
|
markdown_extensions:
|
|
132
112
|
- admonition
|
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "flet-easy"
|
|
3
|
-
version = "0.3.0.
|
|
4
|
-
description = "⚡Flet-Easy is a user-friendly add-on package for Flet, offering a cleaner code structure with numerous customizable features like JWT, routers, decorators, middleware and more."
|
|
5
|
-
authors = [{ name = "Daxexs", email = "Daxexsdev@gmail.com" }]
|
|
6
|
-
|
|
7
|
-
dependencies = []
|
|
8
|
-
requires-python = ">=3.8"
|
|
9
|
-
readme = "README.md"
|
|
10
|
-
license = { text = "apache-2.0" }
|
|
11
|
-
keywords = [
|
|
12
|
-
"flet easy",
|
|
13
|
-
"flet",
|
|
14
|
-
"python",
|
|
15
|
-
"flet route",
|
|
16
|
-
"flet easy route",
|
|
17
|
-
"python web template",
|
|
18
|
-
"app python",
|
|
19
|
-
"flet mvc",
|
|
20
|
-
"flet easy mvc",
|
|
21
|
-
"flet easy fastapi",
|
|
22
|
-
"flutter python",
|
|
23
|
-
"web application",
|
|
24
|
-
"flet middleware",
|
|
25
|
-
"flet jwt",
|
|
26
|
-
"fast flet",
|
|
27
|
-
]
|
|
28
|
-
classifiers = [
|
|
29
|
-
"Topic :: Software Development :: Build Tools",
|
|
30
|
-
"Programming Language :: Python :: 3",
|
|
31
|
-
"Programming Language :: Python :: 3.8",
|
|
32
|
-
"Programming Language :: Python :: 3.9",
|
|
33
|
-
"Programming Language :: Python :: 3.10",
|
|
34
|
-
"Programming Language :: Python :: 3.11",
|
|
35
|
-
"Programming Language :: Python :: 3.12",
|
|
36
|
-
]
|
|
37
|
-
|
|
38
|
-
[project.optional-dependencies]
|
|
39
|
-
all = [
|
|
40
|
-
"pyJWT>=2.0.0",
|
|
41
|
-
"rsa>=4.9",
|
|
42
|
-
"cookiecutter>=2.6.0",
|
|
43
|
-
"rich-argparse>=1.4.0",
|
|
44
|
-
"flet[all]>=0.25.1",
|
|
45
|
-
]
|
|
46
|
-
JWT = ["pyJWT>=2.0.0", "rsa>=4.9"]
|
|
47
|
-
cli = ["cookiecutter>=2.6.0", "rich-argparse>=1.4.0", "flet[all]>=0.25.1"]
|
|
48
|
-
|
|
49
|
-
[project.urls]
|
|
50
|
-
Homepage = "https://github.com/Daxexs"
|
|
51
|
-
Repository = "https://github.com/Daxexs/flet-easy"
|
|
52
|
-
Documentation = "https://daxexs.github.io/flet-easy"
|
|
53
|
-
Changelog = "https://github.com/Daxexs/flet-easy/blob/main/CHANGELOG.md"
|
|
54
|
-
|
|
55
|
-
[build-system]
|
|
56
|
-
requires = ["hatchling"]
|
|
57
|
-
build-backend = "hatchling.build"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
[project.scripts]
|
|
61
|
-
fs = "flet_easy.cli.main:run"
|
|
62
|
-
|
|
63
|
-
[dependency-groups]
|
|
64
|
-
test = [
|
|
65
|
-
"ruff>=0.3.4",
|
|
66
|
-
"flet[all]>=0.25.1",
|
|
67
|
-
"tortoise-orm>=0.22.2",
|
|
68
|
-
"pytest>=8.3.4",
|
|
69
|
-
"pyjwt>=2.0.0",
|
|
70
|
-
"rsa>=4.9",
|
|
71
|
-
"sqlmodel>=0.0.24",
|
|
72
|
-
"pyinstrument>=5.0.1",
|
|
73
|
-
]
|
|
74
|
-
docs = ["mkdocs-material>=9.5.17", "mike>=2.0.0"]
|
|
1
|
+
[project]
|
|
2
|
+
name = "flet-easy"
|
|
3
|
+
version = "0.3.0.dev10"
|
|
4
|
+
description = "⚡Flet-Easy is a user-friendly add-on package for Flet, offering a cleaner code structure with numerous customizable features like JWT, routers, decorators, middleware and more."
|
|
5
|
+
authors = [{ name = "Daxexs", email = "Daxexsdev@gmail.com" }]
|
|
6
|
+
|
|
7
|
+
dependencies = []
|
|
8
|
+
requires-python = ">=3.8"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "apache-2.0" }
|
|
11
|
+
keywords = [
|
|
12
|
+
"flet easy",
|
|
13
|
+
"flet",
|
|
14
|
+
"python",
|
|
15
|
+
"flet route",
|
|
16
|
+
"flet easy route",
|
|
17
|
+
"python web template",
|
|
18
|
+
"app python",
|
|
19
|
+
"flet mvc",
|
|
20
|
+
"flet easy mvc",
|
|
21
|
+
"flet easy fastapi",
|
|
22
|
+
"flutter python",
|
|
23
|
+
"web application",
|
|
24
|
+
"flet middleware",
|
|
25
|
+
"flet jwt",
|
|
26
|
+
"fast flet",
|
|
27
|
+
]
|
|
28
|
+
classifiers = [
|
|
29
|
+
"Topic :: Software Development :: Build Tools",
|
|
30
|
+
"Programming Language :: Python :: 3",
|
|
31
|
+
"Programming Language :: Python :: 3.8",
|
|
32
|
+
"Programming Language :: Python :: 3.9",
|
|
33
|
+
"Programming Language :: Python :: 3.10",
|
|
34
|
+
"Programming Language :: Python :: 3.11",
|
|
35
|
+
"Programming Language :: Python :: 3.12",
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[project.optional-dependencies]
|
|
39
|
+
all = [
|
|
40
|
+
"pyJWT>=2.0.0",
|
|
41
|
+
"rsa>=4.9",
|
|
42
|
+
"cookiecutter>=2.6.0",
|
|
43
|
+
"rich-argparse>=1.4.0",
|
|
44
|
+
"flet[all]>=0.25.1",
|
|
45
|
+
]
|
|
46
|
+
JWT = ["pyJWT>=2.0.0", "rsa>=4.9"]
|
|
47
|
+
cli = ["cookiecutter>=2.6.0", "rich-argparse>=1.4.0", "flet[all]>=0.25.1"]
|
|
48
|
+
|
|
49
|
+
[project.urls]
|
|
50
|
+
Homepage = "https://github.com/Daxexs"
|
|
51
|
+
Repository = "https://github.com/Daxexs/flet-easy"
|
|
52
|
+
Documentation = "https://daxexs.github.io/flet-easy"
|
|
53
|
+
Changelog = "https://github.com/Daxexs/flet-easy/blob/main/CHANGELOG.md"
|
|
54
|
+
|
|
55
|
+
[build-system]
|
|
56
|
+
requires = ["hatchling"]
|
|
57
|
+
build-backend = "hatchling.build"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
[project.scripts]
|
|
61
|
+
fs = "flet_easy.cli.main:run"
|
|
62
|
+
|
|
63
|
+
[dependency-groups]
|
|
64
|
+
test = [
|
|
65
|
+
"ruff>=0.3.4",
|
|
66
|
+
"flet[all]>=0.25.1",
|
|
67
|
+
"tortoise-orm>=0.22.2",
|
|
68
|
+
"pytest>=8.3.4",
|
|
69
|
+
"pyjwt>=2.0.0",
|
|
70
|
+
"rsa>=4.9",
|
|
71
|
+
"sqlmodel>=0.0.24",
|
|
72
|
+
"pyinstrument>=5.0.1",
|
|
73
|
+
]
|
|
74
|
+
docs = ["mkdocs-material>=9.5.17", "mike>=2.0.0"]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from flet_easy.datasy import Datasy
|
|
2
2
|
from flet_easy.extra import Redirect
|
|
3
3
|
from flet_easy.extrasJwt import Algorithm, PemKey, SecretKey, encode_HS256, encode_RS256
|
|
4
|
-
from flet_easy.fletEasy import FletEasy
|
|
4
|
+
from flet_easy.fletEasy import FletEasy
|
|
5
5
|
from flet_easy.inheritance import (
|
|
6
6
|
Keyboardsy,
|
|
7
7
|
Ref,
|
|
@@ -11,3 +11,5 @@ from flet_easy.inheritance import (
|
|
|
11
11
|
)
|
|
12
12
|
from flet_easy.jwt import EasyKey, decode, decode_async
|
|
13
13
|
from flet_easy.pagesy import AddPagesy, Pagesy, MiddlewareRequest
|
|
14
|
+
|
|
15
|
+
page = FletEasy.page
|
|
@@ -4,6 +4,7 @@ from os import listdir, path
|
|
|
4
4
|
from sys import modules
|
|
5
5
|
from typing import List, Optional
|
|
6
6
|
|
|
7
|
+
from flet_easy.logger import get_logger
|
|
7
8
|
from flet_easy.pagesy import AddPagesy
|
|
8
9
|
|
|
9
10
|
|
|
@@ -22,6 +23,7 @@ def automatic_routing(dir: str) -> Optional[List[AddPagesy]]:
|
|
|
22
23
|
return None
|
|
23
24
|
|
|
24
25
|
pages = []
|
|
26
|
+
logger = get_logger("Automatic routing")
|
|
25
27
|
|
|
26
28
|
python_files = [
|
|
27
29
|
file
|
|
@@ -50,8 +52,9 @@ def automatic_routing(dir: str) -> Optional[List[AddPagesy]]:
|
|
|
50
52
|
for _, obj in getmembers(module):
|
|
51
53
|
if isinstance(obj, AddPagesy):
|
|
52
54
|
pages.append(obj)
|
|
55
|
+
logger.debug(f"Adding AddPagesy automatic routing: {obj}")
|
|
53
56
|
except Exception as e:
|
|
54
|
-
|
|
57
|
+
logger.error(f"Error processing file {file}: {e}")
|
|
55
58
|
continue
|
|
56
59
|
|
|
57
60
|
if not pages:
|
|
@@ -59,4 +62,5 @@ def automatic_routing(dir: str) -> Optional[List[AddPagesy]]:
|
|
|
59
62
|
"No instances of AddPagesy found. Check the assigned path of the 'path_views' parameter of the class (FletEasy)."
|
|
60
63
|
)
|
|
61
64
|
|
|
65
|
+
logger.info(f"Automatic routing completed successfully: {len(pages)} Pagesy objects")
|
|
62
66
|
return pages
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from collections import deque
|
|
2
2
|
from datetime import datetime, timedelta, timezone
|
|
3
|
-
from typing import Any, Callable, Dict, Tuple
|
|
3
|
+
from typing import Any, Callable, Dict, List, Tuple, Union
|
|
4
4
|
|
|
5
5
|
from flet import Control, ControlEvent, Page
|
|
6
6
|
|
|
@@ -70,7 +70,7 @@ class Datasy:
|
|
|
70
70
|
self.__route: str = None
|
|
71
71
|
self.__go = go
|
|
72
72
|
self.__history_routes: deque[Tuple[str, int]] = deque()
|
|
73
|
-
self._dynamic_control: Dict[str, Tuple[Control, Callable[[Control], None]]] = {}
|
|
73
|
+
self._dynamic_control: Dict[str, List[Tuple[Control, Callable[[Control]], None]]] = {}
|
|
74
74
|
|
|
75
75
|
self.__secret_key: SecretKey = secret_key
|
|
76
76
|
self.__auto_logout: bool = auto_logout
|
|
@@ -273,11 +273,11 @@ class Datasy:
|
|
|
273
273
|
def __login(
|
|
274
274
|
self,
|
|
275
275
|
key: str,
|
|
276
|
-
value: Dict[str, Any]
|
|
276
|
+
value: Union[Dict[str, Any], Any],
|
|
277
277
|
next_route: str,
|
|
278
278
|
time_expiry: timedelta = None,
|
|
279
279
|
sleep: int = 1,
|
|
280
|
-
) -> str
|
|
280
|
+
) -> Union[str, None]:
|
|
281
281
|
if time_expiry:
|
|
282
282
|
assert isinstance(value, Dict), (
|
|
283
283
|
"Use a dict in login method values or don't use time_expiry."
|
|
@@ -307,7 +307,7 @@ class Datasy:
|
|
|
307
307
|
def login(
|
|
308
308
|
self,
|
|
309
309
|
key: str,
|
|
310
|
-
value: Dict[str, Any]
|
|
310
|
+
value: Union[Dict[str, Any], Any],
|
|
311
311
|
next_route: str,
|
|
312
312
|
time_expiry: timedelta = None,
|
|
313
313
|
sleep: int = 1,
|
|
@@ -336,7 +336,7 @@ class Datasy:
|
|
|
336
336
|
async def login_async(
|
|
337
337
|
self,
|
|
338
338
|
key: str,
|
|
339
|
-
value: Dict[str, Any]
|
|
339
|
+
value: Union[Dict[str, Any], Any],
|
|
340
340
|
next_route: str,
|
|
341
341
|
time_expiry: timedelta = None,
|
|
342
342
|
sleep: int = 1,
|
|
@@ -389,8 +389,11 @@ class Datasy:
|
|
|
389
389
|
return lambda _=None: go_back_func()
|
|
390
390
|
|
|
391
391
|
def dynamic_control(self, control: Control, func_update: Callable[[Control], None]) -> None:
|
|
392
|
-
"""Adds dynamic control to the page."""
|
|
393
|
-
self.
|
|
392
|
+
"""Adds dynamic control to the page, allowing real-time updates when caching is enabled on the page."""
|
|
393
|
+
if self.page.route not in self._dynamic_control:
|
|
394
|
+
self._dynamic_control[self.page.route] = [(control, func_update)]
|
|
395
|
+
else:
|
|
396
|
+
self._dynamic_control[self.page.route].append((control, func_update))
|
|
394
397
|
|
|
395
398
|
|
|
396
399
|
def evaluate_secret_key(data: Datasy):
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
from re import Pattern, compile
|
|
3
|
-
from typing import Callable, Dict, Optional, Tuple
|
|
3
|
+
from typing import Callable, Dict, Optional, Tuple, Union
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
@dataclass
|
|
7
7
|
class Msg:
|
|
8
8
|
method: str
|
|
9
9
|
key: str = None
|
|
10
|
-
value: str
|
|
10
|
+
value: Union[str, Dict] = None
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
@dataclass
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import contextlib
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
from datetime import datetime, timezone
|
|
4
|
-
from typing import Any, Dict
|
|
4
|
+
from typing import Any, Dict, Union
|
|
5
5
|
|
|
6
6
|
from flet_easy.exceptions import AlgorithmJwtError
|
|
7
7
|
|
|
@@ -55,7 +55,7 @@ def encode_HS256(payload: Dict[str, Any], secret_key: str, time_expiry: timezone
|
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
def encode_verified(secret_key: SecretKey, value: str, time_expiration) -> str
|
|
58
|
+
def encode_verified(secret_key: SecretKey, value: str, time_expiration) -> Union[str, None]:
|
|
59
59
|
"""Verify the possible encryption of the value sent."""
|
|
60
60
|
assert secret_key.algorithm is not None, (
|
|
61
61
|
"The secret_key algorithm is not supported, only (RS256, HS256) is accepted."
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Union
|
|
3
|
+
|
|
1
4
|
from flet_easy.exceptions import AddPagesError, FletEasyError, MidlewareError
|
|
2
5
|
|
|
3
6
|
try:
|
|
@@ -16,28 +19,12 @@ from flet_easy.auto_route import automatic_routing
|
|
|
16
19
|
from flet_easy.datasy import Datasy
|
|
17
20
|
from flet_easy.extrasJwt import SecretKey
|
|
18
21
|
from flet_easy.inheritance import Viewsy
|
|
22
|
+
from flet_easy.logger import LoggingFletEasy, get_logger
|
|
19
23
|
from flet_easy.middleware import MiddlewareHandler, MiddlewareRequest
|
|
20
24
|
from flet_easy.pagesy import AddPagesy, Pagesy
|
|
21
25
|
from flet_easy.route import FletEasyX
|
|
22
26
|
|
|
23
27
|
|
|
24
|
-
def page(
|
|
25
|
-
route: str,
|
|
26
|
-
title: str = None,
|
|
27
|
-
page_clear: bool = False,
|
|
28
|
-
share_data: bool = False,
|
|
29
|
-
protected_route: bool = False,
|
|
30
|
-
custom_params: Dict[str, Any] = None,
|
|
31
|
-
middleware: Optional[
|
|
32
|
-
List[MiddlewareHandler | MiddlewareRequest] | MiddlewareHandler | MiddlewareRequest
|
|
33
|
-
] = None,
|
|
34
|
-
cache: bool = False,
|
|
35
|
-
):
|
|
36
|
-
return FletEasy.page(
|
|
37
|
-
route, title, page_clear, share_data, protected_route, custom_params, middleware, cache
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
|
|
41
28
|
class FletEasy(FletEasyX):
|
|
42
29
|
"""
|
|
43
30
|
we create the app object, in it you can configure:
|
|
@@ -50,6 +37,7 @@ class FletEasy(FletEasyX):
|
|
|
50
37
|
* `secret_key` : Used with `SecretKey` class of Flet easy, to configure JWT or client storage.
|
|
51
38
|
* `auto_logout` : If you use JWT, you can configure it.
|
|
52
39
|
* `path_views` : Configuration of the folder where are the .py files of the pages, you use the `Path` class to configure it.
|
|
40
|
+
* `logger` : Activates the logger, by default it is disabled (False).
|
|
53
41
|
|
|
54
42
|
Example:
|
|
55
43
|
```python
|
|
@@ -126,20 +114,6 @@ class FletEasy(FletEasyX):
|
|
|
126
114
|
"""
|
|
127
115
|
|
|
128
116
|
__self = None
|
|
129
|
-
__slots__ = (
|
|
130
|
-
"__route_prefix",
|
|
131
|
-
"__path_views",
|
|
132
|
-
"__pagesys",
|
|
133
|
-
"_data",
|
|
134
|
-
"_pages",
|
|
135
|
-
"_page_404",
|
|
136
|
-
"_view_data",
|
|
137
|
-
"_view_config",
|
|
138
|
-
"_config_login",
|
|
139
|
-
"_config_event",
|
|
140
|
-
"_middlewares",
|
|
141
|
-
"_middlewares_after",
|
|
142
|
-
)
|
|
143
117
|
|
|
144
118
|
def __init__(
|
|
145
119
|
self,
|
|
@@ -151,7 +125,12 @@ class FletEasy(FletEasyX):
|
|
|
151
125
|
secret_key: SecretKey = None,
|
|
152
126
|
auto_logout: bool = False,
|
|
153
127
|
path_views: Path = None,
|
|
128
|
+
logger: bool = False,
|
|
154
129
|
):
|
|
130
|
+
if logger:
|
|
131
|
+
LoggingFletEasy.enable(logging.DEBUG)
|
|
132
|
+
self.logger = get_logger("FletEasy")
|
|
133
|
+
|
|
155
134
|
self.__route_prefix = route_prefix
|
|
156
135
|
self.__path_views = path_views
|
|
157
136
|
FletEasy.__self = self
|
|
@@ -183,6 +162,7 @@ class FletEasy(FletEasyX):
|
|
|
183
162
|
|
|
184
163
|
def start(self, page: Page):
|
|
185
164
|
"""Start the app in the main function"""
|
|
165
|
+
self.logger.debug("enabling connection with flet app")
|
|
186
166
|
self.__pre_config(page)
|
|
187
167
|
|
|
188
168
|
def get_app(self):
|
|
@@ -191,6 +171,7 @@ class FletEasy(FletEasyX):
|
|
|
191
171
|
def main(page: Page):
|
|
192
172
|
self.__pre_config(page)
|
|
193
173
|
|
|
174
|
+
self.logger.debug("getting app from fletEasy to export")
|
|
194
175
|
return main
|
|
195
176
|
|
|
196
177
|
def run(
|
|
@@ -220,6 +201,7 @@ class FletEasy(FletEasyX):
|
|
|
220
201
|
)
|
|
221
202
|
return main
|
|
222
203
|
try:
|
|
204
|
+
self.logger.debug("running app from fletEasy with flet")
|
|
223
205
|
return app(
|
|
224
206
|
target=main,
|
|
225
207
|
name=name,
|
|
@@ -256,6 +238,8 @@ class FletEasy(FletEasyX):
|
|
|
256
238
|
|
|
257
239
|
if value == "page_404":
|
|
258
240
|
self._page_404 = Pagesy(route, func, data.get("title"), data.get("page_clear"))
|
|
241
|
+
self.logger.debug(f"Adding page 404: {self._page_404}")
|
|
242
|
+
|
|
259
243
|
elif value == "page":
|
|
260
244
|
self._pages.append(
|
|
261
245
|
Pagesy(
|
|
@@ -271,6 +255,8 @@ class FletEasy(FletEasyX):
|
|
|
271
255
|
cache=data.get("cache"),
|
|
272
256
|
)
|
|
273
257
|
)
|
|
258
|
+
self.logger.debug(f"Adding page: {self._pages[-1]}")
|
|
259
|
+
|
|
274
260
|
return wrapper
|
|
275
261
|
|
|
276
262
|
return decorator
|
|
@@ -290,6 +276,8 @@ class FletEasy(FletEasyX):
|
|
|
290
276
|
self._pages.extend(page._add_pages(self.__route_prefix))
|
|
291
277
|
else:
|
|
292
278
|
self._pages.extend(page._add_pages())
|
|
279
|
+
|
|
280
|
+
self.logger.debug(f"Adding group of pages: {len(group_pages)}: {page}\n")
|
|
293
281
|
except Exception as e:
|
|
294
282
|
raise AddPagesError("Add pages error in route: ", e)
|
|
295
283
|
|
|
@@ -304,7 +292,7 @@ class FletEasy(FletEasyX):
|
|
|
304
292
|
protected_route: bool = False,
|
|
305
293
|
custom_params: Dict[str, Any] = None,
|
|
306
294
|
middleware: Optional[
|
|
307
|
-
List[MiddlewareHandler
|
|
295
|
+
Union[List[Union[MiddlewareHandler, MiddlewareRequest]], MiddlewareHandler, MiddlewareRequest]
|
|
308
296
|
] = None,
|
|
309
297
|
cache: bool = False,
|
|
310
298
|
) -> Callable:
|
|
@@ -457,6 +445,7 @@ class FletEasy(FletEasyX):
|
|
|
457
445
|
```
|
|
458
446
|
"""
|
|
459
447
|
self._view_data = func
|
|
448
|
+
self.logger.debug(f"Adding view: {self._view_data}")
|
|
460
449
|
|
|
461
450
|
def config(self, func: Callable[[Datasy], None]):
|
|
462
451
|
"""Decorator to add a custom configuration to the app:
|
|
@@ -484,6 +473,7 @@ class FletEasy(FletEasyX):
|
|
|
484
473
|
```
|
|
485
474
|
"""
|
|
486
475
|
self._view_config = func
|
|
476
|
+
self.logger.debug(f"Adding config: {self._view_config}")
|
|
487
477
|
|
|
488
478
|
def login(self, func: Callable[[Datasy], bool]):
|
|
489
479
|
"""Decorator to add a login configuration to the app (protected_route):
|
|
@@ -508,6 +498,7 @@ class FletEasy(FletEasyX):
|
|
|
508
498
|
```
|
|
509
499
|
"""
|
|
510
500
|
self._config_login = func
|
|
501
|
+
self.logger.debug(f"Adding login: {self._config_login}")
|
|
511
502
|
|
|
512
503
|
def config_event_handler(self, func: Callable[[Datasy], None]):
|
|
513
504
|
"""Decorator to add charter event settings -> https://flet.dev/docs/controls/page#events
|
|
@@ -524,6 +515,7 @@ class FletEasy(FletEasyX):
|
|
|
524
515
|
"""
|
|
525
516
|
|
|
526
517
|
self._config_event = func
|
|
518
|
+
self.logger.debug(f"Adding config event: {self._config_event}")
|
|
527
519
|
|
|
528
520
|
def add_routes(self, add_views: List[Pagesy]):
|
|
529
521
|
"""-> Add routes without the use of decorators.
|
|
@@ -550,11 +542,12 @@ class FletEasy(FletEasyX):
|
|
|
550
542
|
page.route = self.__route_prefix + page.route
|
|
551
543
|
|
|
552
544
|
self._pages.append(page)
|
|
545
|
+
self.logger.debug(f"Add routes: {page}")
|
|
553
546
|
|
|
554
547
|
def add_middleware(
|
|
555
548
|
self,
|
|
556
549
|
*middleware: Optional[
|
|
557
|
-
Tuple[MiddlewareHandler
|
|
550
|
+
Union[Tuple[Union[MiddlewareHandler, MiddlewareRequest]], MiddlewareHandler, MiddlewareRequest]
|
|
558
551
|
],
|
|
559
552
|
):
|
|
560
553
|
"""
|
|
@@ -579,6 +572,8 @@ class FletEasy(FletEasyX):
|
|
|
579
572
|
)
|
|
580
573
|
else:
|
|
581
574
|
self._middlewares.append(m)
|
|
575
|
+
|
|
576
|
+
self.logger.debug(f"Add middlewares in method 'add_middleware': {middleware}")
|
|
582
577
|
except Exception as e:
|
|
583
578
|
raise MidlewareError(
|
|
584
579
|
"You are not adding any midleware but you are using the 'add_middleware' method:",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from inspect import iscoroutinefunction
|
|
2
|
-
from typing import Any, Callable, Dict, List, TypeVar
|
|
2
|
+
from typing import Any, Callable, Dict, List, TypeVar, Union
|
|
3
3
|
|
|
4
4
|
from flet import (
|
|
5
5
|
ControlEvent,
|
|
@@ -115,8 +115,8 @@ class Resizesy:
|
|
|
115
115
|
self.__page = page
|
|
116
116
|
self.__height: float = page.height
|
|
117
117
|
self.__width: float = page.width
|
|
118
|
-
self.__margin_y: float
|
|
119
|
-
self.__margin_x: float
|
|
118
|
+
self.__margin_y: Union[float, int] = 0
|
|
119
|
+
self.__margin_x: Union[float, int] = 0
|
|
120
120
|
self.__e: ControlEvent = None
|
|
121
121
|
|
|
122
122
|
@property
|
|
@@ -94,7 +94,7 @@ def _handle_decode_errors(jwt: str, data: Datasy, key_login: str) -> Union[Dict[
|
|
|
94
94
|
raise LogoutError("Login error:", e)
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
def decode(key_login: str, data: Datasy) -> Dict[str, Any]
|
|
97
|
+
def decode(key_login: str, data: Datasy) -> Union[Dict[str, Any], bool]:
|
|
98
98
|
"""decodes the jwt and updates the browser sessions.
|
|
99
99
|
|
|
100
100
|
### Parameters to use:
|
|
@@ -110,7 +110,7 @@ def decode(key_login: str, data: Datasy) -> Dict[str, Any] | bool:
|
|
|
110
110
|
raise LoginError("Use the 'decode_async' method instead of 'decode'. | More details:", e)
|
|
111
111
|
|
|
112
112
|
|
|
113
|
-
async def decode_async(key_login: str, data: Datasy) -> Dict[str, Any]
|
|
113
|
+
async def decode_async(key_login: str, data: Datasy) -> Union[Dict[str, Any], bool]:
|
|
114
114
|
"""decodes the jwt and updates the browser sessions.
|
|
115
115
|
|
|
116
116
|
### Parameters to use:
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
try:
|
|
4
|
+
from rich.logging import RichHandler
|
|
5
|
+
|
|
6
|
+
_RICH_AVAILABLE = True
|
|
7
|
+
except ImportError:
|
|
8
|
+
_RICH_AVAILABLE = False
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ColorFormatter(logging.Formatter):
|
|
12
|
+
def format(self, record):
|
|
13
|
+
record.name = f"[bold]{record.name}[/]:"
|
|
14
|
+
return super().format(record)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class OnlyMyLogsFilter(logging.Filter):
|
|
18
|
+
def filter(self, record):
|
|
19
|
+
return record.name.startswith("flet_easy")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class LoggingFletEasy:
|
|
23
|
+
"""Logger for Flet Easy"""
|
|
24
|
+
|
|
25
|
+
_logger_activado = False
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def enable(cls, level: int = logging.INFO) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Enables the logging system only ONCE.
|
|
31
|
+
- With rich: uses its own format.
|
|
32
|
+
- Without rich: forces the exact format of the image.
|
|
33
|
+
"""
|
|
34
|
+
if cls._logger_activado:
|
|
35
|
+
return
|
|
36
|
+
|
|
37
|
+
root = logging.getLogger()
|
|
38
|
+
root.setLevel(level)
|
|
39
|
+
|
|
40
|
+
if _RICH_AVAILABLE:
|
|
41
|
+
fmt = ColorFormatter(fmt="%(name)s %(message)s")
|
|
42
|
+
console = RichHandler(
|
|
43
|
+
level=level,
|
|
44
|
+
show_level=True,
|
|
45
|
+
rich_tracebacks=True,
|
|
46
|
+
show_time=True,
|
|
47
|
+
omit_repeated_times=False,
|
|
48
|
+
show_path=True,
|
|
49
|
+
markup=True,
|
|
50
|
+
log_time_format="%Y-%m-%d %H:%M:%S",
|
|
51
|
+
)
|
|
52
|
+
console.setFormatter(fmt)
|
|
53
|
+
|
|
54
|
+
else:
|
|
55
|
+
fmt = logging.Formatter(
|
|
56
|
+
"[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s | %(pathname)s : %(lineno)d",
|
|
57
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
58
|
+
)
|
|
59
|
+
console = logging.StreamHandler()
|
|
60
|
+
|
|
61
|
+
console.setFormatter(fmt)
|
|
62
|
+
|
|
63
|
+
console.addFilter(OnlyMyLogsFilter())
|
|
64
|
+
root.addHandler(console)
|
|
65
|
+
cls._logger_activado = True
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def get_logger(name: str) -> logging.Logger:
|
|
69
|
+
"""
|
|
70
|
+
Returns a logger with the given name.
|
|
71
|
+
Example: logger = get_logger("Init")
|
|
72
|
+
"""
|
|
73
|
+
full_name = name if name.startswith("flet_easy") else f"flet_easy.{name}"
|
|
74
|
+
return logging.getLogger(full_name)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Callable, List, Optional
|
|
1
|
+
from typing import Callable, List, Optional, Union
|
|
2
2
|
|
|
3
3
|
from flet import View
|
|
4
4
|
|
|
@@ -21,6 +21,6 @@ class MiddlewareRequest:
|
|
|
21
21
|
|
|
22
22
|
MiddlewareHandler = Callable[[Datasy], Optional[Redirect]]
|
|
23
23
|
Middleware = Optional[
|
|
24
|
-
List[MiddlewareHandler
|
|
24
|
+
Union[List[Union[MiddlewareHandler, MiddlewareRequest]], MiddlewareHandler, MiddlewareRequest]
|
|
25
25
|
]
|
|
26
26
|
ViewHandler = Callable[[Datasy], View]
|