Flask-Exts 0.2.0__tar.gz → 0.2.1__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 (336) hide show
  1. {flask_exts-0.2.0 → flask_exts-0.2.1}/.gitignore +3 -0
  2. {flask_exts-0.2.0 → flask_exts-0.2.1}/CHANGES.rst +7 -0
  3. {flask_exts-0.2.0 → flask_exts-0.2.1}/LICENSE.rst +1 -1
  4. {flask_exts-0.2.0 → flask_exts-0.2.1}/PKG-INFO +23 -5
  5. {flask_exts-0.2.0 → flask_exts-0.2.1}/README.rst +17 -2
  6. {flask_exts-0.2.0 → flask_exts-0.2.1}/babel/babel.cfg +1 -0
  7. flask_exts-0.2.1/babel/babel.sh +9 -0
  8. flask_exts-0.2.1/babel/messages.pot +567 -0
  9. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/conf.py +2 -2
  10. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/configure.rst +2 -0
  11. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/README.rst +22 -5
  12. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/app.py +1 -0
  13. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/templates/icon.html +9 -3
  14. {flask_exts-0.2.0/examples/bootstrap5 → flask_exts-0.2.1/examples/bootstrap4}/templates/icons.html +2050 -2050
  15. {flask_exts-0.2.0/examples/bootstrap5 → flask_exts-0.2.1/examples/bootstrap4}/templates/pagination.html +1 -1
  16. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/app.py +1 -1
  17. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/templates/icon.html +1 -1
  18. {flask_exts-0.2.0/examples/bootstrap4 → flask_exts-0.2.1/examples/bootstrap5}/templates/icons.html +1 -1
  19. {flask_exts-0.2.0/examples/bootstrap4 → flask_exts-0.2.1/examples/bootstrap5}/templates/pagination.html +1 -1
  20. flask_exts-0.2.1/examples/demo/admin_views.py +26 -0
  21. flask_exts-0.2.1/examples/demo/build_sample.py +219 -0
  22. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/demo/make_app.py +15 -14
  23. flask_exts-0.2.1/examples/demo/models/__init__.py +24 -0
  24. flask_exts-0.2.1/examples/demo/models/author.py +73 -0
  25. flask_exts-0.2.1/examples/demo/models/keyword.py +15 -0
  26. flask_exts-0.2.1/examples/demo/models/post.py +26 -0
  27. flask_exts-0.2.1/examples/demo/models/post_tag.py +11 -0
  28. flask_exts-0.2.1/examples/demo/models/tag.py +11 -0
  29. flask_exts-0.2.1/examples/demo/models/tree.py +18 -0
  30. flask_exts-0.2.1/examples/demo/models/user.py +38 -0
  31. flask_exts-0.2.1/examples/demo/models/user_keyword.py +26 -0
  32. flask_exts-0.2.1/examples/demo/templates/admin/index.html +4 -0
  33. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/demo/templates/my/index.html +1 -0
  34. flask_exts-0.2.1/examples/demo/templates/tree_list.html +14 -0
  35. flask_exts-0.2.1/examples/demo/views/author_view.py +136 -0
  36. flask_exts-0.2.1/examples/demo/views/keyword_view.py +10 -0
  37. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/demo/views/my_view.py +1 -1
  38. flask_exts-0.2.1/examples/demo/views/post_view.py +87 -0
  39. flask_exts-0.2.1/examples/demo/views/tag_view.py +5 -0
  40. flask_exts-0.2.1/examples/demo/views/tree_view.py +20 -0
  41. flask_exts-0.2.1/examples/demo/views/user_view.py +14 -0
  42. flask_exts-0.2.1/examples/fileadmin/file_view.py +12 -0
  43. {flask_exts-0.2.0/examples/admin → flask_exts-0.2.1/examples}/fileadmin/make_app.py +4 -2
  44. flask_exts-0.2.1/examples/multiple_admins/app.py +34 -0
  45. flask_exts-0.2.1/examples/multiple_admins/templates/admin/index.html +7 -0
  46. flask_exts-0.2.1/examples/multiple_admins/templates/first.html +4 -0
  47. flask_exts-0.2.1/examples/multiple_admins/templates/second.html +4 -0
  48. flask_exts-0.2.1/examples/rediscli.py +17 -0
  49. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/simple.py +0 -4
  50. flask_exts-0.2.1/examples/sqla-custom-inline-forms/__init__.py +1 -0
  51. flask_exts-0.2.1/examples/sqla-custom-inline-forms/data.py +23 -0
  52. flask_exts-0.2.1/examples/sqla-custom-inline-forms/make_app.py +83 -0
  53. {flask_exts-0.2.0/examples/demo → flask_exts-0.2.1/examples/sqla-custom-inline-forms}/models/__init__.py +1 -3
  54. flask_exts-0.2.1/examples/sqla-custom-inline-forms/models/model.py +42 -0
  55. flask_exts-0.2.1/examples/sqla-custom-inline-forms/templates/admin/admin.html +5 -0
  56. flask_exts-0.2.1/examples/sqla-custom-inline-forms/templates/field_list.html +13 -0
  57. flask_exts-0.2.1/examples/sqla-custom-inline-forms/templates/locations.html +14 -0
  58. flask_exts-0.2.1/examples/sqla-custom-inline-forms/views/image_view.py +78 -0
  59. {flask_exts-0.2.0 → flask_exts-0.2.1}/pyproject.toml +5 -1
  60. flask_exts-0.2.1/src/flask_exts/__about__.py +1 -0
  61. flask_exts-0.2.1/src/flask_exts/_types.py +8 -0
  62. flask_exts-0.2.1/src/flask_exts/admin/__init__.py +3 -0
  63. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/admin/actions.py +0 -3
  64. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/admin/admin.py +2 -11
  65. flask_exts-0.2.1/src/flask_exts/admin/model/__init__.py +2 -0
  66. flask_exts-0.2.1/src/flask_exts/admin/model/ajax.py +46 -0
  67. flask_exts-0.2.1/src/flask_exts/admin/model/filters.py +337 -0
  68. flask_exts-0.2.1/src/flask_exts/admin/model/form.py +251 -0
  69. flask_exts-0.2.1/src/flask_exts/admin/model/typefmt.py +92 -0
  70. flask_exts-0.2.1/src/flask_exts/admin/model/view.py +2512 -0
  71. flask_exts-0.2.1/src/flask_exts/admin/row_action.py +67 -0
  72. flask_exts-0.2.1/src/flask_exts/admin/sqla/__init__.py +1 -0
  73. flask_exts-0.2.1/src/flask_exts/admin/sqla/ajax.py +104 -0
  74. flask_exts-0.2.1/src/flask_exts/admin/sqla/filters.py +625 -0
  75. flask_exts-0.2.1/src/flask_exts/admin/sqla/form.py +913 -0
  76. flask_exts-0.2.1/src/flask_exts/admin/sqla/typefmt.py +29 -0
  77. flask_exts-0.2.1/src/flask_exts/admin/sqla/view.py +1262 -0
  78. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/admin/view.py +26 -12
  79. flask_exts-0.2.1/src/flask_exts/forms/__init__.py +3 -0
  80. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/fields/__init__.py +2 -1
  81. flask_exts-0.2.1/src/flask_exts/forms/fields/ajax_select.py +109 -0
  82. flask_exts-0.2.1/src/flask_exts/forms/fields/inline.py +123 -0
  83. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/fields/select.py +7 -7
  84. flask_exts-0.2.1/src/flask_exts/forms/fields/sqla.py +407 -0
  85. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/form/meta.py +2 -2
  86. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/rules.py +121 -280
  87. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/utils.py +26 -1
  88. flask_exts-0.2.1/src/flask_exts/forms/validators/sqla.py +84 -0
  89. flask_exts-0.2.1/src/flask_exts/forms/widgets/__init__.py +3 -0
  90. flask_exts-0.2.1/src/flask_exts/forms/widgets/checkbox.py +32 -0
  91. flask_exts-0.2.1/src/flask_exts/forms/widgets/inline.py +15 -0
  92. flask_exts-0.2.1/src/flask_exts/forms/widgets/render_template.py +25 -0
  93. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/widgets/select.py +9 -5
  94. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/widgets/xeditable.py +10 -3
  95. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/manager.py +10 -0
  96. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/js/form.js +18 -20
  97. flask_exts-0.2.1/src/flask_exts/static/vendor/bootstrap-icons/font/bootstrap-icons.css +2078 -0
  98. flask_exts-0.2.1/src/flask_exts/static/vendor/bootstrap-icons/font/bootstrap-icons.json +2052 -0
  99. flask_exts-0.2.1/src/flask_exts/static/vendor/bootstrap-icons/font/bootstrap-icons.min.css +5 -0
  100. flask_exts-0.2.1/src/flask_exts/static/vendor/bootstrap-icons/font/bootstrap-icons.scss +2090 -0
  101. flask_exts-0.2.1/src/flask_exts/static/vendor/bootstrap-icons/font/fonts/bootstrap-icons.woff +0 -0
  102. flask_exts-0.2.1/src/flask_exts/static/vendor/bootstrap-icons/font/fonts/bootstrap-icons.woff2 +0 -0
  103. flask_exts-0.2.1/src/flask_exts/static/vendor/daterangepicker/daterangepicker.css +410 -0
  104. flask_exts-0.2.1/src/flask_exts/static/vendor/daterangepicker/daterangepicker.js +1578 -0
  105. flask_exts-0.2.1/src/flask_exts/static/vendor/moment.min.js +1 -0
  106. flask_exts-0.2.1/src/flask_exts/static/vendor/select2/select2.min.css +1 -0
  107. flask_exts-0.2.1/src/flask_exts/static/vendor/select2/select2.min.js +2 -0
  108. flask_exts-0.2.1/src/flask_exts/static/vendor/x-editable/css/bootstrap-editable.css +674 -0
  109. flask_exts-0.2.1/src/flask_exts/static/vendor/x-editable/img/clear.png +0 -0
  110. flask_exts-0.2.1/src/flask_exts/static/vendor/x-editable/img/loading.gif +0 -0
  111. flask_exts-0.2.1/src/flask_exts/static/vendor/x-editable/js/bootstrap-editable.min.js +2 -0
  112. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/template/__init__.py +2 -0
  113. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/template/theme.py +10 -4
  114. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/template/utils.py +4 -14
  115. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/admin/base.html +5 -7
  116. flask_exts-0.2.1/src/flask_exts/templates/admin/model/create.html +31 -0
  117. flask_exts-0.2.1/src/flask_exts/templates/admin/model/details.html +51 -0
  118. flask_exts-0.2.1/src/flask_exts/templates/admin/model/edit.html +41 -0
  119. flask_exts-0.2.1/src/flask_exts/templates/admin/model/list.html +199 -0
  120. flask_exts-0.2.1/src/flask_exts/templates/admin/model/modals/create.html +15 -0
  121. flask_exts-0.2.1/src/flask_exts/templates/admin/model/modals/details.html +37 -0
  122. flask_exts-0.2.1/src/flask_exts/templates/admin/model/modals/edit.html +19 -0
  123. {flask_exts-0.2.0/src/flask_exts/templates/macro → flask_exts-0.2.1/src/flask_exts/templates/bootstrap4}/pagination.html +1 -0
  124. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.1/src/flask_exts/templates/macro}/actions.html +14 -19
  125. flask_exts-0.2.1/src/flask_exts/templates/macro/form.html +168 -0
  126. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/macro/icon.html +11 -1
  127. flask_exts-0.2.1/src/flask_exts/templates/macro/inline.html +45 -0
  128. flask_exts-0.2.1/src/flask_exts/templates/macro/layout.html +109 -0
  129. flask_exts-0.2.0/src/flask_exts/templates/admin/layout.html → flask_exts-0.2.1/src/flask_exts/templates/macro/menu.html +2 -2
  130. flask_exts-0.2.1/src/flask_exts/templates/macro/pagination.html +95 -0
  131. flask_exts-0.2.1/src/flask_exts/templates/macro/row_actions.html +40 -0
  132. flask_exts-0.2.1/src/flask_exts/templates/macro/vendor.html +20 -0
  133. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.1/src/flask_exts/templates/views}/file/form.html +2 -2
  134. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.1/src/flask_exts/templates/views}/file/list.html +7 -5
  135. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.1/src/flask_exts/templates/views}/file/modals/form.html +4 -8
  136. flask_exts-0.2.1/src/flask_exts/templates/views/rediscli/console.html +27 -0
  137. flask_exts-0.2.1/src/flask_exts/templates/views/rediscli/response.html +32 -0
  138. flask_exts-0.2.1/src/flask_exts/templates/views/user/login.html +13 -0
  139. flask_exts-0.2.1/src/flask_exts/templates/views/user/register.html +14 -0
  140. flask_exts-0.2.1/src/flask_exts/templates/widgets/inline_field_list.html +4 -0
  141. flask_exts-0.2.1/src/flask_exts/templates/widgets/inline_form.html +5 -0
  142. flask_exts-0.2.1/src/flask_exts/translations/en/LC_MESSAGES/messages.mo +0 -0
  143. flask_exts-0.2.1/src/flask_exts/translations/en/LC_MESSAGES/messages.po +577 -0
  144. flask_exts-0.2.1/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  145. flask_exts-0.2.1/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.po +564 -0
  146. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/users/forms/mixins.py +1 -2
  147. flask_exts-0.2.1/src/flask_exts/utils/__init__.py +7 -0
  148. flask_exts-0.2.0/src/flask_exts/utils/url.py → flask_exts-0.2.1/src/flask_exts/utils/flask.py +13 -8
  149. flask_exts-0.2.1/src/flask_exts/utils/sqla.py +225 -0
  150. flask_exts-0.2.1/src/flask_exts/utils/tools.py +193 -0
  151. flask_exts-0.2.1/src/flask_exts/views/file_view/__init__.py +1 -0
  152. flask_exts-0.2.0/src/flask_exts/admin/file_admin/base_file_admin.py → flask_exts-0.2.1/src/flask_exts/views/file_view/base_file_view.py +14 -14
  153. flask_exts-0.2.0/src/flask_exts/admin/file_admin/local_file_admin.py → flask_exts-0.2.1/src/flask_exts/views/file_view/local_file_view.py +2 -2
  154. {flask_exts-0.2.0/src/flask_exts/admin → flask_exts-0.2.1/src/flask_exts}/views/index_view.py +2 -2
  155. flask_exts-0.2.1/src/flask_exts/views/rediscli_view.py +191 -0
  156. {flask_exts-0.2.0/src/flask_exts/admin → flask_exts-0.2.1/src/flask_exts}/views/user_view.py +8 -8
  157. flask_exts-0.2.1/tests/admin/sqla/conftest.py +20 -0
  158. flask_exts-0.2.1/tests/admin/sqla/templates/another_macro.html +3 -0
  159. flask_exts-0.2.1/tests/admin/sqla/templates/macro.html +12 -0
  160. flask_exts-0.2.1/tests/admin/sqla/test_basic.py +2866 -0
  161. flask_exts-0.2.1/tests/admin/sqla/test_form_rules.py +96 -0
  162. flask_exts-0.2.1/tests/admin/sqla/test_inlineform.py +289 -0
  163. flask_exts-0.2.1/tests/admin/sqla/test_multi_pk.py +173 -0
  164. flask_exts-0.2.1/tests/admin/sqla/test_translation.py +65 -0
  165. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/admin/test_base.py +71 -155
  166. flask_exts-0.2.1/tests/admin/test_model.py +756 -0
  167. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/conftest.py +10 -2
  168. flask_exts-0.2.0/tests/template/bootstrap4/test_render_icon.py → flask_exts-0.2.1/tests/template/bootstrap4/test_render_icon_sprite.py +12 -12
  169. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/test_render_pager.py +1 -1
  170. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/test_render_pagination.py +1 -1
  171. flask_exts-0.2.0/tests/template/bootstrap5/test_pagination.py → flask_exts-0.2.1/tests/template/bootstrap5/test_render_pagination.py +1 -1
  172. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/test_babel.py +4 -4
  173. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/test_base.py +1 -0
  174. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/utils/test_url.py +1 -1
  175. flask_exts-0.2.1/tests/views/test_file_view.py +221 -0
  176. flask_exts-0.2.1/tests/views/test_rediscli_view.py +12 -0
  177. {flask_exts-0.2.0/tests/admin → flask_exts-0.2.1/tests/views}/test_user_view.py +0 -7
  178. flask_exts-0.2.0/babel/babel.sh +0 -9
  179. flask_exts-0.2.0/babel/crowdin_pull.sh +0 -30
  180. flask_exts-0.2.0/babel/crowdin_push.sh +0 -3
  181. flask_exts-0.2.0/babel/messages.pot +0 -69
  182. flask_exts-0.2.0/examples/admin/fileadmin/admin_app.py +0 -17
  183. flask_exts-0.2.0/examples/demo/models/user.py +0 -16
  184. flask_exts-0.2.0/examples/demo/sample.sqlite +0 -0
  185. flask_exts-0.2.0/src/flask_exts/__about__.py +0 -1
  186. flask_exts-0.2.0/src/flask_exts/admin/__init__.py +0 -4
  187. flask_exts-0.2.0/src/flask_exts/admin/file_admin/__init__.py +0 -1
  188. flask_exts-0.2.0/src/flask_exts/admin/wraps.py +0 -37
  189. flask_exts-0.2.0/src/flask_exts/forms/__init__.py +0 -1
  190. flask_exts-0.2.0/src/flask_exts/static/admin/css/submenu.css +0 -18
  191. flask_exts-0.2.0/src/flask_exts/static/admin/js/bs4_filters.js +0 -202
  192. flask_exts-0.2.0/src/flask_exts/templates/admin/lib.html +0 -276
  193. flask_exts-0.2.0/src/flask_exts/templates/admin/user/login.html +0 -19
  194. flask_exts-0.2.0/src/flask_exts/templates/admin/user/register.html +0 -20
  195. flask_exts-0.2.0/src/flask_exts/templates/macro/form.html +0 -16
  196. flask_exts-0.2.0/src/flask_exts/templates/macro/static.html +0 -12
  197. flask_exts-0.2.0/src/flask_exts/translations/en/LC_MESSAGES/messages.mo +0 -0
  198. flask_exts-0.2.0/src/flask_exts/translations/en/LC_MESSAGES/messages.po +0 -70
  199. flask_exts-0.2.0/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  200. flask_exts-0.2.0/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.po +0 -66
  201. flask_exts-0.2.0/src/flask_exts/utils/__init__.py +0 -9
  202. flask_exts-0.2.0/src/flask_exts/utils/g.py +0 -16
  203. flask_exts-0.2.0/tests/admin/fileadmin/test_fileadmin.py +0 -238
  204. flask_exts-0.2.0/tests/translations/messages.pot +0 -23
  205. flask_exts-0.2.0/tests/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  206. {flask_exts-0.2.0 → flask_exts-0.2.1}/.github/workflows/release.yml +0 -0
  207. {flask_exts-0.2.0 → flask_exts-0.2.1}/.readthedocs.yaml +0 -0
  208. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/Makefile +0 -0
  209. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/_static/logo.png +0 -0
  210. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/changes.rst +0 -0
  211. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/develop.rst +0 -0
  212. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/examples.rst +0 -0
  213. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/index.rst +0 -0
  214. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/make.bat +0 -0
  215. {flask_exts-0.2.0 → flask_exts-0.2.1}/docs/requirements.txt +0 -0
  216. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/static/favicon.ico +0 -0
  217. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/templates/bootswatch.html +0 -0
  218. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/templates/flash.html +0 -0
  219. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/templates/form.html +0 -0
  220. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/templates/index.html +0 -0
  221. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/templates/mybase.html +0 -0
  222. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/templates/nav.html +0 -0
  223. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap4/templates/table.html +0 -0
  224. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/static/favicon.ico +0 -0
  225. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/templates/bootswatch.html +0 -0
  226. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/templates/flash.html +0 -0
  227. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/templates/form.html +0 -0
  228. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/templates/index.html +0 -0
  229. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/templates/mybase.html +0 -0
  230. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/templates/nav.html +0 -0
  231. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/bootstrap5/templates/table.html +0 -0
  232. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/demo/__init__.py +0 -0
  233. {flask_exts-0.2.0 → flask_exts-0.2.1}/examples/demo/user_center.py +0 -0
  234. {flask_exts-0.2.0/examples/admin → flask_exts-0.2.1/examples}/fileadmin/__init__.py +0 -0
  235. {flask_exts-0.2.0/examples/admin → flask_exts-0.2.1/examples}/fileadmin/tmp/bbb/a.txt +0 -0
  236. {flask_exts-0.2.0 → flask_exts-0.2.1}/requirements/build.in +0 -0
  237. {flask_exts-0.2.0 → flask_exts-0.2.1}/requirements/test.in +0 -0
  238. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/__init__.py +0 -0
  239. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/admin/menu.py +0 -0
  240. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/babel/__init__.py +0 -0
  241. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/babel/selector.py +0 -0
  242. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/fields/datetime.py +0 -0
  243. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/fields/file.py +0 -0
  244. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/fields/json.py +0 -0
  245. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/fields/recaptcha.py +0 -0
  246. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/fields/switch.py +0 -0
  247. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/fields/taglist.py +0 -0
  248. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/form/__init__.py +0 -0
  249. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/form/base_form.py +0 -0
  250. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/form/csrf.py +0 -0
  251. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/form/flask_form.py +0 -0
  252. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/form/session_csrf.py +0 -0
  253. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/validators/__init__.py +0 -0
  254. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/validators/field_list.py +0 -0
  255. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/validators/file.py +0 -0
  256. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/validators/recaptcha.py +0 -0
  257. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/widgets/datetime.py +0 -0
  258. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/widgets/file.py +0 -0
  259. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/forms/widgets/recaptcha.py +0 -0
  260. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/css/admin.css +0 -0
  261. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/css/rediscli.css +0 -0
  262. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/js/actions.js +0 -0
  263. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/js/details_filter.js +0 -0
  264. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/js/filters.js +0 -0
  265. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/js/helpers.js +0 -0
  266. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/js/modal.js +0 -0
  267. {flask_exts-0.2.0/src/flask_exts/static/admin → flask_exts-0.2.1/src/flask_exts/static}/js/rediscli.js +0 -0
  268. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/static/logo.png +0 -0
  269. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/static/vendor/bootstrap-icons/bootstrap-icons.svg +0 -0
  270. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/static/vendor/bootstrap4/bootstrap.bundle.min.js +0 -0
  271. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/static/vendor/bootstrap4/bootstrap.min.css +0 -0
  272. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/static/vendor/bootstrap5/bootstrap.bundle.min.js +0 -0
  273. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/static/vendor/bootstrap5/bootstrap.min.css +0 -0
  274. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/static/vendor/jquery/jquery.min.js +0 -0
  275. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/admin/admin.html +0 -0
  276. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/admin/index.html +0 -0
  277. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/admin/master.html +0 -0
  278. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/base.html +0 -0
  279. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/bootstrap4/form.html +0 -0
  280. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/bootstrap4/message.html +0 -0
  281. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/bootstrap5/form.html +0 -0
  282. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/bootstrap5/message.html +0 -0
  283. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/layout.html +0 -0
  284. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/macro/message.html +0 -0
  285. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/macro/nav.html +0 -0
  286. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/templates/macro/table.html +0 -0
  287. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.1/src/flask_exts/templates/views}/user/index.html +0 -0
  288. {flask_exts-0.2.0/src/flask_exts/templates/admin → flask_exts-0.2.1/src/flask_exts/templates/views}/user/list.html +0 -0
  289. {flask_exts-0.2.0/src/flask_exts/forms/widgets → flask_exts-0.2.1/src/flask_exts/translations}/__init__.py +0 -0
  290. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/users/__init__.py +0 -0
  291. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/users/default_usercenter.py +0 -0
  292. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/users/forms/__init__.py +0 -0
  293. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/users/forms/login.py +0 -0
  294. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/users/forms/profile.py +0 -0
  295. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/users/forms/register.py +0 -0
  296. {flask_exts-0.2.0 → flask_exts-0.2.1}/src/flask_exts/users/usercenter.py +0 -0
  297. /flask_exts-0.2.0/src/flask_exts/translations/__init__.py → /flask_exts-0.2.1/src/flask_exts/utils/url.py +0 -0
  298. {flask_exts-0.2.0/src/flask_exts/admin/file_admin → flask_exts-0.2.1/src/flask_exts/views/file_view}/local_file_storage.py +0 -0
  299. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/__init__.py +0 -0
  300. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/admin/__init__.py +0 -0
  301. {flask_exts-0.2.0/tests/admin/fileadmin → flask_exts-0.2.1/tests/admin/sqla}/__init__.py +0 -0
  302. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/data/copyleft.gif +0 -0
  303. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/data/copyleft.jpeg +0 -0
  304. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/data/copyleft.jpg +0 -0
  305. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/data/copyleft.png +0 -0
  306. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/data/copyleft.tiff +0 -0
  307. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/forms/test_fields.py +0 -0
  308. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/forms/test_filefield.py +0 -0
  309. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/forms/test_form.py +0 -0
  310. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/forms/test_uploadfile.py +0 -0
  311. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/funcs.py +0 -0
  312. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/__init__.py +0 -0
  313. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/__init__.py +0 -0
  314. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/conftest.py +0 -0
  315. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/test_render_field.py +0 -0
  316. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/test_render_form.py +0 -0
  317. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/test_render_form_row.py +0 -0
  318. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/test_render_hidden_errors.py +0 -0
  319. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/test_render_messages.py +0 -0
  320. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap4/test_render_table.py +0 -0
  321. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap5/__init__.py +0 -0
  322. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap5/conftest.py +0 -0
  323. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap5/test_base.py +0 -0
  324. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap5/test_render_form.py +0 -0
  325. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap5/test_render_form_row.py +0 -0
  326. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/bootstrap5/test_render_messages.py +0 -0
  327. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/conftest.py +0 -0
  328. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/macros/test_render_breadcrumb_item.py +0 -0
  329. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/macros/test_render_nav_item.py +0 -0
  330. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/template/test_base.py +0 -0
  331. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/templates/method.html +0 -0
  332. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/templates/mock.html +0 -0
  333. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/translations/en/LC_MESSAGES/messages.mo +0 -0
  334. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/translations/en/LC_MESSAGES/messages.po +0 -0
  335. {flask_exts-0.2.0 → flask_exts-0.2.1}/tests/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
  336. {flask_exts-0.2.0/tests/admin/fileadmin → flask_exts-0.2.1/tests/views}/files/dummy.txt +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,10 @@
