flet-easy 0.3.0.dev1__tar.gz → 0.3.0.dev3__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.
Files changed (163) hide show
  1. flet_easy-0.3.0.dev3/.vscode/settings.json +7 -0
  2. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/PKG-INFO +1 -1
  3. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/pyproject.toml +74 -72
  4. flet_easy-0.3.0.dev3/src/flet_easy/auto_route.py +62 -0
  5. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/fletEasy.py +4 -2
  6. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/route.py +3 -1
  7. flet_easy-0.3.0.dev3/tests/cache-pages/pyproject.toml +53 -0
  8. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/cache-pages/witch-main.py +23 -2
  9. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/cache-pages/without-main.py +2 -0
  10. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/d2.py +28 -2
  11. flet_easy-0.3.0.dev3/tests/flet-app/pyproject.toml +58 -0
  12. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/assets/database.db +0 -0
  13. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/controllers/login.py +3 -3
  14. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/controllers/register.py +1 -1
  15. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/core/config.py +1 -4
  16. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/main.py +11 -6
  17. flet_easy-0.3.0.dev3/tests/flet-app/src/models/connection.py +11 -0
  18. flet_easy-0.3.0.dev3/tests/flet-app/src/models/methods.py +41 -0
  19. flet_easy-0.3.0.dev3/tests/flet-app/src/models/models.py +7 -0
  20. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/views/counter.py +2 -2
  21. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/views/dashboard.py +3 -3
  22. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/views/index.py +3 -8
  23. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/v1.py +4 -4
  24. flet_easy-0.3.0.dev3/tests/x1.py +34 -0
  25. flet_easy-0.3.0.dev3/tests/x2.py +63 -0
  26. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/uv.lock +274 -57
  27. flet_easy-0.3.0.dev1/src/flet_easy/auto_route.py +0 -34
  28. flet_easy-0.3.0.dev1/tests/flet-app/pyproject.toml +0 -27
  29. flet_easy-0.3.0.dev1/tests/flet-app/src/models/connection.py +0 -19
  30. flet_easy-0.3.0.dev1/tests/flet-app/src/models/methods.py +0 -37
  31. flet_easy-0.3.0.dev1/tests/flet-app/src/models/models.py +0 -11
  32. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  33. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  34. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.github/workflows/docs-update.yml +0 -0
  35. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.github/workflows/linters.yml +0 -0
  36. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.github/workflows/publish-pypi.yml +0 -0
  37. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.github/workflows/tests.yml +0 -0
  38. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.gitignore +0 -0
  39. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.markdownlint.yaml +0 -0
  40. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/.python-version +0 -0
  41. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/CHANGELOG.md +0 -0
  42. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/CONTRIBUTING.md +0 -0
  43. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/LICENSE +0 -0
  44. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/README.md +0 -0
  45. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/add-pages/by-means-of-functions.md +0 -0
  46. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/add-pages/in-automatic.md +0 -0
  47. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/add-pages/through-classes.md +0 -0
  48. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/add-pages/through-decorators.md +0 -0
  49. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/ControlResponse.gif +0 -0
  50. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/Use-class-new-page.gif +0 -0
  51. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/app-example.gif +0 -0
  52. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/fs-init.gif +0 -0
  53. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/jwt-app.gif +0 -0
  54. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/jwt-web.gif +0 -0
  55. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/on_keyboard.gif +0 -0
  56. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/protected-route.gif +0 -0
  57. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/route-advanced.gif +0 -0
  58. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/route-custom.gif +0 -0
  59. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/route-simple.gif +0 -0
  60. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/share-data.gif +0 -0
  61. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/use-example.gif +0 -0
  62. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/gifs/view-config.gif +0 -0
  63. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/app-api.png +0 -0
  64. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/favicon.png +0 -0
  65. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/funtion_add_page.png +0 -0
  66. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/logo.png +0 -0
  67. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/on-resize.png +0 -0
  68. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/run_view.png +0 -0
  69. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/struct-views.png +0 -0
  70. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/v0.2.0/FletEasy.png +0 -0
  71. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/v0.2.0/export_asgi.png +0 -0
  72. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/v0.2.0/fastapi_run.png +0 -0
  73. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/v0.2.0/method_run.png +0 -0
  74. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/v0.2.0/struct-app.png +0 -0
  75. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/images/v0.2.0/template_dxs.png +0 -0
  76. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/assets/js/dynamic-year.js +0 -0
  77. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/basic-jwt.md +0 -0
  78. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/begin.md +0 -0
  79. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/cli-to-create-app.md +0 -0
  80. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/customized-app/control-view-configuration.md +0 -0
  81. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/customized-app/events.md +0 -0
  82. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/customized-app/general-settings.md +0 -0
  83. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/customized-app/page-404.md +0 -0
  84. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/customized-app/route-protection.md +0 -0
  85. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/data-sharing-between-pages.md +0 -0
  86. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/dynamic-routes.md +0 -0
  87. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/events/keyboard-event.md +0 -0
  88. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/events/on-resize.md +0 -0
  89. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/how-to-use.md +0 -0
  90. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/index.md +0 -0
  91. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/installation.md +0 -0
  92. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/middleware.md +0 -0
  93. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/overrides/main.html +0 -0
  94. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/ref.md +0 -0
  95. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/responsiveControlsy.md +0 -0
  96. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/run-the-app.md +0 -0
  97. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/stylesheets/extra.css +0 -0
  98. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/docs/working-with-other-apps.md +0 -0
  99. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/media/app-example.gif +0 -0
  100. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/media/logo.png +0 -0
  101. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/mkdocs.yml +0 -0
  102. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/ruff.toml +0 -0
  103. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/__init__.py +0 -0
  104. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/cli/main.py +0 -0
  105. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/datasy.py +0 -0
  106. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/exceptions.py +0 -0
  107. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/extra.py +0 -0
  108. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/extrasJwt.py +0 -0
  109. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/inheritance.py +0 -0
  110. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/job.py +0 -0
  111. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/jwt.py +0 -0
  112. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/middleware.py +0 -0
  113. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/pagesy.py +0 -0
  114. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/src/flet_easy/view_404.py +0 -0
  115. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/b.py +0 -0
  116. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/b2.py +0 -0
  117. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/c1.py +0 -0
  118. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/README.md +0 -0
  119. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/assets/icon.png +0 -0
  120. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/components/__init__.py +0 -0
  121. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/components/counter.py +0 -0
  122. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/components/custom.py +0 -0
  123. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/components/drawer.py +0 -0
  124. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/components/login.py +0 -0
  125. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/components/register.py +0 -0
  126. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/controllers/__init__.py +0 -0
  127. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/controllers/counter.py +0 -0
  128. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/core/__init__.py +0 -0
  129. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/core/sensitive.py +0 -0
  130. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/models/__init__.py +0 -0
  131. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/views/login.py +0 -0
  132. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-app/src/views/share.py +0 -0
  133. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/favicon.png +0 -0
  134. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/icon.png +0 -0
  135. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/icons/icon-192 - copia.png +0 -0
  136. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/icons/icon-192.png +0 -0
  137. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/icons/icon-512.png +0 -0
  138. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/icons/icon-maskable-512.png +0 -0
  139. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/icons/loading-animation.png +0 -0
  140. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/index.html +0 -0
  141. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/assets/manifest.json +0 -0
  142. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/controllers/__init__.py +0 -0
  143. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/controllers/contador.py +0 -0
  144. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/core/__init__.py +0 -0
  145. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/core/config.py +0 -0
  146. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/main.py +0 -0
  147. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/model/__init__.py +0 -0
  148. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/model/contador.py +0 -0
  149. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/counter.py +0 -0
  150. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/index.py +0 -0
  151. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/login.py +0 -0
  152. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/on_keyboard.py +0 -0
  153. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/pubsub.py +0 -0
  154. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/resize.py +0 -0
  155. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/response.py +0 -0
  156. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/share_data.py +0 -0
  157. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/task.py +0 -0
  158. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/flet-fastapi/views/test.py +0 -0
  159. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/routing.py +0 -0
  160. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/v2.py +0 -0
  161. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/v3.py +0 -0
  162. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/v4.py +0 -0
  163. {flet_easy-0.3.0.dev1 → flet_easy-0.3.0.dev3}/tests/x.py +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "python.testing.pytestArgs": [
3
+ "tests"
4
+ ],
5
+ "python.testing.unittestEnabled": false,
6
+ "python.testing.pytestEnabled": true
7
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flet-easy
3
- Version: 0.3.0.dev1
3
+ Version: 0.3.0.dev3
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.dev1"
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
- docs = ["mkdocs-material>=9.5.17", "mike>=2.0.0"]
1
+ [project]
2
+ name = "flet-easy"
3
+ version = "0.3.0.dev3"
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
@@ -155,13 +155,15 @@ class FletEasy(FletEasyX):
155
155
  # add data to middleware request
