Flask-Exts 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. {flask_exts-0.2.0 → flask_exts-0.2.2}/.gitignore +3 -0
  2. {flask_exts-0.2.0 → flask_exts-0.2.2}/CHANGES.rst +20 -0
  3. {flask_exts-0.2.0 → flask_exts-0.2.2}/LICENSE.rst +1 -1
  4. {flask_exts-0.2.0 → flask_exts-0.2.2}/PKG-INFO +29 -8
  5. flask_exts-0.2.2/README.rst +42 -0
  6. {flask_exts-0.2.0 → flask_exts-0.2.2}/babel/babel.cfg +1 -0
  7. flask_exts-0.2.2/babel/babel.sh +9 -0
  8. flask_exts-0.2.2/babel/messages.pot +567 -0
  9. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/conf.py +2 -2
  10. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/configure.rst +0 -10
  11. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/index.rst +8 -1
  12. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/README.rst +22 -5
  13. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/app.py +2 -3
  14. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/templates/icon.html +9 -3
  15. {flask_exts-0.2.0/examples/bootstrap5 → flask_exts-0.2.2/examples/bootstrap4}/templates/icons.html +2050 -2050
  16. {flask_exts-0.2.0/examples/bootstrap5 → flask_exts-0.2.2/examples/bootstrap4}/templates/pagination.html +1 -1
  17. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/app.py +3 -4
  18. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/templates/icon.html +1 -1
  19. {flask_exts-0.2.0/examples/bootstrap4 → flask_exts-0.2.2/examples/bootstrap5}/templates/icons.html +1 -1
  20. {flask_exts-0.2.0/examples/bootstrap4 → flask_exts-0.2.2/examples/bootstrap5}/templates/pagination.html +1 -1
  21. flask_exts-0.2.2/examples/demo/admin_views.py +26 -0
  22. flask_exts-0.2.2/examples/demo/build_sample.py +229 -0
  23. flask_exts-0.2.2/examples/demo/make_app.py +47 -0
  24. flask_exts-0.2.2/examples/demo/models/__init__.py +12 -0
  25. flask_exts-0.2.2/examples/demo/models/author.py +73 -0
  26. flask_exts-0.2.2/examples/demo/models/keyword.py +15 -0
  27. flask_exts-0.2.2/examples/demo/models/post.py +26 -0
  28. flask_exts-0.2.2/examples/demo/models/post_tag.py +11 -0
  29. flask_exts-0.2.2/examples/demo/models/tag.py +11 -0
  30. flask_exts-0.2.2/examples/demo/models/tree.py +18 -0
  31. flask_exts-0.2.2/examples/demo/models/user.py +38 -0
  32. flask_exts-0.2.2/examples/demo/models/user_keyword.py +26 -0
  33. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/demo/templates/my/index.html +1 -0
  34. flask_exts-0.2.2/examples/demo/templates/tree_list.html +14 -0
  35. flask_exts-0.2.2/examples/demo/views/author_view.py +134 -0
  36. flask_exts-0.2.2/examples/demo/views/keyword_view.py +9 -0
  37. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/demo/views/my_view.py +1 -1
  38. flask_exts-0.2.2/examples/demo/views/post_view.py +93 -0
  39. flask_exts-0.2.2/examples/demo/views/tag_view.py +4 -0
  40. flask_exts-0.2.2/examples/demo/views/tree_view.py +27 -0
  41. flask_exts-0.2.2/examples/demo/views/user_view.py +13 -0
  42. flask_exts-0.2.2/examples/fileadmin/file_view.py +12 -0
  43. {flask_exts-0.2.0/examples/admin → flask_exts-0.2.2/examples}/fileadmin/make_app.py +10 -2
  44. flask_exts-0.2.2/examples/rediscli.py +18 -0
  45. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/simple.py +0 -4
  46. flask_exts-0.2.2/examples/sqla-custom-inline-forms/__init__.py +1 -0
  47. flask_exts-0.2.2/examples/sqla-custom-inline-forms/data.py +23 -0
  48. flask_exts-0.2.2/examples/sqla-custom-inline-forms/make_app.py +88 -0
  49. flask_exts-0.2.2/examples/sqla-custom-inline-forms/models/__init__.py +1 -0
  50. flask_exts-0.2.2/examples/sqla-custom-inline-forms/models/model.py +42 -0
  51. {flask_exts-0.2.0/src/flask_exts → flask_exts-0.2.2/examples/sqla-custom-inline-forms}/templates/admin/admin.html +1 -1
  52. flask_exts-0.2.2/examples/sqla-custom-inline-forms/templates/field_list.html +13 -0
  53. flask_exts-0.2.2/examples/sqla-custom-inline-forms/templates/locations.html +14 -0
  54. flask_exts-0.2.2/examples/sqla-custom-inline-forms/views/image_view.py +76 -0
  55. {flask_exts-0.2.0 → flask_exts-0.2.2}/pyproject.toml +12 -1
  56. flask_exts-0.2.2/src/flask_exts/__about__.py +1 -0
  57. flask_exts-0.2.2/src/flask_exts/admin/__init__.py +3 -0
  58. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/admin/actions.py +0 -3
  59. flask_exts-0.2.2/src/flask_exts/admin/admin.py +117 -0
  60. flask_exts-0.2.2/src/flask_exts/admin/menu.py +280 -0
  61. flask_exts-0.2.2/src/flask_exts/admin/model/__init__.py +2 -0
  62. flask_exts-0.2.2/src/flask_exts/admin/model/ajax.py +46 -0
  63. flask_exts-0.2.2/src/flask_exts/admin/model/filters.py +292 -0
  64. flask_exts-0.2.2/src/flask_exts/admin/model/form.py +251 -0
  65. flask_exts-0.2.2/src/flask_exts/admin/model/typefmt.py +91 -0
  66. flask_exts-0.2.2/src/flask_exts/admin/model/view.py +2504 -0
  67. flask_exts-0.2.2/src/flask_exts/admin/row_action.py +67 -0
  68. flask_exts-0.2.2/src/flask_exts/admin/sqla/__init__.py +1 -0
  69. flask_exts-0.2.2/src/flask_exts/admin/sqla/ajax.py +126 -0
  70. flask_exts-0.2.2/src/flask_exts/admin/sqla/filters.py +625 -0
  71. flask_exts-0.2.2/src/flask_exts/admin/sqla/form.py +888 -0
  72. flask_exts-0.2.2/src/flask_exts/admin/sqla/typefmt.py +17 -0
  73. flask_exts-0.2.2/src/flask_exts/admin/sqla/view.py +1323 -0
  74. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/admin/view.py +43 -40
  75. flask_exts-0.2.2/src/flask_exts/commands.py +34 -0
  76. flask_exts-0.2.2/src/flask_exts/datastore/sqla/__init__.py +9 -0
  77. flask_exts-0.2.0/examples/demo/models/user.py → flask_exts-0.2.2/src/flask_exts/datastore/sqla/models/role.py +8 -8
  78. flask_exts-0.2.2/src/flask_exts/datastore/sqla/models/user.py +38 -0
  79. flask_exts-0.2.2/src/flask_exts/datastore/sqla/models/user_role.py +11 -0
  80. flask_exts-0.2.2/src/flask_exts/datastore/sqla/models/webauthn.py +37 -0
  81. flask_exts-0.2.2/src/flask_exts/datastore/sqla/orm.py +14 -0
  82. flask_exts-0.2.2/src/flask_exts/decorators/__init__.py +2 -0
  83. flask_exts-0.2.2/src/flask_exts/decorators/auth_required_decorator.py +47 -0
  84. flask_exts-0.2.2/src/flask_exts/forms/__init__.py +3 -0
  85. flask_exts-0.2.2/src/flask_exts/forms/fields/__init__.py +6 -0
  86. flask_exts-0.2.2/src/flask_exts/forms/fields/ajax_select.py +109 -0
  87. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/fields/datetime.py +6 -2
  88. flask_exts-0.2.2/src/flask_exts/forms/fields/inline.py +123 -0
  89. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/fields/select.py +7 -7
  90. flask_exts-0.2.2/src/flask_exts/forms/fields/sqla.py +407 -0
  91. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/form/meta.py +2 -2
  92. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/rules.py +121 -280
  93. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/utils.py +26 -1
  94. flask_exts-0.2.2/src/flask_exts/forms/validators/sqla.py +84 -0
  95. flask_exts-0.2.2/src/flask_exts/forms/widgets/__init__.py +3 -0
  96. flask_exts-0.2.2/src/flask_exts/forms/widgets/checkbox.py +32 -0
  97. flask_exts-0.2.2/src/flask_exts/forms/widgets/inline.py +15 -0
  98. flask_exts-0.2.2/src/flask_exts/forms/widgets/render_template.py +25 -0
  99. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/widgets/select.py +9 -5
  100. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/widgets/xeditable.py +10 -3
  101. flask_exts-0.2.2/src/flask_exts/manager.py +74 -0
  102. flask_exts-0.2.2/src/flask_exts/proxies.py +17 -0
  103. flask_exts-0.2.2/src/flask_exts/security/__init__.py +6 -0
  104. flask_exts-0.2.2/src/flask_exts/security/authorize/__init__.py +1 -0
  105. flask_exts-0.2.2/src/flask_exts/security/authorize/base.py +21 -0
  106. flask_exts-0.2.2/src/flask_exts/security/authorize/casbin_authorizer.py +118 -0
  107. flask_exts-0.2.2/src/flask_exts/security/authorize/casbin_sqlalchemy_adapter/__init__.py +1 -0
  108. flask_exts-0.2.2/src/flask_exts/security/authorize/casbin_sqlalchemy_adapter/adapter.py +245 -0
  109. flask_exts-0.2.2/src/flask_exts/security/core.py +43 -0
  110. {flask_exts-0.2.0/src/flask_exts/users → flask_exts-0.2.2/src/flask_exts/security}/forms/login.py +1 -1
  111. {flask_exts-0.2.0/src/flask_exts/users → flask_exts-0.2.2/src/flask_exts/security}/forms/mixins.py +1 -2
  112. {flask_exts-0.2.0/src/flask_exts/users → flask_exts-0.2.2/src/flask_exts/security}/forms/profile.py +1 -1
  113. {flask_exts-0.2.0/src/flask_exts/users → flask_exts-0.2.2/src/flask_exts/security}/forms/register.py +1 -1
  114. flask_exts-0.2.2/src/flask_exts/security/mixins/webauthn_mixin.py +9 -0
  115. flask_exts-0.2.2/src/flask_exts/security/principal/identity.py +37 -0
  116. flask_exts-0.2.2/src/flask_exts/security/principal/identity_context.py +52 -0
  117. flask_exts-0.2.2/src/flask_exts/security/principal/permission.py +297 -0
  118. flask_exts-0.2.2/src/flask_exts/security/principal/principal.py +197 -0
  119. flask_exts-0.2.2/src/flask_exts/security/usercenter/base.py +21 -0
  120. flask_exts-0.2.0/src/flask_exts/users/default_usercenter.py → flask_exts-0.2.2/src/flask_exts/security/usercenter/memory_usercenter.py +20 -12
  121. flask_exts-0.2.2/src/flask_exts/security/usercenter/sqla_usercenter.py +88 -0
  122. flask_exts-0.2.0/src/flask_exts/static/admin/js/bs4_filters.js → flask_exts-0.2.2/src/flask_exts/static/js/filters.js +10 -7
  123. flask_exts-0.2.2/src/flask_exts/static/js/form.js +680 -0
  124. flask_exts-0.2.2/src/flask_exts/static/js/helper.js +7 -0
  125. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.2/src/flask_exts/static}/js/modal.js +4 -1
  126. flask_exts-0.2.2/src/flask_exts/static/js/security/base64.js +127 -0
  127. flask_exts-0.2.2/src/flask_exts/static/js/security/webauthn.js +193 -0
  128. flask_exts-0.2.2/src/flask_exts/static/vendor/bootstrap-icons/font/bootstrap-icons.css +2078 -0
  129. flask_exts-0.2.2/src/flask_exts/static/vendor/bootstrap-icons/font/bootstrap-icons.json +2052 -0
  130. flask_exts-0.2.2/src/flask_exts/static/vendor/bootstrap-icons/font/bootstrap-icons.min.css +5 -0
  131. flask_exts-0.2.2/src/flask_exts/static/vendor/bootstrap-icons/font/bootstrap-icons.scss +2090 -0
  132. flask_exts-0.2.2/src/flask_exts/static/vendor/bootstrap-icons/font/fonts/bootstrap-icons.woff +0 -0
  133. flask_exts-0.2.2/src/flask_exts/static/vendor/bootstrap-icons/font/fonts/bootstrap-icons.woff2 +0 -0
  134. flask_exts-0.2.2/src/flask_exts/static/vendor/daterangepicker/daterangepicker.css +410 -0
  135. flask_exts-0.2.2/src/flask_exts/static/vendor/daterangepicker/daterangepicker.js +1578 -0
  136. flask_exts-0.2.2/src/flask_exts/static/vendor/moment.min.js +1 -0
  137. flask_exts-0.2.2/src/flask_exts/static/vendor/select2/select2.min.css +1 -0
  138. flask_exts-0.2.2/src/flask_exts/static/vendor/select2/select2.min.js +2 -0
  139. flask_exts-0.2.2/src/flask_exts/static/vendor/vanilla-editor/css/bootstrap-editable.css +670 -0
  140. flask_exts-0.2.2/src/flask_exts/static/vendor/vanilla-editor/img/clear.png +0 -0
  141. flask_exts-0.2.2/src/flask_exts/static/vendor/vanilla-editor/img/loading.gif +0 -0
  142. flask_exts-0.2.2/src/flask_exts/static/vendor/vanilla-editor/js/bootstrap-editable.min.js +1 -0
  143. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/template/__init__.py +2 -0
  144. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/template/theme.py +10 -4
  145. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/template/utils.py +4 -14
  146. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/admin/base.html +12 -9
  147. flask_exts-0.2.2/src/flask_exts/templates/admin/index.html +11 -0
  148. flask_exts-0.2.2/src/flask_exts/templates/admin/model/create.html +31 -0
  149. flask_exts-0.2.2/src/flask_exts/templates/admin/model/details.html +51 -0
  150. flask_exts-0.2.2/src/flask_exts/templates/admin/model/edit.html +41 -0
  151. flask_exts-0.2.2/src/flask_exts/templates/admin/model/list.html +192 -0
  152. flask_exts-0.2.2/src/flask_exts/templates/admin/model/modals/create.html +12 -0
  153. flask_exts-0.2.2/src/flask_exts/templates/admin/model/modals/details.html +36 -0
  154. flask_exts-0.2.2/src/flask_exts/templates/admin/model/modals/edit.html +14 -0
  155. {flask_exts-0.2.0/src/flask_exts/templates/macro → flask_exts-0.2.2/src/flask_exts/templates/bootstrap4}/pagination.html +1 -0
  156. flask_exts-0.2.2/src/flask_exts/templates/index.html +22 -0
  157. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.2/src/flask_exts/templates/macro}/actions.html +15 -23
  158. flask_exts-0.2.2/src/flask_exts/templates/macro/form.html +168 -0
  159. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/macro/icon.html +11 -1
  160. flask_exts-0.2.2/src/flask_exts/templates/macro/inline.html +45 -0
  161. flask_exts-0.2.2/src/flask_exts/templates/macro/layout.html +107 -0
  162. flask_exts-0.2.0/src/flask_exts/templates/admin/layout.html → flask_exts-0.2.2/src/flask_exts/templates/macro/menu.html +11 -19
  163. flask_exts-0.2.2/src/flask_exts/templates/macro/pagination.html +95 -0
  164. flask_exts-0.2.2/src/flask_exts/templates/macro/row_actions.html +40 -0
  165. flask_exts-0.2.2/src/flask_exts/templates/macro/vendor.html +20 -0
  166. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.2/src/flask_exts/templates/views}/file/form.html +2 -2
  167. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.2/src/flask_exts/templates/views}/file/list.html +11 -14
  168. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.2/src/flask_exts/templates/views}/file/modals/form.html +4 -8
  169. flask_exts-0.2.2/src/flask_exts/templates/views/rediscli/console.html +27 -0
  170. flask_exts-0.2.2/src/flask_exts/templates/views/rediscli/response.html +32 -0
  171. flask_exts-0.2.2/src/flask_exts/templates/views/user/login.html +13 -0
  172. flask_exts-0.2.2/src/flask_exts/templates/views/user/register.html +14 -0
  173. flask_exts-0.2.2/src/flask_exts/templates/widgets/inline_field_list.html +4 -0
  174. flask_exts-0.2.2/src/flask_exts/templates/widgets/inline_form.html +5 -0
  175. flask_exts-0.2.2/src/flask_exts/translations/en/LC_MESSAGES/messages.mo +0 -0
  176. flask_exts-0.2.2/src/flask_exts/translations/en/LC_MESSAGES/messages.po +577 -0
  177. flask_exts-0.2.2/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  178. flask_exts-0.2.2/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.po +564 -0
  179. flask_exts-0.2.2/src/flask_exts/types.py +8 -0
  180. flask_exts-0.2.2/src/flask_exts/utils/__init__.py +7 -0
  181. flask_exts-0.2.2/src/flask_exts/utils/authorize.py +21 -0
  182. flask_exts-0.2.0/src/flask_exts/utils/url.py → flask_exts-0.2.2/src/flask_exts/utils/flask.py +13 -8
  183. flask_exts-0.2.2/src/flask_exts/utils/jwt.py +34 -0
  184. flask_exts-0.2.2/src/flask_exts/utils/request_user.py +64 -0
  185. flask_exts-0.2.2/src/flask_exts/utils/sqla.py +220 -0
  186. flask_exts-0.2.2/src/flask_exts/utils/tools.py +193 -0
  187. flask_exts-0.2.2/src/flask_exts/views/file_view/__init__.py +1 -0
  188. flask_exts-0.2.0/src/flask_exts/admin/file_admin/base_file_admin.py → flask_exts-0.2.2/src/flask_exts/views/file_view/base_file_view.py +16 -18
  189. flask_exts-0.2.0/src/flask_exts/admin/file_admin/local_file_admin.py → flask_exts-0.2.2/src/flask_exts/views/file_view/local_file_view.py +2 -2
  190. {flask_exts-0.2.0/src/flask_exts/admin → flask_exts-0.2.2/src/flask_exts}/views/index_view.py +7 -7
  191. flask_exts-0.2.2/src/flask_exts/views/rediscli_view.py +190 -0
  192. {flask_exts-0.2.0/src/flask_exts/admin → flask_exts-0.2.2/src/flask_exts}/views/user_view.py +22 -33
  193. flask_exts-0.2.2/tests/__init__.py +1 -0
  194. flask_exts-0.2.2/tests/admin/sqla/templates/another_macro.html +3 -0
  195. flask_exts-0.2.2/tests/admin/sqla/templates/macro.html +12 -0
  196. flask_exts-0.2.2/tests/admin/sqla/test_basic.py +2600 -0
  197. flask_exts-0.2.2/tests/admin/sqla/test_form_rules.py +93 -0
  198. flask_exts-0.2.2/tests/admin/sqla/test_inlineform.py +196 -0
  199. flask_exts-0.2.2/tests/admin/sqla/test_multi_pk.py +135 -0
  200. flask_exts-0.2.2/tests/admin/sqla/test_translation.py +65 -0
  201. flask_exts-0.2.2/tests/admin/test_base.py +315 -0
  202. flask_exts-0.2.2/tests/admin/test_model.py +755 -0
  203. flask_exts-0.2.2/tests/conftest.py +40 -0
  204. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/forms/test_fields.py +2 -2
  205. flask_exts-0.2.2/tests/models/__init__.py +6 -0
  206. flask_exts-0.2.2/tests/models/message.py +15 -0
  207. flask_exts-0.2.2/tests/models/model1.py +175 -0
  208. flask_exts-0.2.2/tests/models/multpk.py +7 -0
  209. flask_exts-0.2.2/tests/models/polymorphic.py +35 -0
  210. flask_exts-0.2.2/tests/models/tree.py +7 -0
  211. flask_exts-0.2.2/tests/models/user.py +41 -0
  212. flask_exts-0.2.2/tests/security/authorize/casbin_adapter/rbac_model.conf +14 -0
  213. flask_exts-0.2.2/tests/security/authorize/casbin_adapter/rbac_policy.csv +6 -0
  214. flask_exts-0.2.2/tests/security/authorize/casbin_adapter/test_sqlalchemy_adapter.py +392 -0
  215. flask_exts-0.2.2/tests/security/authorize/casbin_files/authz_policy.csv +11 -0
  216. flask_exts-0.2.2/tests/security/authorize/casbin_files/rbac_model.conf +14 -0
  217. flask_exts-0.2.2/tests/security/authorize/casbin_files/rbac_policy.csv +8 -0
  218. flask_exts-0.2.2/tests/security/authorize/test_casbin_auth.py +146 -0
  219. flask_exts-0.2.2/tests/security/test_principal.py +705 -0
  220. flask_exts-0.2.2/tests/template/__init__.py +0 -0
  221. flask_exts-0.2.2/tests/template/bootstrap4/__init__.py +0 -0
  222. flask_exts-0.2.0/tests/template/bootstrap4/test_render_icon.py → flask_exts-0.2.2/tests/template/bootstrap4/test_render_icon_sprite.py +12 -12
  223. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap4/test_render_pager.py +4 -9
  224. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap4/test_render_pagination.py +4 -8
  225. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap4/test_render_table.py +3 -60
  226. flask_exts-0.2.2/tests/template/bootstrap5/__init__.py +0 -0
  227. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap5/conftest.py +0 -4
  228. flask_exts-0.2.0/tests/template/bootstrap5/test_pagination.py → flask_exts-0.2.2/tests/template/bootstrap5/test_render_pagination.py +4 -8
  229. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/test_babel.py +4 -4
  230. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/test_base.py +5 -3
  231. flask_exts-0.2.2/tests/utils/test_request_user.py +80 -0
  232. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/utils/test_url.py +1 -1
  233. flask_exts-0.2.2/tests/views/files/dummy.txt +0 -0
  234. flask_exts-0.2.2/tests/views/test_file_view.py +221 -0
  235. flask_exts-0.2.2/tests/views/test_rediscli_view.py +12 -0
  236. {flask_exts-0.2.0/tests/admin → flask_exts-0.2.2/tests/views}/test_user_view.py +3 -8
  237. flask_exts-0.2.0/README.rst +0 -27
  238. flask_exts-0.2.0/babel/babel.sh +0 -9
  239. flask_exts-0.2.0/babel/crowdin_pull.sh +0 -30
  240. flask_exts-0.2.0/babel/crowdin_push.sh +0 -3
  241. flask_exts-0.2.0/babel/messages.pot +0 -69
  242. flask_exts-0.2.0/examples/admin/fileadmin/admin_app.py +0 -17
  243. flask_exts-0.2.0/examples/demo/make_app.py +0 -52
  244. flask_exts-0.2.0/examples/demo/models/__init__.py +0 -16
  245. flask_exts-0.2.0/examples/demo/sample.sqlite +0 -0
  246. flask_exts-0.2.0/examples/demo/user_center.py +0 -54
  247. flask_exts-0.2.0/src/flask_exts/__about__.py +0 -1
  248. flask_exts-0.2.0/src/flask_exts/admin/__init__.py +0 -4
  249. flask_exts-0.2.0/src/flask_exts/admin/admin.py +0 -272
  250. flask_exts-0.2.0/src/flask_exts/admin/file_admin/__init__.py +0 -1
  251. flask_exts-0.2.0/src/flask_exts/admin/menu.py +0 -168
  252. flask_exts-0.2.0/src/flask_exts/admin/wraps.py +0 -37
  253. flask_exts-0.2.0/src/flask_exts/forms/__init__.py +0 -1
  254. flask_exts-0.2.0/src/flask_exts/forms/fields/__init__.py +0 -4
  255. flask_exts-0.2.0/src/flask_exts/manager.py +0 -29
  256. flask_exts-0.2.0/src/flask_exts/static/admin/css/submenu.css +0 -18
  257. flask_exts-0.2.0/src/flask_exts/static/admin/js/filters.js +0 -195
  258. flask_exts-0.2.0/src/flask_exts/static/admin/js/form.js +0 -667
  259. flask_exts-0.2.0/src/flask_exts/static/admin/js/helpers.js +0 -12
  260. flask_exts-0.2.0/src/flask_exts/templates/admin/index.html +0 -6
  261. flask_exts-0.2.0/src/flask_exts/templates/admin/lib.html +0 -276
  262. flask_exts-0.2.0/src/flask_exts/templates/admin/user/login.html +0 -19
  263. flask_exts-0.2.0/src/flask_exts/templates/admin/user/register.html +0 -20
  264. flask_exts-0.2.0/src/flask_exts/templates/macro/form.html +0 -16
  265. flask_exts-0.2.0/src/flask_exts/templates/macro/static.html +0 -12
  266. flask_exts-0.2.0/src/flask_exts/translations/en/LC_MESSAGES/messages.mo +0 -0
  267. flask_exts-0.2.0/src/flask_exts/translations/en/LC_MESSAGES/messages.po +0 -70
  268. flask_exts-0.2.0/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  269. flask_exts-0.2.0/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.po +0 -66
  270. flask_exts-0.2.0/src/flask_exts/users/__init__.py +0 -15
  271. flask_exts-0.2.0/src/flask_exts/users/usercenter.py +0 -19
  272. flask_exts-0.2.0/src/flask_exts/utils/__init__.py +0 -9
  273. flask_exts-0.2.0/src/flask_exts/utils/g.py +0 -16
  274. flask_exts-0.2.0/tests/admin/fileadmin/test_fileadmin.py +0 -238
  275. flask_exts-0.2.0/tests/admin/test_base.py +0 -332
  276. flask_exts-0.2.0/tests/conftest.py +0 -25
  277. flask_exts-0.2.0/tests/template/bootstrap4/conftest.py +0 -17
  278. flask_exts-0.2.0/tests/translations/messages.pot +0 -23
  279. flask_exts-0.2.0/tests/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  280. {flask_exts-0.2.0 → flask_exts-0.2.2}/.github/workflows/release.yml +0 -0
  281. {flask_exts-0.2.0 → flask_exts-0.2.2}/.readthedocs.yaml +0 -0
  282. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/Makefile +0 -0
  283. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/_static/logo.png +0 -0
  284. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/changes.rst +0 -0
  285. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/develop.rst +0 -0
  286. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/examples.rst +0 -0
  287. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/make.bat +0 -0
  288. {flask_exts-0.2.0 → flask_exts-0.2.2}/docs/requirements.txt +0 -0
  289. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/static/favicon.ico +0 -0
  290. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/templates/bootswatch.html +0 -0
  291. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/templates/flash.html +0 -0
  292. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/templates/form.html +0 -0
  293. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/templates/index.html +0 -0
  294. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/templates/mybase.html +0 -0
  295. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/templates/nav.html +0 -0
  296. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap4/templates/table.html +0 -0
  297. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/static/favicon.ico +0 -0
  298. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/templates/bootswatch.html +0 -0
  299. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/templates/flash.html +0 -0
  300. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/templates/form.html +0 -0
  301. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/templates/index.html +0 -0
  302. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/templates/mybase.html +0 -0
  303. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/templates/nav.html +0 -0
  304. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/bootstrap5/templates/table.html +0 -0
  305. {flask_exts-0.2.0 → flask_exts-0.2.2}/examples/demo/__init__.py +0 -0
  306. {flask_exts-0.2.0/examples/admin → flask_exts-0.2.2/examples}/fileadmin/__init__.py +0 -0
  307. {flask_exts-0.2.0/examples/admin → flask_exts-0.2.2/examples}/fileadmin/tmp/bbb/a.txt +0 -0
  308. {flask_exts-0.2.0 → flask_exts-0.2.2}/requirements/build.in +0 -0
  309. {flask_exts-0.2.0 → flask_exts-0.2.2}/requirements/test.in +0 -0
  310. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/__init__.py +0 -0
  311. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/babel/__init__.py +0 -0
  312. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/babel/selector.py +0 -0
  313. {flask_exts-0.2.0/src/flask_exts/forms/widgets → flask_exts-0.2.2/src/flask_exts/datastore}/__init__.py +0 -0
  314. {flask_exts-0.2.0/src/flask_exts/translations → flask_exts-0.2.2/src/flask_exts/datastore/sqla/models}/__init__.py +0 -0
  315. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/fields/file.py +0 -0
  316. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/fields/json.py +0 -0
  317. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/fields/recaptcha.py +0 -0
  318. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/fields/switch.py +0 -0
  319. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/fields/taglist.py +0 -0
  320. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/form/__init__.py +0 -0
  321. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/form/base_form.py +0 -0
  322. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/form/csrf.py +0 -0
  323. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/form/flask_form.py +0 -0
  324. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/form/session_csrf.py +0 -0
  325. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/validators/__init__.py +0 -0
  326. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/validators/field_list.py +0 -0
  327. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/validators/file.py +0 -0
  328. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/validators/recaptcha.py +0 -0
  329. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/widgets/datetime.py +0 -0
  330. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/widgets/file.py +0 -0
  331. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/forms/widgets/recaptcha.py +0 -0
  332. {flask_exts-0.2.0/src/flask_exts/users → flask_exts-0.2.2/src/flask_exts/security}/forms/__init__.py +0 -0
  333. {flask_exts-0.2.0/tests/admin → flask_exts-0.2.2/src/flask_exts/security/usercenter}/__init__.py +0 -0
  334. {flask_exts-0.2.0/tests → flask_exts-0.2.2/src/flask_exts/security/utils}/__init__.py +0 -0
  335. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.2/src/flask_exts/static}/css/admin.css +0 -0
  336. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.2/src/flask_exts/static}/css/rediscli.css +0 -0
  337. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.2/src/flask_exts/static}/js/actions.js +0 -0
  338. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.2/src/flask_exts/static}/js/details_filter.js +0 -0
  339. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.2/src/flask_exts/static}/js/rediscli.js +0 -0
  340. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/static/logo.png +0 -0
  341. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/static/vendor/bootstrap-icons/bootstrap-icons.svg +0 -0
  342. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/static/vendor/bootstrap4/bootstrap.bundle.min.js +0 -0
  343. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/static/vendor/bootstrap4/bootstrap.min.css +0 -0
  344. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/static/vendor/bootstrap5/bootstrap.bundle.min.js +0 -0
  345. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/static/vendor/bootstrap5/bootstrap.min.css +0 -0
  346. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/static/vendor/jquery/jquery.min.js +0 -0
  347. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/admin/master.html +0 -0
  348. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/base.html +0 -0
  349. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/bootstrap4/form.html +0 -0
  350. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/bootstrap4/message.html +0 -0
  351. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/bootstrap5/form.html +0 -0
  352. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/bootstrap5/message.html +0 -0
  353. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/layout.html +0 -0
  354. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/macro/message.html +0 -0
  355. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/macro/nav.html +0 -0
  356. {flask_exts-0.2.0 → flask_exts-0.2.2}/src/flask_exts/templates/macro/table.html +0 -0
  357. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.2/src/flask_exts/templates/views}/user/index.html +0 -0
  358. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.2/src/flask_exts/templates/views}/user/list.html +0 -0
  359. {flask_exts-0.2.0/tests/admin/fileadmin → flask_exts-0.2.2/src/flask_exts/translations}/__init__.py +0 -0
  360. /flask_exts-0.2.0/tests/admin/fileadmin/files/dummy.txt → /flask_exts-0.2.2/src/flask_exts/utils/url.py +0 -0
  361. {flask_exts-0.2.0/src/flask_exts/admin/file_admin → flask_exts-0.2.2/src/flask_exts/views/file_view}/local_file_storage.py +0 -0
  362. {flask_exts-0.2.0/tests/template → flask_exts-0.2.2/tests/admin}/__init__.py +0 -0
  363. {flask_exts-0.2.0/tests/template/bootstrap4 → flask_exts-0.2.2/tests/admin/sqla}/__init__.py +0 -0
  364. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/data/copyleft.gif +0 -0
  365. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/data/copyleft.jpeg +0 -0
  366. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/data/copyleft.jpg +0 -0
  367. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/data/copyleft.png +0 -0
  368. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/data/copyleft.tiff +0 -0
  369. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/forms/test_filefield.py +0 -0
  370. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/forms/test_form.py +0 -0
  371. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/forms/test_uploadfile.py +0 -0
  372. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/funcs.py +0 -0
  373. {flask_exts-0.2.0/tests/template/bootstrap5 → flask_exts-0.2.2/tests/security/authorize}/__init__.py +0 -0
  374. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap4/test_render_field.py +0 -0
  375. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap4/test_render_form.py +0 -0
  376. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap4/test_render_form_row.py +0 -0
  377. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap4/test_render_hidden_errors.py +0 -0
  378. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap4/test_render_messages.py +0 -0
  379. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap5/test_base.py +0 -0
  380. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap5/test_render_form.py +0 -0
  381. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap5/test_render_form_row.py +0 -0
  382. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/bootstrap5/test_render_messages.py +0 -0
  383. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/conftest.py +0 -0
  384. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/macros/test_render_breadcrumb_item.py +0 -0
  385. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/macros/test_render_nav_item.py +0 -0
  386. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/template/test_base.py +0 -0
  387. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/templates/method.html +0 -0
  388. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/templates/mock.html +0 -0
  389. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/translations/en/LC_MESSAGES/messages.mo +0 -0
  390. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/translations/en/LC_MESSAGES/messages.po +0 -0
  391. {flask_exts-0.2.0 → flask_exts-0.2.2}/tests/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