1
+ v0.2.1
2
+ ------
3
+
4
+ Released 2025-02-15
5
+
6
+ - add admin.sqla
7
+
1
8
  v0.2.0
2
9
  ------
3
10
 
@@ -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.1
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
@@ -45,7 +45,10 @@ Requires-Dist: flask-babel>=4.0
45
45
  Requires-Dist: flask-login>=0.6
46
46
  Requires-Dist: flask-sqlalchemy>=3.0
47
47
  Requires-Dist: flask>=3.0
48
+ Requires-Dist: tablib>=3.0
48
49
  Requires-Dist: wtforms>=3.0
50
+ Provides-Extra: rediscli
51
+ Requires-Dist: redis>=4.0.0; extra == 'rediscli'
49
52
  Description-Content-Type: text/x-rst
50
53
 
51
54
  Flask Exts
@@ -54,8 +57,6 @@ Flask Exts
54
57
  Flask-Exts is mainly inspired by:
55
58
 
56
59
  - `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
60
  - `Flask-Admin <https://github.com/flask-admin/flask-admin/>`_
60
61
 
61
62
  Flask-Exts is part rewrited from above and well tested.
@@ -75,3 +76,20 @@ Install and update using pip:
75
76
 
76
77
  $ pip install -U Flask-Exts