156
156
  MiddlewareRequest._data = self._data
157
157
 
158
+ self.__pagesys = automatic_routing(self.__path_views)
159
+
158
160
  # -------------------------------------------------------------------
159
161
  def __pre_config(self, page: Page):
160
162
  """config before run"""
161
163
  self._add_configuration_start(page)
162
164
 
163
- if self.__path_views is not None:
164
- self.add_pages(automatic_routing(self.__path_views))
165
+ if self.__pagesys:
166
+ self.add_pages(self.__pagesys)
165
167
 
166
168
  self._run()
167
169
 
@@ -131,6 +131,7 @@ class FletEasyX:
131
131
  def _add_configuration_start(self, page: Page):
132
132
  """Add general settings to the pages."""
133
133
  self.__page = page
134
+ self.__page.views.clear()
134
135
  self.__config_datasy()
135
136
 
136
137
  """ Add view configuration """
@@ -166,7 +167,8 @@ class FletEasyX:
166
167
  """Add a new page and update it."""
167
168
 
168
169
  # To make the page change faster.
169
- self.__page.views.clear()
170
+ if len(self.__page.views) == 2:
171
+ self.__page.views.remove(self.__page.views[1])
170
172
 
171
173
  view = self.__history_pages.get(route)
172
174
 
@@ -0,0 +1,53 @@
1
+ [project]
2
+ name = "flet-app"
3
+ version = "0.1.0"
4
+ license = "MIT"
5
+ dependencies = ["flet", "flet-easy==0.3.0.dev2", "sqlmodel"]
6
+
7
+ [[project.authors]]
8
+ name = "Daxexs"
9
+ email = "Daxexs@test.com"
10
+
11
+ [tool.flet]
12
+ org = "com.mycompany" # --org
13
+ product = "flet-easy" # --product
14
+ company = "My Company" # --company
15
+ copyright = "Copyright (C) 2024 by MyCompany" # --copyright
16
+ build_number = 1 # --build-number
17
+ BUILD_VERSION = "0.1.0"
18
+
19
+
20
+ [tool.flet.app]
21
+ module = "witch-main"
22
+ path = "."
23
+ #exclude = ["assets"]
24
+
25
+ [tool.flet.compile]
26
+ app = true
27
+ packages = true
28
+ cleanup = true
29
+
30
+ [tool.flet.splash]
31
+ color = "" # --splash-color
32
+ dark_color = "" # --splash-dark-color
33
+ web = false # --no-web-splash
34
+ ios = false # --no-ios-splash
35
+ android = false # --no-android-splash
36
+
37
+
38
+ [tool.flet.android]
39
+ #"adaptive_icon_background = ""
40
+ #split_per_abi = true
41
+ target_sdk_version = 34
42
+
43
+
44
+ [tool.flet.android.permission] # --android-permissions
45
+ "android.permission.CAMERA" = true
46
+ "android.permission.INTERNET" = true
47
+ "android.permission.READ_EXTERNAL_STORAGE" = true
48
+ "android.permission.WRITE_EXTERNAL_STORAGE" = true
49
+ "android.hardware.location.network" = true
50
+
51
+
52
+ [tool.flet.android.feature] # --android-features
53
+ "android.hardware.camera" = true
@@ -112,7 +112,12 @@ def index_page(data: fs.Datasy):
112
112
  )
