flet-easy 0.3.0.dev2__tar.gz → 0.3.0.dev4__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.dev2 → flet_easy-0.3.0.dev4}/PKG-INFO +1 -1
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/pyproject.toml +74 -72
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/__init__.py +0 -1
- flet_easy-0.3.0.dev4/src/flet_easy/auto_route.py +62 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/datasy.py +32 -14
- flet_easy-0.3.0.dev4/src/flet_easy/extra.py +23 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/fletEasy.py +22 -2
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/pagesy.py +5 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/route.py +91 -109
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/cache-pages/pyproject.toml +6 -5
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/cache-pages/witch-main.py +22 -30
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/cache-pages/without-main.py +21 -23
- flet_easy-0.3.0.dev4/tests/flet-app/pyproject.toml +58 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/assets/database.db +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/controllers/login.py +3 -3
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/controllers/register.py +1 -1
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/core/config.py +1 -4
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/main.py +9 -5
- flet_easy-0.3.0.dev4/tests/flet-app/src/models/connection.py +11 -0
- flet_easy-0.3.0.dev4/tests/flet-app/src/models/methods.py +41 -0
- flet_easy-0.3.0.dev4/tests/flet-app/src/models/models.py +7 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/views/counter.py +2 -2
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/views/dashboard.py +3 -3
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/views/index.py +3 -8
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/v1.py +4 -4
- flet_easy-0.3.0.dev4/tests/x1.py +34 -0
- flet_easy-0.3.0.dev4/tests/x2.py +63 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/uv.lock +602 -184
- flet_easy-0.3.0.dev2/src/flet_easy/auto_route.py +0 -34
- flet_easy-0.3.0.dev2/src/flet_easy/extra.py +0 -52
- flet_easy-0.3.0.dev2/tests/d2.py +0 -67
- flet_easy-0.3.0.dev2/tests/flet-app/pyproject.toml +0 -27
- flet_easy-0.3.0.dev2/tests/flet-app/src/models/connection.py +0 -19
- flet_easy-0.3.0.dev2/tests/flet-app/src/models/methods.py +0 -37
- flet_easy-0.3.0.dev2/tests/flet-app/src/models/models.py +0 -11
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.github/workflows/docs-update.yml +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.github/workflows/linters.yml +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.github/workflows/publish-pypi.yml +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.github/workflows/tests.yml +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.gitignore +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.markdownlint.yaml +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/.python-version +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/CHANGELOG.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/CONTRIBUTING.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/LICENSE +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/README.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/add-pages/by-means-of-functions.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/add-pages/in-automatic.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/add-pages/through-classes.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/add-pages/through-decorators.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/ControlResponse.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/Use-class-new-page.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/app-example.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/fs-init.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/jwt-app.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/jwt-web.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/on_keyboard.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/protected-route.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/route-advanced.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/route-custom.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/route-simple.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/share-data.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/use-example.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/gifs/view-config.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/app-api.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/favicon.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/funtion_add_page.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/logo.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/on-resize.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/run_view.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/struct-views.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/v0.2.0/FletEasy.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/v0.2.0/export_asgi.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/v0.2.0/fastapi_run.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/v0.2.0/method_run.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/v0.2.0/struct-app.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/images/v0.2.0/template_dxs.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/assets/js/dynamic-year.js +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/basic-jwt.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/begin.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/cli-to-create-app.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/customized-app/control-view-configuration.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/customized-app/events.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/customized-app/general-settings.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/customized-app/page-404.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/customized-app/route-protection.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/data-sharing-between-pages.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/dynamic-routes.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/events/keyboard-event.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/events/on-resize.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/how-to-use.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/index.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/installation.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/middleware.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/overrides/main.html +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/ref.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/responsiveControlsy.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/run-the-app.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/stylesheets/extra.css +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/docs/working-with-other-apps.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/media/app-example.gif +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/media/logo.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/mkdocs.yml +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/ruff.toml +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/cli/main.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/exceptions.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/extrasJwt.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/inheritance.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/job.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/jwt.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/middleware.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/src/flet_easy/view_404.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/b.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/b2.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/c1.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/README.md +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/assets/icon.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/components/__init__.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/components/counter.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/components/custom.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/components/drawer.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/components/login.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/components/register.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/controllers/__init__.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/controllers/counter.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/core/__init__.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/core/sensitive.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/models/__init__.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/views/login.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-app/src/views/share.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/favicon.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/icon.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/icons/icon-192 - copia.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/icons/icon-192.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/icons/icon-512.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/icons/icon-maskable-512.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/icons/loading-animation.png +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/index.html +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/assets/manifest.json +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/controllers/__init__.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/controllers/contador.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/core/__init__.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/core/config.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/main.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/model/__init__.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/model/contador.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/counter.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/index.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/login.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/on_keyboard.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/pubsub.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/resize.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/response.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/share_data.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/task.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/flet-fastapi/views/test.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/routing.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/v2.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/v3.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/v4.py +0 -0
- {flet_easy-0.3.0.dev2 → flet_easy-0.3.0.dev4}/tests/x.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.dev4
|
|
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
|
|
@@ -1,72 +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
|
-
|
|
72
|
-
|
|
1
|
+
[project]
|
|
2
|
+
name = "flet-easy"
|
|
3
|
+
version = "0.3.0.dev4"
|
|
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"]
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
from importlib.util import module_from_spec, spec_from_file_location
|
|
2
|
+
from inspect import getmembers
|
|
3
|
+
from os import listdir, path
|
|
4
|
+
from sys import modules
|
|
5
|
+
from typing import List, Optional
|
|
6
|
+
|
|
7
|
+
from flet_easy.pagesy import AddPagesy
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def automatic_routing(dir: str) -> Optional[List[AddPagesy]]:
|
|
11
|
+
"""
|
|
12
|
+
A function that automatically routes through a directory to find Python files,
|
|
13
|
+
extract AddPagesy objects, and return a list of them.
|
|
14
|
+
|
|
15
|
+
Parameters:
|
|
16
|
+
- dir (str): The directory path to search for Python files.
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
- List[AddPagesy]: A list of AddPagesy objects found in the specified directory.
|
|
20
|
+
"""
|
|
21
|
+
if not dir:
|
|
22
|
+
return None
|
|
23
|
+
|
|
24
|
+
pages = []
|
|
25
|
+
|
|
26
|
+
python_files = [
|
|
27
|
+
file
|
|
28
|
+
for file in listdir(dir)
|
|
29
|
+
if (file.endswith(".py") or file.endswith(".pyc")) and file != "__init__.py"
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
for file in python_files:
|
|
33
|
+
file_path = path.join(dir, file)
|
|
34
|
+
module_name = path.splitext(file)[0]
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
if not isinstance(file_path, str):
|
|
38
|
+
file_path = str(file_path)
|
|
39
|
+
|
|
40
|
+
spec = spec_from_file_location(module_name, file_path)
|
|
41
|
+
if spec is None or spec.loader is None:
|
|
42
|
+
continue
|
|
43
|
+
|
|
44
|
+
module = module_from_spec(spec)
|
|
45
|
+
|
|
46
|
+
if hasattr(module, "__dict__"):
|
|
47
|
+
modules[module_name] = module
|
|
48
|
+
spec.loader.exec_module(module)
|
|
49
|
+
|
|
50
|
+
for _, obj in getmembers(module):
|
|
51
|
+
if isinstance(obj, AddPagesy):
|
|
52
|
+
pages.append(obj)
|
|
53
|
+
except Exception as e:
|
|
54
|
+
print(f"Error processing file {file}: {e}")
|
|
55
|
+
continue
|
|
56
|
+
|
|
57
|
+
if not pages:
|
|
58
|
+
raise ValueError(
|
|
59
|
+
"No instances of AddPagesy found. Check the assigned path of the 'path_views' parameter of the class (FletEasy)."
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
return pages
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from collections import deque
|
|
2
2
|
from datetime import datetime, timedelta, timezone
|
|
3
|
-
from typing import Any, Callable, Dict
|
|
3
|
+
from typing import Any, Callable, Dict, Tuple
|
|
4
4
|
|
|
5
|
-
from flet import Page
|
|
5
|
+
from flet import Control, ControlEvent, Page
|
|
6
6
|
|
|
7
7
|
from flet_easy.exceptions import LoginError
|
|
8
8
|
from flet_easy.extra import Msg, Redirect
|
|
@@ -42,6 +42,7 @@ class Datasy:
|
|
|
42
42
|
* `login` : method to create sessions of all sections in the browser (client storage), requires as parameters the key and the value, the same used in the `page.client_storage.set` method.
|
|
43
43
|
* `go` : `go`: Method to change the application path, supports url redirections.
|
|
44
44
|
* `go_back` : Method to go back to the previous route.
|
|
45
|
+
* `go_navigation_bar` : Handles navigation bar changes. Use this method in the on_change event of 'ft.NavigationBar' or 'ft.CupertinoNavigationBar' controls.
|
|
45
46
|
* `history_routes` : Get the history of the routes.
|
|
46
47
|
* `route` : route provided by the route event, it is useful when using middlewares to check if the route is assecible.
|
|
47
48
|
* `redirect` : To redirect to a path before the page loads, it is used in middleware.
|
|
@@ -55,7 +56,7 @@ class Datasy:
|
|
|
55
56
|
secret_key: str,
|
|
56
57
|
auto_logout: bool,
|
|
57
58
|
page_on_keyboard: Keyboardsy,
|
|
58
|
-
go: Callable[[str], None] = None,
|
|
59
|
+
go: Callable[[str, int], None] = None,
|
|
59
60
|
) -> None:
|
|
60
61
|
self.__page: Page = None
|
|
61
62
|
self.__url_params: Dict[str, Any] = None
|
|
@@ -68,7 +69,8 @@ class Datasy:
|
|
|
68
69
|
self.__on_resize: Resizesy = None
|
|
69
70
|
self.__route: str = None
|
|
70
71
|
self.__go = go
|
|
71
|
-
self.__history_routes: deque[str] = deque()
|
|
72
|
+
self.__history_routes: deque[Tuple[str, int]] = deque()
|
|
73
|
+
self._dynamic_control: Dict[str, Tuple[Control, Callable[[Control], None]]] = {}
|
|
72
74
|
|
|
73
75
|
self.__secret_key: SecretKey = secret_key
|
|
74
76
|
self.__auto_logout: bool = auto_logout
|
|
@@ -89,10 +91,6 @@ class Datasy:
|
|
|
89
91
|
def history_routes(self):
|
|
90
92
|
return self.__history_routes
|
|
91
93
|
|
|
92
|
-
@history_routes.setter
|
|
93
|
-
def history_routes(self, history_routes: deque[str]):
|
|
94
|
-
self.__history_routes = history_routes
|
|
95
|
-
|
|
96
94
|
@property
|
|
97
95
|
def url_params(self):
|
|
98
96
|
return self.__url_params
|
|
@@ -365,17 +363,37 @@ class Datasy:
|
|
|
365
363
|
"""To change the application path, it is important for better validation to avoid using `page.go()`."""
|
|
366
364
|
return lambda _=None: self.__go(route)
|
|
367
365
|
|
|
366
|
+
def go_navigation_bar(self, e: ControlEvent) -> None:
|
|
367
|
+
"""Handles navigation bar changes. Use this method in the on_change event of
|
|
368
|
+
'ft.NavigationBar' or 'ft.CupertinoNavigationBar' controls."""
|
|
369
|
+
self.__go(e.control.selected_index)
|
|
370
|
+
|
|
368
371
|
def redirect(self, route: str):
|
|
369
372
|
"""Useful if you do not want to access a route that has already been sent."""
|
|
370
373
|
return Redirect(route)
|
|
371
374
|
|
|
372
|
-
def go_back(self):
|
|
375
|
+
def go_back(self) -> Callable[[ControlEvent], None]:
|
|
373
376
|
"""Go back to the previous route."""
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
if len(self.history_routes) > 1
|
|
377
|
-
|
|
378
|
-
|
|
377
|
+
|
|
378
|
+
def go_back_func():
|
|
379
|
+
if len(self.history_routes) > 1:
|
|
380
|
+
self.history_routes.pop()
|
|
381
|
+
route, index = self.history_routes.pop()
|
|
382
|
+
if index is not None:
|
|
383
|
+
self.view.navigation_bar.selected_index = index
|
|
384
|
+
|
|
385
|
+
if len(self.history_routes) == 0:
|
|
386
|
+
self.page.views.clear()
|
|
387
|
+
|
|
388
|
+
self.__go(route)
|
|
389
|
+
else:
|
|
390
|
+
print("-> I can't go back! there is no history. ")
|
|
391
|
+
|
|
392
|
+
return lambda _=None: go_back_func()
|
|
393
|
+
|
|
394
|
+
def dynamic_control(self, control: Control, func_update: Callable[[Control], None]) -> None:
|
|
395
|
+
"""Adds dynamic control to the page."""
|
|
396
|
+
self._dynamic_control[self.page.route] = (control, func_update)
|
|
379
397
|
|
|
380
398
|
|
|
381
399
|
def evaluate_secret_key(data: Datasy):
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from re import Pattern, compile
|
|
3
|
+
from typing import Callable, Dict, Optional, Tuple
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@dataclass
|
|
7
|
+
class Msg:
|
|
8
|
+
method: str
|
|
9
|
+
key: str = None
|
|
10
|
+
value: str | dict = None
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class Redirect:
|
|
15
|
+
route: str = None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
TYPE_PATTERNS: Dict[str, Tuple[Pattern[str], Callable[[str], Optional[bool]]]] = {
|
|
19
|
+
"int": (compile(r"-?\d+"), int),
|
|
20
|
+
"float": (compile(r"-?\d+\.\d+"), float),
|
|
21
|
+
"str": (compile(r"[^/]+"), str),
|
|
22
|
+
"bool": (compile(r"(true|True|false|False)"), lambda x: x in ["true", "True"]),
|
|
23
|
+
}
|
|
@@ -126,6 +126,20 @@ class FletEasy(FletEasyX):
|
|
|
126
126
|
"""
|
|
127
127
|
|
|
128
128
|
__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
|
+
)
|
|
129
143
|
|
|
130
144
|
def __init__(
|
|
131
145
|
self,
|
|
@@ -155,13 +169,15 @@ class FletEasy(FletEasyX):
|
|
|
155
169
|
# add data to middleware request
|
|
156
170
|
MiddlewareRequest._data = self._data
|
|
157
171
|
|
|
172
|
+
self.__pagesys = automatic_routing(self.__path_views) if self.__path_views else None
|
|
173
|
+
|
|
158
174
|
# -------------------------------------------------------------------
|
|
159
175
|
def __pre_config(self, page: Page):
|
|
160
176
|
"""config before run"""
|
|
161
177
|
self._add_configuration_start(page)
|
|
162
178
|
|
|
163
|
-
if self.
|
|
164
|
-
self.add_pages(
|
|
179
|
+
if self.__pagesys:
|
|
180
|
+
self.add_pages(self.__pagesys)
|
|
165
181
|
|
|
166
182
|
self._run()
|
|
167
183
|
|
|
@@ -246,6 +262,7 @@ class FletEasy(FletEasyX):
|
|
|
246
262
|
route=route,
|
|
247
263
|
view=func,
|
|
248
264
|
title=data.get("title"),
|
|
265
|
+
index=data.get("index"),
|
|
249
266
|
clear=data.get("page_clear"),
|
|
250
267
|
share_data=data.get("share_data"),
|
|
251
268
|
protected_route=data.get("protected_route"),
|
|
@@ -281,6 +298,7 @@ class FletEasy(FletEasyX):
|
|
|
281
298
|
cls,
|
|
282
299
|
route: str,
|
|
283
300
|
title: str = None,
|
|
301
|
+
index: Optional[int] = None,
|
|
284
302
|
page_clear: bool = False,
|
|
285
303
|
share_data: bool = False,
|
|
286
304
|
protected_route: bool = False,
|
|
@@ -293,6 +311,7 @@ class FletEasy(FletEasyX):
|
|
|
293
311
|
"""Decorator to add a new page to the app, you need the following parameters:
|
|
294
312
|
* route: text string of the url, for example(`'/FletEasy'`).
|
|
295
313
|
* `title` : Define the title of the page. (optional).
|
|
314
|
+
* `index` : Define the index of the page, use in controls like `ft.CupertinoNavigationBar` or `ft.NavigationBar`. (optional)
|
|
296
315
|
* clear: Removes the pages from the `page.views` list of flet. (optional)
|
|
297
316
|
* `share_data` : It is a boolean value, which is useful if you want to share data between pages, in a more restricted way. (optional)
|
|
298
317
|
* protected_route: Protects the route of the page, according to the configuration of the `login` decorator of the `FletEasy` class. (optional)
|
|
@@ -327,6 +346,7 @@ class FletEasy(FletEasyX):
|
|
|
327
346
|
data = {
|
|
328
347
|
"route": route,
|
|
329
348
|
"title": title,
|
|
349
|
+
"index": index,
|
|
330
350
|
"page_clear": page_clear,
|
|
331
351
|
"share_data": share_data,
|
|
332
352
|
"protected_route": protected_route,
|
|
@@ -15,6 +15,7 @@ class Pagesy:
|
|
|
15
15
|
* `route`: text string of the url, for example(`'/task'`).
|
|
16
16
|
* `view`: Stores the page function.
|
|
17
17
|
* `title` : Define the title of the page.
|
|
18
|
+
* `index` : Define the index of the page, use in controls like `ft.NavigationBar` and `ft.CupertinoNavigationBar`.
|
|
18
19
|
* `clear`: Removes the pages from the `page.views` list of flet. (optional)
|
|
19
20
|
* `share_data` : It is a boolean value, which is useful if you want to share data between pages, in a more restricted way. (optional)
|
|
20
21
|
* `protected_route`: Protects the route of the page, according to the configuration of the `login` decorator of the `FletEasy` class. (optional)
|
|
@@ -33,6 +34,7 @@ class Pagesy:
|
|
|
33
34
|
route: str,
|
|
34
35
|
view: ViewHandler,
|
|
35
36
|
title: Optional[str] = None,
|
|
37
|
+
index: Optional[int] = None,
|
|
36
38
|
clear: bool = False,
|
|
37
39
|
share_data: bool = False,
|
|
38
40
|
protected_route: bool = False,
|
|
@@ -45,6 +47,7 @@ class Pagesy:
|
|
|
45
47
|
self.route = route
|
|
46
48
|
self.view = view
|
|
47
49
|
self.title = title
|
|
50
|
+
self.index = index
|
|
48
51
|
self.clear = clear
|
|
49
52
|
self.share_data = share_data
|
|
50
53
|
self.protected_route = protected_route
|
|
@@ -178,6 +181,7 @@ class AddPagesy:
|
|
|
178
181
|
self,
|
|
179
182
|
route: str,
|
|
180
183
|
title: Optional[str] = None,
|
|
184
|
+
index: Optional[int] = None,
|
|
181
185
|
page_clear: bool = False,
|
|
182
186
|
share_data: bool = False,
|
|
183
187
|
protected_route: bool = False,
|
|
@@ -199,6 +203,7 @@ class AddPagesy:
|
|
|
199
203
|
route=self.__build_route(route),
|
|
200
204
|
view=func,
|
|
201
205
|
title=title,
|
|
206
|
+
index=index,
|
|
202
207
|
clear=page_clear,
|
|
203
208
|
share_data=share_data,
|
|
204
209
|
protected_route=protected_route,
|