77
78
 
79
+ Examples
80
+ ----------
81
+
82
+ .. code-block:: python
83
+
84
+ from flask import Flask
85
+ from flask_exts import Manager
86
+
87
+ app = Flask(__name__)
88
+ app.config["SECRET_KEY"] = "dev"
89
+ # Manager init
90
+ manager = Manager()
91
+ manager.init_app(app)
92
+
93
+ if __name__ == "__main__":
94
+ app.run(debug=True)
95
+
@@ -4,8 +4,6 @@ Flask Exts
4
4
  Flask-Exts is mainly inspired by:
5
5
 
6
6
  - `WTForms <https://github.com/wtforms/wtforms/>`_
7
- - `Flask-WTF <https://github.com/wtforms/flask-wtf/>`_
8
- - `Bootstrap-Flask <https://github.com/helloflask/bootstrap-flask>`_
9
7
  - `Flask-Admin <https://github.com/flask-admin/flask-admin/>`_
10
8
 
11
9
  Flask-Exts is part rewrited from above and well tested.
@@ -25,3 +23,20 @@ Install and update using pip:
25
23
 
26
24
  $ pip install -U Flask-Exts
27
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
+
@@ -0,0 +1,567 @@
1
+ # Translations template for Flask-Exts.
2
+ # Copyright (C) 2025 ORGANIZATION
3
+ # This file is distributed under the same license as the Flask-Exts project.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: Flask-Exts VERSION\n"
10
+ "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
11
+ "POT-Creation-Date: 2025-01-26 23:11+0800\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=utf-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Generated-By: Babel 2.16.0\n"
19
+
20
+ #: src/flask_exts/admin/model/base.py:1751
21
+ msgid "There are no items in the table."
22
+ msgstr ""
23
+
24
+ #: src/flask_exts/admin/model/base.py:1760
25
+ #, python-format
26
+ msgid "Invalid Filter Value: %(value)s"
27
+ msgstr ""
28
+
29
+ #: src/flask_exts/admin/model/base.py:2174
30
+ msgid "Record was successfully created."
31
+ msgstr ""
32
+
33
+ #: src/flask_exts/admin/model/base.py:2220
34
+ #: src/flask_exts/admin/model/base.py:2273
35
+ #: src/flask_exts/admin/model/base.py:2308
36
+ #: src/flask_exts/admin/model/base.py:2505
37
+ msgid "Record does not exist."
38
+ msgstr ""
39
+
40
+ #: src/flask_exts/admin/model/base.py:2229
41
+ #: src/flask_exts/admin/model/base.py:2509
42
+ msgid "Record was successfully saved."
43
+ msgstr ""
44
+
45
+ #: src/flask_exts/admin/model/base.py:2315
46
+ #: src/flask_exts/admin/sqla/view.py:1251
47
+ #, python-format
48
+ msgid "Record was successfully deleted."
49
+ msgid_plural "%(count)s records were successfully deleted."
50
+ msgstr[0] ""
51
+ msgstr[1] ""
52
+
53
+ #: src/flask_exts/admin/model/base.py:2377
54
+ #: src/flask_exts/views/file_view/base_file_view.py:707
55
+ #: src/flask_exts/views/file_view/base_file_view.py:809
56
+ #: src/flask_exts/views/file_view/base_file_view.py:873
57
+ #: src/flask_exts/views/file_view/base_file_view.py:937
58
+ #: src/flask_exts/views/file_view/base_file_view.py:995
59
+ #: src/flask_exts/views/file_view/base_file_view.py:1058
60
+ msgid "Permission denied."
61
+ msgstr ""
62
+
63
+ #: src/flask_exts/admin/model/base.py:2456
64
+ #, python-format
65
+ msgid "Export type \"%(type)s not supported."
66
+ msgstr ""
67
+
68
+ #: src/flask_exts/admin/model/base.py:2513
69
+ #: src/flask_exts/admin/model/base.py:2522
70
+ #: src/flask_exts/admin/model/base.py:2528
71
+ #: src/flask_exts/admin/sqla/view.py:1189
72
+ #, python-format
73
+ msgid "Failed to update record. %(error)s"
74
+ msgstr ""
75
+
76
+ #: src/flask_exts/admin/model/fields.py:172
77
+ #: src/flask_exts/admin/model/fields.py:221
78
+ #: src/flask_exts/admin/sqla/fields.py:121
79
+ #: src/flask_exts/admin/sqla/fields.py:174
80
+ #: src/flask_exts/admin/sqla/fields.py:179
81
+ msgid "Not a valid choice"
82
+ msgstr ""
83
+
84
+ #: src/flask_exts/admin/model/filters.py:105
85
+ #: src/flask_exts/forms/widgets/xeditable.py:53
86
+ msgid "Yes"
87
+ msgstr ""
88
+
89
+ #: src/flask_exts/admin/model/filters.py:105
90
+ #: src/flask_exts/forms/widgets/xeditable.py:52
91
+ msgid "No"
92
+ msgstr ""
93
+
94
+ #: src/flask_exts/admin/model/filters.py:179
95
+ #: src/flask_exts/admin/model/filters.py:225
96
+ #: src/flask_exts/admin/model/filters.py:269
97
+ msgid "between"
98
+ msgstr ""
99
+
100
+ #: src/flask_exts/admin/model/template.py:80
101
+ #: src/flask_exts/admin/model/template.py:87
102
+ #: src/flask_exts/templates/admin/model/modals/details.html:4
103
+ msgid "View Record"
104
+ msgstr ""
105
+
106
+ #: src/flask_exts/admin/model/template.py:94
107
+ #: src/flask_exts/admin/model/template.py:101
108
+ #: src/flask_exts/templates/admin/model/modals/edit.html:6
109
+ msgid "Edit Record"
110
+ msgstr ""
111
+
112
+ #: src/flask_exts/admin/model/template.py:108
113
+ #: src/flask_exts/templates/macro/row_actions.html:34
114
+ msgid "Delete Record"
115
+ msgstr ""
116
+
117
+ #: src/flask_exts/admin/sqla/fields.py:210
118
+ msgid "Key"
119
+ msgstr ""
120
+
121
+ #: src/flask_exts/admin/sqla/fields.py:211
122
+ msgid "Value"
123
+ msgstr ""
124
+
125
+ #: src/flask_exts/admin/sqla/filters.py:43
126
+ msgid "equals"
127
+ msgstr ""
128
+
129
+ #: src/flask_exts/admin/sqla/filters.py:51
130
+ msgid "not equal"
131
+ msgstr ""
132
+
133
+ #: src/flask_exts/admin/sqla/filters.py:60
134
+ msgid "contains"
135
+ msgstr ""
136
+
137
+ #: src/flask_exts/admin/sqla/filters.py:69
138
+ msgid "not contains"
139
+ msgstr ""
140
+
141
+ #: src/flask_exts/admin/sqla/filters.py:77
142
+ msgid "greater than"
143
+ msgstr ""
144
+
145
+ #: src/flask_exts/admin/sqla/filters.py:85
146
+ msgid "smaller than"
147
+ msgstr ""
148
+
149
+ #: src/flask_exts/admin/sqla/filters.py:96
150
+ msgid "empty"
151
+ msgstr ""
152
+
153
+ #: src/flask_exts/admin/sqla/filters.py:112
154
+ msgid "in list"
155
+ msgstr ""
156
+
157
+ #: src/flask_exts/admin/sqla/filters.py:122
158
+ msgid "not in list"
159
+ msgstr ""
160
+
161
+ #: src/flask_exts/admin/sqla/filters.py:215
162
+ #: src/flask_exts/admin/sqla/filters.py:251
163
+ #: src/flask_exts/admin/sqla/filters.py:287
164
+ msgid "not between"
165
+ msgstr ""
166
+
167
+ #: src/flask_exts/admin/sqla/validators.py:25
168
+ msgid "Already exists."
169
+ msgstr ""
170
+
171
+ #: src/flask_exts/admin/sqla/validators.py:56
172
+ #, python-format
173
+ msgid "At least %(num)d item is required"
174
+ msgid_plural "At least %(num)d items are required"
175
+ msgstr[0] ""
176
+ msgstr[1] ""
177
+
178
+ #: src/flask_exts/admin/sqla/view.py:1127
179
+ #, python-format
180
+ msgid "Integrity error. %(message)s"
181
+ msgstr ""
182
+
183
+ #: src/flask_exts/admin/sqla/view.py:1163
184
+ #, python-format
185
+ msgid "Failed to create record. %(error)s"
186
+ msgstr ""
187
+
188
+ #: src/flask_exts/admin/sqla/view.py:1214
189
+ #, python-format
190
+ msgid "Failed to delete record. %(error)s"
191
+ msgstr ""
192
+
193
+ #: src/flask_exts/admin/sqla/view.py:1234
194
+ #: src/flask_exts/views/file_view/base_file_view.py:1139
195
+ msgid "Delete"
196
+ msgstr ""
197
+
198
+ #: src/flask_exts/admin/sqla/view.py:1235
199
+ msgid "Are you sure you want to delete selected records?"
200
+ msgstr ""
201
+
202
+ #: src/flask_exts/admin/sqla/view.py:1259
203
+ #, python-format
204
+ msgid "Failed to delete records. %(error)s"
205
+ msgstr ""
206
+
207
+ #: src/flask_exts/forms/fields/datetime.py:98
208
+ msgid "Invalid time format"
209
+ msgstr ""
210
+
211
+ #: src/flask_exts/forms/fields/file.py:66
212
+ #: src/flask_exts/forms/fields/file.py:76
213
+ #, python-format
214
+ msgid "File \"%s\" already exists."
215
+ msgstr ""
216
+
217
+ #: src/flask_exts/forms/fields/json.py:13
218
+ msgid "Invalid JSON"
219
+ msgstr ""
220
+
221
+ #: src/flask_exts/forms/fields/select.py:63
222
+ msgid "Invalid Choice: could not coerce"
223
+ msgstr ""
224
+
225
+ #: src/flask_exts/forms/form/csrf.py:49
226
+ msgid "CSRF token expired."
227
+ msgstr ""
228
+
229
+ #: src/flask_exts/forms/validators/field_list.py:11
230
+ msgid "This field requires at least one item."
231
+ msgstr ""
232
+
233
+ #: src/flask_exts/forms/validators/file.py:18
234
+ msgid "This field is required."
235
+ msgstr ""
236
+
237
+ #: src/flask_exts/forms/validators/file.py:49
238
+ msgid "File does not have an approved extension: {extensions}"
239
+ msgstr ""
240
+
241
+ #: src/flask_exts/forms/validators/file.py:85
242
+ msgid "File must be between {min_size} and {max_size} bytes."
243
+ msgstr ""
244
+
245
+ #: src/flask_exts/forms/widgets/select.py:72
246
+ msgid "Please select model"
247
+ msgstr ""
248
+
249
+ #: src/flask_exts/templates/admin/model/create.html:15
250
+ #: src/flask_exts/templates/admin/model/details.html:7
251
+ #: src/flask_exts/templates/admin/model/edit.html:15
252
+ #: src/flask_exts/templates/admin/model/list.html:19
253
+ msgid "List"
254
+ msgstr ""
255
+
256
+ #: src/flask_exts/templates/admin/model/create.html:18
257
+ #: src/flask_exts/templates/admin/model/details.html:11
258
+ #: src/flask_exts/templates/admin/model/edit.html:19
259
+ #: src/flask_exts/templates/admin/model/list.html:25
260
+ #: src/flask_exts/templates/admin/model/list.html:27
261
+ msgid "Create"
262
+ msgstr ""
263
+
264
+ #: src/flask_exts/templates/admin/model/details.html:16
265
+ #: src/flask_exts/templates/admin/model/edit.html:23
266
+ #: src/flask_exts/views/file_view/base_file_view.py:1160
267
+ msgid "Edit"
268
+ msgstr ""
269
+
270
+ #: src/flask_exts/templates/admin/model/details.html:20
271
+ #: src/flask_exts/templates/admin/model/edit.html:27
272
+ msgid "Details"
273
+ msgstr ""
274
+
275
+ #: src/flask_exts/templates/admin/model/details.html:27
276
+ #: src/flask_exts/templates/admin/model/modals/details.html:11
277
+ msgid "Filter"
278
+ msgstr ""
279
+
280
+ #: src/flask_exts/templates/admin/model/inline_field_list.html:14
281
+ msgid "Delete?"
282
+ msgstr ""
283
+
284
+ #: src/flask_exts/templates/admin/model/inline_field_list.html:16
285
+ #: src/flask_exts/templates/admin/model/inline_field_list.html:35
286
+ #: src/flask_exts/templates/macro/row_actions.html:34
287
+ msgid "Are you sure you want to delete this record?"
288
+ msgstr ""
289
+
290
+ #: src/flask_exts/templates/admin/model/inline_field_list.html:33
291
+ msgid "New"
292
+ msgstr ""
293
+
294
+ #: src/flask_exts/templates/admin/model/inline_field_list.html:43
295
+ msgid "Add"
296
+ msgstr ""
297
+
298
+ #: src/flask_exts/templates/admin/model/list.html:25
299
+ #: src/flask_exts/templates/admin/model/list.html:27
300
+ #: src/flask_exts/templates/admin/model/modals/create.html:5
301
+ msgid "Create New Record"
302
+ msgstr ""
303
+
304
+ #: src/flask_exts/templates/admin/model/list.html:78
305
+ msgid "Select all records"
306
+ msgstr ""
307
+
308
+ #: src/flask_exts/templates/admin/model/list.html:91
309
+ #: src/flask_exts/templates/admin/model/list.html:100
310
+ #: src/flask_exts/templates/views/file/list.html:42
311
+ #: src/flask_exts/templates/views/file/list.html:51
312
+ #, python-format
313
+ msgid "Sort by %(name)s"
314
+ msgstr ""
315
+
316
+ #: src/flask_exts/templates/admin/model/list.html:121
317
+ msgid "Select record"
318
+ msgstr ""
319
+
320
+ #: src/flask_exts/templates/admin/model/list.html:194
321
+ msgid "Please select at least one record."
322
+ msgstr ""
323
+
324
+ #: src/flask_exts/templates/macro/actions.html:5
325
+ msgid "With selected"
326
+ msgstr ""
327
+
328
+ #: src/flask_exts/templates/macro/form.html:119
329
+ #: src/flask_exts/templates/macro/form.html:128
330
+ msgid "Save"
331
+ msgstr ""
332
+
333
+ #: src/flask_exts/templates/macro/form.html:122
334
+ #: src/flask_exts/templates/macro/form.html:131
335
+ msgid "Cancel"
336
+ msgstr ""
337
+
338
+ #: src/flask_exts/templates/macro/form.html:149
339
+ msgid "Save and Add Another"
340
+ msgstr ""
341
+
342
+ #: src/flask_exts/templates/macro/form.html:152
343
+ msgid "Save and Continue Editing"
344
+ msgstr ""
345
+
346
+ #: src/flask_exts/templates/macro/layout.html:2
347
+ msgid "Add Filter"
348
+ msgstr ""
349
+
350
+ #: src/flask_exts/templates/macro/layout.html:14
351
+ #: src/flask_exts/templates/macro/layout.html:19
352
+ #: src/flask_exts/templates/macro/layout.html:26
353
+ msgid "Export"
354
+ msgstr ""
355
+
356
+ #: src/flask_exts/templates/macro/layout.html:49
357
+ msgid "Apply"
358
+ msgstr ""
359
+
360
+ #: src/flask_exts/templates/macro/layout.html:51
361
+ msgid "Reset Filters"
362
+ msgstr ""
363
+
364
+ #: src/flask_exts/templates/macro/layout.html:80
365
+ #: src/flask_exts/templates/macro/layout.html:93
366
+ #, python-format
367
+ msgid "%(placeholder)s"
368
+ msgstr ""
369
+
370
+ #: src/flask_exts/templates/macro/layout.html:88
371
+ #: src/flask_exts/templates/macro/layout.html:94
372
+ msgid "Search"
373
+ msgstr ""
374
+
375
+ #: src/flask_exts/templates/macro/layout.html:102
376
+ msgid "items"
377
+ msgstr ""
378
+
379
+ #: src/flask_exts/templates/views/file/list.html:10
380
+ msgid "Root"
381
+ msgstr ""
382
+
383
+ #: src/flask_exts/templates/views/file/list.html:76
384
+ #: src/flask_exts/templates/views/file/list.html:81
385
+ msgid "Rename File"
386
+ msgstr ""
387
+
388
+ #: src/flask_exts/templates/views/file/list.html:92
389
+ #, python-format
390
+ msgid "Are you sure you want to delete \\'%(name)s\\' recursively?"
391
+ msgstr ""
392
+
393
+ #: src/flask_exts/templates/views/file/list.html:101
394
+ #, python-format
395
+ msgid "Are you sure you want to delete \\'%(name)s\\'?"
396
+ msgstr ""
397
+
398
+ #: src/flask_exts/templates/views/file/list.html:150
399
+ #: src/flask_exts/templates/views/file/list.html:152
400
+ #: src/flask_exts/views/file_view/base_file_view.py:835
401
+ msgid "Upload File"
402
+ msgstr ""
403
+
404
+ #: src/flask_exts/templates/views/file/list.html:159
405
+ #: src/flask_exts/templates/views/file/list.html:161
406
+ #: src/flask_exts/views/file_view/base_file_view.py:906
407
+ msgid "Create Directory"
408
+ msgstr ""
409
+
410
+ #: src/flask_exts/templates/views/file/list.html:189
411
+ msgid "Please select at least one file."
412
+ msgstr ""
413
+
414
+ #: src/flask_exts/views/rediscli_view.py:110
415
+ msgid "Cli: Invalid command."
416
+ msgstr ""
417
+
418
+ #: src/flask_exts/views/file_view/base_file_view.py:246
419
+ msgid "File to upload"
420
+ msgstr ""
421
+
422
+ #: src/flask_exts/views/file_view/base_file_view.py:254
423
+ msgid "File required."
424
+ msgstr ""
425
+
426
+ #: src/flask_exts/views/file_view/base_file_view.py:259
427
+ msgid "Invalid file type."
428
+ msgstr ""
429
+
430
+ #: src/flask_exts/views/file_view/base_file_view.py:272
431
+ msgid "Content"
432
+ msgstr ""
433
+
434
+ #: src/flask_exts/views/file_view/base_file_view.py:289
435
+ msgid "Invalid name"
436
+ msgstr ""
437
+
438
+ #: src/flask_exts/views/file_view/base_file_view.py:299
439
+ #: tests/admin/sqla/test_translation.py:13
440
+ msgid "Name"
441
+ msgstr ""
442
+
443
+ #: src/flask_exts/views/file_view/base_file_view.py:668
444
+ #, python-format
445
+ msgid "File \"%(name)s\" already exists."
446
+ msgstr ""
447
+
448
+ #: src/flask_exts/views/file_view/base_file_view.py:805
449
+ msgid "File uploading is disabled."
450
+ msgstr ""
451
+
452
+ #: src/flask_exts/views/file_view/base_file_view.py:817
453
+ #, python-format
454
+ msgid "Successfully saved file: %(name)s"
455
+ msgstr ""
456
+
457
+ #: src/flask_exts/views/file_view/base_file_view.py:825
458
+ #, python-format
459
+ msgid "Failed to save file: %(error)s"
460
+ msgstr ""
461
+
462
+ #: src/flask_exts/views/file_view/base_file_view.py:869
463
+ msgid "Directory creation is disabled."
464
+ msgstr ""
465
+
466
+ #: src/flask_exts/views/file_view/base_file_view.py:883
467
+ #, python-format
468
+ msgid "Successfully created directory: %(directory)s"
469
+ msgstr ""
470
+
471
+ #: src/flask_exts/views/file_view/base_file_view.py:892
472
+ #, python-format
473
+ msgid "Failed to create directory: %(error)s"
474
+ msgstr ""
475
+
476
+ #: src/flask_exts/views/file_view/base_file_view.py:933
477
+ msgid "Deletion is disabled."
478
+ msgstr ""
479
+
480
+ #: src/flask_exts/views/file_view/base_file_view.py:942
481
+ msgid "Directory deletion is disabled."
482
+ msgstr ""
483
+
484
+ #: src/flask_exts/views/file_view/base_file_view.py:949
485
+ #, python-format
486
+ msgid "Directory \"%(path)s\" was successfully deleted."
487
+ msgstr ""
488
+
489
+ #: src/flask_exts/views/file_view/base_file_view.py:956
490
+ #, python-format
491
+ msgid "Failed to delete directory: %(error)s"
492
+ msgstr ""
493
+
494
+ #: src/flask_exts/views/file_view/base_file_view.py:965
495
+ #: src/flask_exts/views/file_view/base_file_view.py:1154
496
+ #, python-format
497
+ msgid "File \"%(name)s\" was successfully deleted."
498
+ msgstr ""
499
+
500
+ #: src/flask_exts/views/file_view/base_file_view.py:969
501
+ #: src/flask_exts/views/file_view/base_file_view.py:1158
502
+ #, python-format
503
+ msgid "Failed to delete file: %(name)s"
504
+ msgstr ""
505
+
506
+ #: src/flask_exts/views/file_view/base_file_view.py:991
507
+ msgid "Renaming is disabled."
508
+ msgstr ""
509
+
510
+ #: src/flask_exts/views/file_view/base_file_view.py:999
511
+ msgid "Path does not exist."
512
+ msgstr ""
513
+
514
+ #: src/flask_exts/views/file_view/base_file_view.py:1013
515
+ #, python-format
516
+ msgid "Successfully renamed \"%(src)s\" to \"%(dst)s\""
517
+ msgstr ""
518
+
519
+ #: src/flask_exts/views/file_view/base_file_view.py:1019
520
+ #, python-format
521
+ msgid "Failed to rename: %(error)s"
522
+ msgstr ""
523
+
524
+ #: src/flask_exts/views/file_view/base_file_view.py:1036
525
+ #, python-format
526
+ msgid "Rename %(name)s"
527
+ msgstr ""
528
+
529
+ #: src/flask_exts/views/file_view/base_file_view.py:1074
530
+ #, python-format
531
+ msgid "Error saving changes to %(name)s."
532
+ msgstr ""
533
+
534
+ #: src/flask_exts/views/file_view/base_file_view.py:1080
535
+ #, python-format
536
+ msgid "Changes to %(name)s saved successfully."
537
+ msgstr ""
538
+
539
+ #: src/flask_exts/views/file_view/base_file_view.py:1090
540
+ #, python-format
541
+ msgid "Error reading %(name)s."
542
+ msgstr ""
543
+
544
+ #: src/flask_exts/views/file_view/base_file_view.py:1094
545
+ #: src/flask_exts/views/file_view/base_file_view.py:1106
546
+ #, python-format
547
+ msgid "Unexpected error while reading from %(name)s"
548
+ msgstr ""
549
+
550
+ #: src/flask_exts/views/file_view/base_file_view.py:1102
551
+ #, python-format
552
+ msgid "Cannot edit %(name)s."
553
+ msgstr ""
554
+
555
+ #: src/flask_exts/views/file_view/base_file_view.py:1129
556
+ #, python-format
557
+ msgid "Editing %(path)s"
558
+ msgstr ""
559
+
560
+ #: src/flask_exts/views/file_view/base_file_view.py:1140
561
+ msgid "Are you sure you want to delete these files?"
562
+ msgstr ""
563
+
564
+ #: src/flask_exts/views/file_view/base_file_view.py:1144
565
+ msgid "File deletion is disabled."
566
+ msgstr ""
567
+