@@ -29,3 +29,6 @@ htmlcov/
29
29
 
30
30
  # Sphinx documentation
31
31
  docs/_build/
32
+
33
+ # sqlite db
34
+ *.sqlite
@@ -1,3 +1,23 @@
1
+ v0.2.2
2
+ ------
3
+
4
+ Released 2025-04-09
5
+
6
+ - fix datetimepicker
7
+ - set session = db.session as default if ModelView of sqla init session is None
8
+ - set session = db.session as default if QueryAjaxModelLoader init session is None
9
+ - fix select.ajax for select2@4.1.0
10
+ - fix select in modal
11
+ - add casbin
12
+ - add module: security
13
+
14
+ v0.2.1
15
+ ------
16
+
17
+ Released 2025-02-15
18
+
19
+ - add admin.sqla
20
+
1
21
  v0.2.0
2
22
  ------
3
23
 
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024-present huadong <david.dong.hua@gmail.com>
3
+ Copyright (c) 2024-present David Hua <david.dong.hua@gmail.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Flask-Exts
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Flask extensions with admin, SQLAlchemy, babel, forms, fields, widgets, and so on.
5
5
  Project-URL: Documentation, https://flask-exts.readthedocs.io
6
6
  Project-URL: Source, https://github.com/ojso/flask-exts