113
113
 
114
114
 
115
- @app.page("/test2", title="Test 2")
115
+ def m(data: fs.Datasy):
116
+ page = data.page
117
+ page.run_task(x)
118
+
119
+
120
+ @app.page("/test2", title="Test 2", middleware=[m])
116
121
  def test_page(data: fs.Datasy):
117
122
  page = data.page
118
123
  data.view.appbar.title = ft.Text("Test 2")
@@ -129,6 +134,13 @@ def test_page(data: fs.Datasy):
129
134
  )
130
135
 
131
136
 
137
+ async def x():
138
+ for i in range(10):
139
+ print(i)
140
+ await asyncio.sleep(1)
141
+ return "Done"
142
+
143
+
132
144
  # add cache to the page
133
145
  @app.page("/test3", title="Test 3", cache=True)
134
146
  async def test2_page(data: fs.Datasy):
@@ -136,6 +148,8 @@ async def test2_page(data: fs.Datasy):
136
148
  new_appbar = fs.cache_control(data.view.appbar)
137
149
  new_appbar.title = ft.Text("Test 3")
138
150
 
151
+ page.run_task(x)
152
+
139
153
  return ft.View(
140
154
  controls=[
141
155
  ft.Text("Counter 3", size=50),
@@ -148,4 +162,11 @@ async def test2_page(data: fs.Datasy):
148
162
  )
149
163
 
150
164
 
151
- app.run()
165
+ async def main(page: ft.Page):
166
+ app.start(page)
167
+
168
+
169
+ # app.run()
170
+ if __name__ == "__main__":
171
+ #ft.app(target=main)
172
+ app.run()
@@ -147,3 +147,5 @@ async def test2_page(data: fs.Datasy):
147
147
 
148
148
 
149
149
  app.run()
150
+
151
+ # ft.app(target=app.get_app())
@@ -1,4 +1,8 @@
1
+ import asyncio
1
2
  import flet as ft
3
+ from pyinstrument import Profiler, profile
4
+
5
+ #x = Profiler()
2
6
 
3
7
 
4
8
  def navigation_change(e: ft.ControlEvent):
@@ -22,7 +26,22 @@ t = ft.View(
22
26
  )
23
27
 
24
28
 
29
+ async def test(page: ft.Page):
30
+ page.title = "Test"
31
+ return 123
32
+
33
+
34
+ def xd(page: ft.Page):
35
+ l = asyncio.get_event_loop()
36
+ # l = page.loop
37
+ # l.run_in_executor(None, test, page)
38
+ l.run_until_complete(test(page))
39
+ return 1
40
+
41
+
42
+ # @profile
25
43
  def main(page: ft.Page):
44
+
26
45
  page.title = "Test"
27
46
  page.theme = ft.Theme(
28
47
  page_transitions=ft.PageTransitionsTheme(
@@ -34,8 +53,10 @@ def main(page: ft.Page):
34
53
  )
35
54
  )
36
55
 
56
+ # x = page.run_task(xd).result()
57
+ # xd(page)
58
+
37
59
  def route_change(e: ft.RouteChangeEvent):
38
- page.views.clear()
39
60
  if e.route == "/":
40
61
  page.views.append(
41
62
  ft.View(
@@ -46,6 +67,7 @@ def main(page: ft.Page):
46
67
  navigation_bar=t.navigation_bar,
47
68
  )
48
69
  )
70
+
49
71
  elif e.route == "/2":
50
72
  page.views.append(
51
73
  ft.View(
@@ -61,7 +83,11 @@ def main(page: ft.Page):
61
83
 
62
84
  page.on_route_change = route_change
63
85
  page.go("/")
86
+ """ page.window.close() """
64
87
 
65
88
 
66
89
  if __name__ == "__main__":
67
- ft.app(target=main)
90
+ a = ft.app(target=main)
91
+ """
92
+ x.stop()
93
+ x.open_in_browser(timeline=True) """
@@ -0,0 +1,58 @@
1
+ [project]
2
+ name = "flet-app"
3
+ version = "0.1.0"
4
+ license = "MIT"
5
+ dependencies = [
6
+ "flet==0.27.5",
7
+ "flet-easy[jwt]==0.3.0.dev2",
8
+ "sqlmodel==0.0.24",
9
+ ]
10
+
11
+ [[project.authors]]
12
+ name = "Daxexs"
13
+ email = "Daxexs@test.com"
14
+
15
+ [tool.flet]
16
+ org = "com.mycompany1" # --org
17
+ product = "flet-app" # --product
18
+ company = "My Company" # --company
19
+ copyright = "Copyright (C) 2024 by MyCompany" # --copyright
20
+ build_number = 2 # --build-number
21
+ build_version = "0.2.1"
22
+
23
+
24
+ [tool.flet.app]
25
+ module = "main"
26
+ path = "src"
27
+ exclude = ["assets/icon.png"]
28
+
29
+ [tool.flet.compile]
30
+ app = true
31
+ packages = true
32
+ cleanup = true
33
+
34
+ [tool.flet.splash]
35
+ color = "" # --splash-color
36
+ dark_color = "" # --splash-dark-color
37
+ web = false # --no-web-splash
38
+ ios = false # --no-ios-splash
39
+ android = true # --no-android-splash
40
+
41
+
42
+ [tool.flet.android]
43
+ #"adaptive_icon_background = ""
44
+ #split_per_abi = true
45
+ target_sdk_version = 34
46
+ ADAPTIVE_ICON_BACKGROUND = true
47
+
48
+
49
+ [tool.flet.android.permission] # --android-permissions
50
+ "android.permission.CAMERA" = true
51
+ "android.permission.INTERNET" = true
52
+ "android.permission.READ_EXTERNAL_STORAGE" = true
53
+ "android.permission.WRITE_EXTERNAL_STORAGE" = true
54
+ "android.hardware.location.network" = true
55
+
56
+
57
+ [tool.flet.android.feature] # --android-features
58
+ "android.hardware.camera" = true
@@ -14,7 +14,7 @@ class LoginC:
14
14
  self.password = fs.Ref[ft.TextField]()
15
15
  self.time_logout = fs.Ref[ft.TextField]()
16
16
 
17
- async def check(self, e):
17
+ def check(self, e):
18
18
  username = (
19
19
  self.username.c.value
20
20
  if self.username.c.value != "" and self.username.c.value
@@ -28,12 +28,12 @@ class LoginC:
28
28
  )
29
29
 
30
30
  if username and password:
31
- if not await check_user(User(username=username, password=password)):
31
+ if not check_user(User(username=username, password=password)):
32
32
  self.data.page.snack_bar = ft.SnackBar(
33
33
  content=ft.Text("User does not exist"), action="Alright!", open=True
34
34
  )
35
35
  else:
36
- await self.data.login_async(
36
+ self.data.login(
37
37
  key="login",
38
38
  value={"user": username},
39
39
  time_expiry=timedelta(seconds=int(self.time_logout.c.value)),
@@ -27,7 +27,7 @@ class RegisterC:
27
27
  )
28
28
 
29
29
  if username and password:
30
- if not e.page.run_task(add_user, User(username=username, password=password)).result():
30
+ if not add_user(User(username=username, password=password)):
31
31
  self.data.page.snack_bar = ft.SnackBar(
32
32
  content=ft.Text("The user already exists"), action="Alright!", open=True
33
33
  )
@@ -17,10 +17,7 @@ class ConfigApp:
17
17
  @self.app.view
18
18
  async def view_config(data: fs.Datasy):
19
19
  return fs.Viewsy(
20
- appbar=ft.AppBar(
21
- title=ft.Text("Flet-Easy"),
22
- leading=ft.IconButton(icon=ft.Icons.ARROW_BACK_IOS, on_click=data.go_back()),
23
- ),
20
+ appbar=ft.AppBar(title=ft.Text("Flet-Easy")),
24
21
  drawer=ft.NavigationDrawer(
25
22
  controls=[
26
23
  ft.Container(height=12),
@@ -4,8 +4,12 @@ from core.config import ConfigApp
4
4
 
5
5
  # from core.sensitive import PRIVATE_KEY, PUBLIC_KEY
6
6
  from core.sensitive import SECRET_KEY
7
+ from models.connection import create_tables
7
8
 
8
9
  import flet_easy as fs
10
+ import flet as ft
11
+
12
+ create_tables()
9
13
 
10
14
  app = fs.FletEasy(
11
15
  route_init="/home",
@@ -17,10 +21,10 @@ app = fs.FletEasy(
17
21
  )
18
22
 
19
23
 
20
- def starting_page(data: fs.Datasy):
24
+ async def starting_page(data: fs.Datasy) -> None:
21
25
  """Remove [print()] from Python if build Windows"""
22
- pass
23
- # print(f"\n⚡[MIDDLEWARES RUNNING]\n-> Route:{data.route}\n1. Loading the page")
26
+ # pass
27
+ print(f"\n⚡[MIDDLEWARES RUNNING]\n-> Route:{data.route}\n1. Loading the page")
24
28
 
25
29
 
26
30
  async def starting_page_two(data: fs.Datasy):
@@ -47,10 +51,11 @@ async def starting_page_two(data: fs.Datasy):
47
51
  # add class to middleware custom
48
52
  class CustomMiddlewareInit(fs.MiddlewareRequest):
49
53
  def before_request(self):
50
- print("-/// (app-root) Before request", self.data.history_routes)
54
+ pass
55
+ # print("-/// (app-root) Before request", self.data.history_routes)
51
56
 
52
57
  def after_request(self):
53
- print("-/// (app-root) After request")
58
+ # print("-/// (app-root) After request")
54
59
  if self.data.route == "/login":
55
60
  self.data.page.title = "login-Middleware"
56
61
  self.data.page.update()
@@ -58,7 +63,7 @@ class CustomMiddlewareInit(fs.MiddlewareRequest):
58
63
 
59
64
  """ [If you have any problem - build Windows]
60
65
  Remove [print()] from Python if used in 'add_middleware' functions. """
61
- app.add_middleware(starting_page, starting_page_two, CustomMiddlewareInit)
66
+ # app.add_middleware(starting_page, starting_page_two, CustomMiddlewareInit)
62
67
 
63
68
  ConfigApp(app)
64
69
 
@@ -0,0 +1,11 @@
1
+ from pathlib import Path
2
+
3
+ from sqlmodel import SQLModel, create_engine
4
+
5
+ path = Path(__file__).parents[1] / "assets"
6
+
7
+ engine = create_engine(f"sqlite:///{path}/database.db")
8
+
9
+
10
+ def create_tables():
11
+ SQLModel.metadata.create_all(engine)
@@ -0,0 +1,41 @@
1
+ from sqlalchemy.exc import IntegrityError, NoResultFound
2
+ from sqlmodel import Session, select
3
+
4
+ from models.connection import engine
5
+ from models.models import User
6
+
7
+
8
+ def add_user(user: User):
9
+ try:
10
+ with Session(engine) as session:
11
+ session.add(user)
12
+ session.commit()
13
+ return True
14
+ except IntegrityError:
15
+ return False
16
+
17
+
18
+ def check_user(user: User):
19
+ try:
20
+ with Session(engine) as session:
21
+ statement = select(User).where(User.username == user.username)
22
+ user_check = session.exec(statement).first()
23
+ # print(user_check)
24
+ if user_check:
25
+ return user_check.password == user.password
26
+ else:
27
+ return False
28
+ except NoResultFound or IntegrityError:
29
+ return False
30
+
31
+
32
+ async def delete_user(user: User):
33
+ try:
34
+ with Session(engine) as session:
35
+ statement = select(User).where(User.username == user.username)
36
+ user_check = session.exec(statement).first()
37
+ session.delete(user_check)
38
+ session.commit()
39
+ return True
40
+ except NoResultFound or IntegrityError:
41
+ return False
@@ -0,0 +1,7 @@
1
+ from sqlmodel import Field, SQLModel
2
+
3
+
4
+ class User(SQLModel, table=True):
5
+ id: int = Field(default=None, primary_key=True)
6
+ username: str = Field(default=None, unique=True)
7
+ password: str = Field(default=None)
@@ -4,7 +4,7 @@ from components import Counter, Custom, Drawer
4
4
  import flet_easy as fs
5
5
 
6
6
 
7
- def message_counter(data: fs.Datasy):
7
+ async def message_counter(data: fs.Datasy):
8
8
  print("+ Message counter")
9
9
 
10
10
 
@@ -29,7 +29,7 @@ async def counter_page(data: fs.Datasy, id: str):
29
29
  ],
30
30
  vertical_alignment=ft.MainAxisAlignment.CENTER,
31
31
  horizontal_alignment=ft.CrossAxisAlignment.CENTER,
32
- drawer=view.drawer,
32
+ #drawer=view.drawer,
33
33
  appbar=view.appbar,
34
34
  )
35
35