7
7
  Project-URL: Homepage, https://github.com/ojso/flask-exts
8
8
  Project-URL: Issues, https://github.com/ojso/flask-exts/issues
9
- Author-email: huadong <david.dong.hua@gmail.com>
9
+ Author-email: David Hua <david.dong.hua@gmail.com>
10
10
  License: MIT License
11
11
 
12
- Copyright (c) 2024-present huadong <david.dong.hua@gmail.com>
12
+ Copyright (c) 2024-present David Hua <david.dong.hua@gmail.com>
13
13
 
14
14
  Permission is hereby granted, free of charge, to any person obtaining a copy
15
15
  of this software and associated documentation files (the "Software"), to deal
@@ -41,11 +41,17 @@ Classifier: Programming Language :: Python :: 3.10
41
41
  Classifier: Programming Language :: Python :: 3.11
42
42
  Classifier: Topic :: Software Development :: Build Tools
43
43
  Requires-Python: >=3.10
44
+ Requires-Dist: casbin>=1.0
44
45
  Requires-Dist: flask-babel>=4.0
45
46
  Requires-Dist: flask-login>=0.6
46
47
  Requires-Dist: flask-sqlalchemy>=3.0
47
48
  Requires-Dist: flask>=3.0
49
+ Requires-Dist: pyjwt>=2.0
50
+ Requires-Dist: tablib>=3.0
51
+ Requires-Dist: webauthn>=2.0
48
52
  Requires-Dist: wtforms>=3.0
53
+ Provides-Extra: rediscli
54
+ Requires-Dist: redis>=4.0.0; extra == 'rediscli'
49
55
  Description-Content-Type: text/x-rst
50
56
 
51
57
  Flask Exts
@@ -53,12 +59,10 @@ Flask Exts
53
59
 
54
60
  Flask-Exts is mainly inspired by:
55
61
 
56
- - `WTForms <https://github.com/wtforms/wtforms/>`_
57
- - `Flask-WTF <https://github.com/wtforms/flask-wtf/>`_
58
- - `Bootstrap-Flask <https://github.com/helloflask/bootstrap-flask>`_
59
- - `Flask-Admin <https://github.com/flask-admin/flask-admin/>`_
62
+ - `Flask-Admin <https://github.com/pallets-eco/flask-admin/>`_
63
+ - `Flask-Security <https://github.com/pallets-eco/flask-security/>`_
60
64
 
61
- Flask-Exts is part rewrited from above and well tested.
65
+ Flask-Exts is partially rewrited from above and well tested.
62
66
 
63
67
  License
64
68
  -------
@@ -75,3 +79,20 @@ Install and update using pip:
75
79
 
76
80
  $ pip install -U Flask-Exts
77
81
 
82
+ Examples
83
+ ----------
84
+
85
+ .. code-block:: python
86
+
87
+ from flask import Flask
88
+ from flask_exts import Manager
89
+
90
+ app = Flask(__name__)
91
+ app.config["SECRET_KEY"] = "dev"
92
+ # Manager init
93
+ manager = Manager()
94
+ manager.init_app(app)
95
+
96
+ if __name__ == "__main__":
97
+ app.run(debug=True)
98
+
@@ -0,0 +1,42 @@
1
+ Flask Exts
2
+ ==========
3
+
4
+ Flask-Exts is mainly inspired by:
5
+
6
+ - `Flask-Admin <https://github.com/pallets-eco/flask-admin/>`_
7
+ - `Flask-Security <https://github.com/pallets-eco/flask-security/>`_
8
+
9
+ Flask-Exts is partially rewrited from above and well tested.
10
+
11
+ License
12
+ -------
13
+
14
+ Flask-Exts is distributed under the terms of the `MIT <https://opensource.org/licenses/MIT>`_.
15
+
16
+
17
+ Installation
18
+ ------------
19
+
20
+ Install and update using pip:
21
+
22
+ .. code-block:: console
23
+
24
+ $ pip install -U Flask-Exts
25
+
26
+ Examples
27
+ ----------
28
+
29
+ .. code-block:: python
30
+
31
+ from flask import Flask
32
+ from flask_exts import Manager
33
+
34
+ app = Flask(__name__)
35
+ app.config["SECRET_KEY"] = "dev"
36
+ # Manager init
37
+ manager = Manager()
38
+ manager.init_app(app)
39
+
40
+ if __name__ == "__main__":
41
+ app.run(debug=True)
42
+
@@ -1,5 +1,6 @@
1
1
  # Python
2
2
  [python: **.py]
3
+ encoding = utf-8
3
4
  # Jinja2
4
5
  [jinja2: **/templates/**.html]
5
6
  encoding = utf-8
@@ -0,0 +1,9 @@
1
+ # extract messages from source files and generate a POT file
2
+ pybabel extract -F babel/babel.cfg -k lazy_gettext -o babel/messages.pot --project Flask-Exts src/flask_exts/ tests/
3
+
4
+ # update PO files from a POT file
5
+ pybabel update -i babel/messages.pot -d src/flask_exts/translations -D messages
6
+
7
+ # compile message catalogs to MO files
8
+ pybabel compile -f -D messages -d src/flask_exts/translations/
9
+