Flask-Exts 0.2.8__tar.gz → 0.3.0__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.
- flask_exts-0.3.0/.editorconfig +69 -0
- flask_exts-0.3.0/.github/workflows/docs.yml +49 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/.gitignore +3 -3
- flask_exts-0.3.0/.vscode/settings.json +16 -0
- flask_exts-0.3.0/CHANGES.rst +32 -0
- flask_exts-0.3.0/Makefile +31 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/PKG-INFO +3 -2
- {flask_exts-0.2.8 → flask_exts-0.3.0}/README.rst +1 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/babel/messages.pot +79 -83
- flask_exts-0.3.0/docs/advanced/database.rst +10 -0
- flask_exts-0.3.0/docs/advanced/index.rst +13 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/docs/api.rst +2 -2
- {flask_exts-0.2.8 → flask_exts-0.3.0}/docs/conf.py +10 -9
- flask_exts-0.3.0/docs/configure.rst +53 -0
- flask_exts-0.3.0/docs/develop.rst +81 -0
- flask_exts-0.3.0/docs/examples.rst +11 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/docs/index.rst +14 -5
- flask_exts-0.3.0/docs/quickstart.rst +52 -0
- flask_exts-0.3.0/examples/README.rst +51 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/admin_views.py +3 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/build_sample.py +42 -38
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/make_app.py +3 -14
- flask_exts-0.3.0/examples/demo/models/__init__.py +9 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/models/author.py +14 -17
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/models/post.py +7 -8
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/models/post_tag.py +2 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/models/tag.py +4 -4
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/models/tree.py +6 -8
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/views/author_view.py +8 -7
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/views/post_view.py +10 -10
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/views/tag_view.py +3 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/views/tree_view.py +3 -6
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/simple/__init__.py +4 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/package.json +5 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/pyproject.toml +15 -0
- flask_exts-0.3.0/requirements/develop.in +1 -0
- flask_exts-0.3.0/scripts/copy-vendor.js +195 -0
- flask_exts-0.3.0/src/flask_exts/__about__.py +1 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/__init__.py +0 -1
- flask_exts-0.3.0/src/flask_exts/admin/__init__.py +10 -0
- flask_exts-0.2.8/src/flask_exts/web/admin.py → flask_exts-0.3.0/src/flask_exts/admin/base.py +40 -37
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/exposer.py +12 -10
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/menu.py +31 -32
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/__init__.py +23 -26
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/actions_mixin.py +3 -2
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/ajax.py +13 -10
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/base.py +22 -57
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/core/__init__.py +7 -7
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/core/columns.py +26 -25
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/core/forms.py +26 -23
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/core/pagination.py +45 -39
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/core/sorting.py +13 -24
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/core/values.py +25 -19
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/filter.py +24 -18
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/filter_mixin.py +15 -10
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/operations/__init__.py +7 -7
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/operations/create.py +3 -3
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/operations/export.py +14 -17
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/operations/read.py +9 -9
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/operations/update.py +5 -4
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/row_actions.py +2 -8
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/type_formatters.py +22 -15
- flask_exts-0.3.0/src/flask_exts/admin/model/types.py +5 -0
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/view.py +24 -29
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/ajax.py +22 -19
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/filter/filter_converter.py +43 -55
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/filter/filters.py +14 -14
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/form/field_converters.py +8 -6
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/form/inline_form.py +6 -4
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/form/inline_model_convert.py +57 -98
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/form/model_field_convert.py +9 -8
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/form/utils.py +22 -14
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/sqla_view/__init__.py +6 -6
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/type_formatters.py +1 -2
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/view.py +270 -59
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/view.py +51 -47
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/builtin_extensions/__init__.py +7 -8
- flask_exts-0.2.8/src/flask_exts/builtin_extensions/web_ext.py → flask_exts-0.3.0/src/flask_exts/builtin_extensions/admin_ext.py +2 -6
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/builtin_extensions/babel_ext.py +34 -37
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/builtin_extensions/database_ext.py +4 -5
- flask_exts-0.3.0/src/flask_exts/builtin_extensions/emailer_ext.py +15 -0
- flask_exts-0.2.8/src/flask_exts/builtin_extensions/html_ext.py → flask_exts-0.3.0/src/flask_exts/builtin_extensions/frontend_ext.py +7 -7
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/builtin_extensions/login_ext.py +55 -28
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/builtin_extensions/security_ext.py +0 -8
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/builtin_extensions/startup_ext.py +35 -14
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/builtin_extensions/usercenter_ext.py +7 -5
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/builtin_extensions/userstore_ext.py +1 -5
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/commands.py +17 -5
- flask_exts-0.3.0/src/flask_exts/datastore/sqla/__init__.py +4 -0
- flask_exts-0.3.0/src/flask_exts/datastore/sqla/_db.py +45 -0
- flask_exts-0.2.8/src/flask_exts/datastore/sqla/sqla_db.py → flask_exts-0.3.0/src/flask_exts/datastore/sqla/database.py +15 -12
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/datastore/sqla/query.py +16 -10
- flask_exts-0.3.0/src/flask_exts/datastore/sqla/utils/__init__.py +8 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/datastore/sqla/utils/model_mapper.py +4 -4
- flask_exts-0.3.0/src/flask_exts/datastore/sqla/utils/orm.py +32 -0
- {flask_exts-0.2.8/src/flask_exts/email → flask_exts-0.3.0/src/flask_exts/emailer}/base.py +9 -3
- {flask_exts-0.2.8/src/flask_exts/email → flask_exts-0.3.0/src/flask_exts/emailer}/smtp.py +15 -5
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/extension_core/base.py +2 -53
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/extension_core/manager.py +32 -26
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/extension_core/registry.py +72 -116
- flask_exts-0.3.0/src/flask_exts/forms/fields/__init__.py +5 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/ajax_select.py +6 -7
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/datetime.py +24 -21
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/file.py +38 -28
- flask_exts-0.3.0/src/flask_exts/forms/fields/inline.py +51 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/json.py +1 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/select.py +14 -32
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/sqla.py +3 -146
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/form/__init__.py +2 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/form/base_form.py +2 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/form/csrf.py +7 -10
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/form/meta.py +8 -12
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/form/session_csrf.py +7 -10
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/validators/field_list.py +4 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/validators/file.py +20 -21
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/validators/recaptcha.py +5 -5
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/validators/sqla.py +7 -6
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/widgets/__init__.py +1 -1
- flask_exts-0.3.0/src/flask_exts/forms/widgets/checkbox.py +30 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/widgets/editable.py +21 -17
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/widgets/file.py +1 -0
- flask_exts-0.3.0/src/flask_exts/forms/widgets/inline.py +8 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/widgets/recaptcha.py +4 -3
- flask_exts-0.3.0/src/flask_exts/forms/widgets/select.py +75 -0
- flask_exts-0.3.0/src/flask_exts/frontend/plugin_base.py +24 -0
- flask_exts-0.3.0/src/flask_exts/frontend/plugin_manager.py +117 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/admin_detail_filter_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/admin_filters_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/admin_form_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/admin_list_action_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/admin_modal_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/admin_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/bootstrap5_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/clipboard_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/copybutton_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/dayjs_plugin.py +8 -8
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/editable_plugin.py +3 -3
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/flatpickr_plugin.py +10 -7
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/qrcode_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/rediscli_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/sphinx_copybutton_plugin.py +1 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/plugins/tom_select_plugin.py +4 -3
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/template.py +0 -5
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/proxies.py +3 -2
- flask_exts-0.3.0/src/flask_exts/security/__init__.py +3 -0
- flask_exts-0.3.0/src/flask_exts/security/authorizer/base.py +8 -0
- flask_exts-0.3.0/src/flask_exts/security/authorizer/simple_authorizer.py +58 -0
- flask_exts-0.3.0/src/flask_exts/security/core.py +39 -0
- flask_exts-0.3.0/src/flask_exts/security/exceptions.py +24 -0
- flask_exts-0.3.0/src/flask_exts/security/keys.py +23 -0
- flask_exts-0.3.0/src/flask_exts/security/plugins/email_change.py +92 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/security/plugins/email_verification.py +8 -4
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/security/plugins/reset_password.py +13 -7
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/security/plugins/two_factor_authentication.py +1 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/security/registry.py +7 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/security/serializer.py +19 -13
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/security/token_action.py +60 -33
- flask_exts-0.3.0/src/flask_exts/security/urls.py +28 -0
- flask_exts-0.3.0/src/flask_exts/security/user_mixin.py +10 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/css/admin.css +2 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/copybutton.js +4 -4
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/detail_filter.js +13 -9
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/editable.js +2 -2
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/field-registry.js +0 -2
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/filters.js +5 -23
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/form.js +167 -121
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/rediscli.js +2 -6
- flask_exts-0.3.0/src/flask_exts/static/vendor/bootstrap5/bootstrap.bundle.min.js +7 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/bootstrap5/bootstrap.min.css +6 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/clipboard/clipboard.min.js +7 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/dayjs/dayjs.min.js +1 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/dayjs/timezone.js +1 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/dayjs/utc.js +1 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/flatpickr/flatpickr.min.css +13 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/flatpickr/flatpickr.min.js +2 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/tom-select/tom-select.bootstrap5.min.css +2 -0
- flask_exts-0.3.0/src/flask_exts/static/vendor/tom-select/tom-select.complete.min.js +454 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/admin/master.html +7 -7
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/admin/model/create.html +3 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/admin/model/details.html +1 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/admin/model/edit.html +1 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/admin/model/list.html +34 -45
- flask_exts-0.3.0/src/flask_exts/templates/base.html +19 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/index.html +0 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/layout.html +2 -2
- flask_exts-0.3.0/src/flask_exts/templates/macro/form.html +137 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/macro/layout.html +10 -7
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/macro/menu.html +7 -7
- flask_exts-0.3.0/src/flask_exts/templates/macro/message.html +22 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/macro/modal.html +2 -4
- flask_exts-0.3.0/src/flask_exts/templates/user/email_change.html +22 -0
- flask_exts-0.3.0/src/flask_exts/templates/user/index.html +42 -0
- flask_exts-0.3.0/src/flask_exts/templates/user/list.html +5 -0
- flask_exts-0.3.0/src/flask_exts/templates/user/profile.html +77 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/recovery_codes.html +4 -6
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/setup_tfa.html +11 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/show_tfa.html +3 -3
- flask_exts-0.3.0/src/flask_exts/templates/user/verify_email.html +26 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/verify_tfa_modal.html +2 -2
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/translations/en/LC_MESSAGES/messages.mo +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/translations/en/LC_MESSAGES/messages.po +139 -83
- flask_exts-0.3.0/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.po +159 -102
- flask_exts-0.3.0/src/flask_exts/usercenter/auth_requires.py +34 -0
- flask_exts-0.3.0/src/flask_exts/usercenter/forms/email_change.py +29 -0
- flask_exts-0.3.0/src/flask_exts/usercenter/forms/forgot_password.py +12 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/forms/register.py +8 -6
- flask_exts-0.3.0/src/flask_exts/usercenter/forms/resend_verification.py +7 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/user_view.py +168 -75
- flask_exts-0.2.8/src/flask_exts/userstore/store.py → flask_exts-0.3.0/src/flask_exts/userstore/base.py +1 -3
- flask_exts-0.3.0/src/flask_exts/userstore/exceptions.py +15 -0
- flask_exts-0.3.0/src/flask_exts/userstore/sqla/__init__.py +4 -0
- flask_exts-0.3.0/src/flask_exts/userstore/sqla/models/__init__.py +6 -0
- {flask_exts-0.2.8/src/flask_exts/userstore → flask_exts-0.3.0/src/flask_exts/userstore/sqla}/models/role.py +5 -5
- {flask_exts-0.2.8/src/flask_exts/userstore → flask_exts-0.3.0/src/flask_exts/userstore/sqla}/models/user.py +25 -21
- {flask_exts-0.2.8/src/flask_exts/userstore → flask_exts-0.3.0/src/flask_exts/userstore/sqla}/models/user_profile.py +13 -12
- {flask_exts-0.2.8/src/flask_exts/userstore → flask_exts-0.3.0/src/flask_exts/userstore/sqla}/models/user_role.py +3 -4
- flask_exts-0.2.8/src/flask_exts/userstore/sqla_user_store.py → flask_exts-0.3.0/src/flask_exts/userstore/sqla/userstore.py +18 -14
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/model/core/test_columns.py +1 -1
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/model/test_action_mixin.py +2 -4
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/model/test_model_view.py +25 -91
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/model/test_model_view_csrf.py +17 -14
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/custom_sqla_model_view.py +1 -1
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/test_basic.py +41 -49
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/test_filter.py +2 -3
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/test_form.py +11 -5
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/test_inline_model.py +219 -48
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/test_multi_pk.py +30 -3
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/test_primary_string.py +3 -3
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/test_translation.py +5 -5
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/test_admin.py +3 -25
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/test_view.py +1 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/conftest.py +7 -4
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/datastore/sqla/test_db.py +8 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/datastore/sqla/test_query.py +5 -3
- {flask_exts-0.2.8/tests/email → flask_exts-0.3.0/tests/emailer}/test_base.py +1 -0
- {flask_exts-0.2.8/tests/email → flask_exts-0.3.0/tests/emailer}/test_smtp.py +2 -1
- flask_exts-0.3.0/tests/extension_core/test_manager.py +100 -0
- flask_exts-0.3.0/tests/extension_core/test_registry.py +200 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/forms/fields/test_datetime.py +2 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/forms/fields/test_filefield.py +4 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/forms/fields/test_json.py +4 -4
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/forms/fields/test_uploadfile.py +5 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/forms/fields/test_wtforms.py +3 -2
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/forms/form/test_form.py +19 -1
- {flask_exts-0.2.8/tests/html → flask_exts-0.3.0/tests/frontend}/conftest.py +2 -1
- flask_exts-0.3.0/tests/frontend/test_base.py +23 -0
- flask_exts-0.3.0/tests/frontend/test_plugin_manager.py +95 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/models/demo.py +37 -32
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/models/multpk.py +1 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/models/primary_string_model.py +2 -4
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/models/relations.py +5 -7
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/models/simple.py +1 -3
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/models/tree.py +4 -9
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/models/unique.py +2 -3
- flask_exts-0.3.0/tests/security/test_authorizer.py +72 -0
- flask_exts-0.3.0/tests/security/test_core.py +118 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/security/test_tfa.py +3 -1
- flask_exts-0.3.0/tests/security/test_urls.py +23 -0
- flask_exts-0.2.8/tests/test_exts_base.py → flask_exts-0.3.0/tests/test_builtin_exts.py +15 -5
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/test_db.py +3 -2
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/test_login.py +23 -14
- {flask_exts-0.2.8/tests/views → flask_exts-0.3.0/tests/usercenter}/test_user_view.py +272 -45
- flask_exts-0.3.0/tests/userstore/test_sqla_userstore.py +72 -0
- flask_exts-0.2.8/.djlintrc +0 -8
- flask_exts-0.2.8/CHANGES.rst +0 -147
- flask_exts-0.2.8/docs/advanced/bootstrap5.rst +0 -429
- flask_exts-0.2.8/docs/advanced/custom_fields.rst +0 -384
- flask_exts-0.2.8/docs/advanced/custom_plugins.rst +0 -247
- flask_exts-0.2.8/docs/advanced/custom_validators.rst +0 -4
- flask_exts-0.2.8/docs/advanced/index.rst +0 -16
- flask_exts-0.2.8/docs/advanced/modelview.rst +0 -337
- flask_exts-0.2.8/docs/advanced/performance.rst +0 -493
- flask_exts-0.2.8/docs/advanced/security.rst +0 -498
- flask_exts-0.2.8/docs/advanced/theming.rst +0 -401
- flask_exts-0.2.8/docs/configure.rst +0 -25
- flask_exts-0.2.8/docs/develop.rst +0 -65
- flask_exts-0.2.8/docs/examples.rst +0 -6
- flask_exts-0.2.8/docs/quickstart.rst +0 -264
- flask_exts-0.2.8/examples/README.rst +0 -38
- flask_exts-0.2.8/examples/demo/models/__init__.py +0 -9
- flask_exts-0.2.8/src/flask_exts/__about__.py +0 -1
- flask_exts-0.2.8/src/flask_exts/builtin_extensions/email_ext.py +0 -16
- flask_exts-0.2.8/src/flask_exts/datastore/sqla/__init__.py +0 -3
- flask_exts-0.2.8/src/flask_exts/datastore/sqla/utils/__init__.py +0 -6
- flask_exts-0.2.8/src/flask_exts/datastore/sqla/utils/orm.py +0 -40
- flask_exts-0.2.8/src/flask_exts/datastore/sqla/utils/paginate.py +0 -74
- flask_exts-0.2.8/src/flask_exts/forms/fields/__init__.py +0 -6
- flask_exts-0.2.8/src/flask_exts/forms/fields/inline.py +0 -90
- flask_exts-0.2.8/src/flask_exts/forms/fields/sqla_fields/__init__.py +0 -39
- flask_exts-0.2.8/src/flask_exts/forms/fields/sqla_fields/checkbox_fields.py +0 -9
- flask_exts-0.2.8/src/flask_exts/forms/fields/sqla_fields/inline_fields.py +0 -10
- flask_exts-0.2.8/src/flask_exts/forms/fields/sqla_fields/query_fields.py +0 -11
- flask_exts-0.2.8/src/flask_exts/forms/validators/__init__.py +0 -1
- flask_exts-0.2.8/src/flask_exts/forms/widgets/checkbox.py +0 -32
- flask_exts-0.2.8/src/flask_exts/forms/widgets/inline.py +0 -14
- flask_exts-0.2.8/src/flask_exts/forms/widgets/select.py +0 -81
- flask_exts-0.2.8/src/flask_exts/html/plugin_base.py +0 -32
- flask_exts-0.2.8/src/flask_exts/html/plugin_manager.py +0 -85
- flask_exts-0.2.8/src/flask_exts/html/plugins/bootstrap4_plugin.py +0 -19
- flask_exts-0.2.8/src/flask_exts/security/authorizer/base.py +0 -17
- flask_exts-0.2.8/src/flask_exts/security/authorizer/simple_authorizer.py +0 -21
- flask_exts-0.2.8/src/flask_exts/security/core.py +0 -54
- flask_exts-0.2.8/src/flask_exts/templates/admin/model/modals/create.html +0 -5
- flask_exts-0.2.8/src/flask_exts/templates/admin/model/modals/details.html +0 -37
- flask_exts-0.2.8/src/flask_exts/templates/admin/model/modals/edit.html +0 -5
- flask_exts-0.2.8/src/flask_exts/templates/base.html +0 -19
- flask_exts-0.2.8/src/flask_exts/templates/macro/form.html +0 -83
- flask_exts-0.2.8/src/flask_exts/templates/macro/inline.html +0 -44
- flask_exts-0.2.8/src/flask_exts/templates/macro/message.html +0 -22
- flask_exts-0.2.8/src/flask_exts/templates/user/index.html +0 -53
- flask_exts-0.2.8/src/flask_exts/templates/user/list.html +0 -5
- flask_exts-0.2.8/src/flask_exts/templates/user/verify_email.html +0 -5
- flask_exts-0.2.8/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
- flask_exts-0.2.8/src/flask_exts/usercenter/auth_requires.py +0 -39
- flask_exts-0.2.8/src/flask_exts/usercenter/forms/forgot_password.py +0 -19
- flask_exts-0.2.8/src/flask_exts/usercenter/forms/profile.py +0 -11
- flask_exts-0.2.8/src/flask_exts/usercenter/user.py +0 -14
- flask_exts-0.2.8/src/flask_exts/userstore/models/__init__.py +0 -1
- flask_exts-0.2.8/src/flask_exts/web/__init__.py +0 -3
- flask_exts-0.2.8/src/flask_exts/web/default_views/index_view.py +0 -25
- flask_exts-0.2.8/src/flask_exts/web/model/types.py +0 -4
- flask_exts-0.2.8/tests/html/test_base.py +0 -28
- flask_exts-0.2.8/tests/security/test_authorizer.py +0 -116
- flask_exts-0.2.8/tests/security/test_core.py +0 -51
- flask_exts-0.2.8/tests/test_base.py +0 -9
- flask_exts-0.2.8/tests/usercenter/test_sqla_usercenter.py +0 -50
- {flask_exts-0.2.8 → flask_exts-0.3.0}/.github/workflows/release.yml +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/.readthedocs.yaml +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/LICENSE.rst +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/babel/babel.cfg +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/babel/babel.sh +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/docs/Makefile +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/docs/_static/logo.png +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/docs/changes.rst +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/docs/make.bat +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/docs/requirements.txt +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/file_op.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/static/favicon.ico +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/templates/field_list.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/templates/locations.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/examples/demo/templates/tree_list.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/requirements/build.in +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/requirements/test.in +0 -0
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/model/operations/delete.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/datastore → flask_exts-0.3.0/src/flask_exts/admin/sqla}/__init__.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/filter/__init__.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/form/__init__.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/sqla_view/pagination_handler.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/sqla_view/query_handler.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/sqla_view/relationships_handler.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/web → flask_exts-0.3.0/src/flask_exts/admin}/sqla/sqla_view/sorting_handler.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/constants.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/email → flask_exts-0.3.0/src/flask_exts/datastore}/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/datastore/sqla/query_builders/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/datastore/sqla/query_builders/filter_builder.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/datastore/sqla/query_builders/join_builder.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/datastore/sqla/query_builders/pagination_builder.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/datastore/sqla/query_builders/sort_builder.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/extension_core → flask_exts-0.3.0/src/flask_exts/emailer}/__init__.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/email → flask_exts-0.3.0/src/flask_exts/emailer}/reset_password_sender.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/email → flask_exts-0.3.0/src/flask_exts/emailer}/sender.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/email → flask_exts-0.3.0/src/flask_exts/emailer}/verify_email_sender.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/extension_core}/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/recaptcha.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/switch.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/fields/taglist.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/form/flask_form.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/form/utils.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/html/plugins → flask_exts-0.3.0/src/flask_exts/forms/validators}/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/forms/widgets/datetime.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/security → flask_exts-0.3.0/src/flask_exts/frontend}/__init__.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/security/authorizer → flask_exts-0.3.0/src/flask_exts/frontend/plugins}/__init__.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/html → flask_exts-0.3.0/src/flask_exts/frontend}/theme.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/translations → flask_exts-0.3.0/src/flask_exts/security/authorizer}/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/security/hasher.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/signals.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/css/editable.css +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/css/rediscli.css +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/list_action.js +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/modal.js +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/qrcode.js +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/security/base64.js +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/security/webauthn.js +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/js/ui-factory.js +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/logo.png +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/vendor/sphinx-copybutton/sphinx-copybutton.css +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/static/vendor/sphinx-copybutton/sphinx-copybutton.js +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/admin/index.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/macro/icon.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/macro/nav.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/macro/pagination.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/change_password.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/forgot_password.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/login.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/recovery.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/register.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/reset_password.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/templates/user/verify_tfa.html +0 -0
- {flask_exts-0.2.8/src/flask_exts/usercenter → flask_exts-0.3.0/src/flask_exts/translations}/__init__.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/web/default_views → flask_exts-0.3.0/src/flask_exts/usercenter}/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/core.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/forms/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/forms/change_password.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/forms/login.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/forms/recovery.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/forms/reset_password.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/src/flask_exts/usercenter/forms/two_factor.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/__init__.py +0 -0
- {flask_exts-0.2.8/src/flask_exts/web/sqla → flask_exts-0.3.0/tests/admin}/__init__.py +0 -0
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/__init__.py +0 -0
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/templates/another_macro.html +0 -0
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/admin}/sqla/templates/macro.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/data/copyleft.gif +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/data/copyleft.jpeg +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/data/copyleft.jpg +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/data/copyleft.png +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/data/copyleft.tiff +0 -0
- {flask_exts-0.2.8/tests/html → flask_exts-0.3.0/tests/extension_core}/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/forms/common.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/forms/fields/test_inline.py +0 -0
- {flask_exts-0.2.8/tests/web → flask_exts-0.3.0/tests/frontend}/__init__.py +0 -0
- {flask_exts-0.2.8/tests/html → flask_exts-0.3.0/tests/frontend}/macros/test_render_breadcrumb_item.py +0 -0
- {flask_exts-0.2.8/tests/html → flask_exts-0.3.0/tests/frontend}/macros/test_render_nav_item.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/helper.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/models/__init__.py +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/templates/method.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/templates/mock.html +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/test_babel.py +1 -1
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/translations/en/LC_MESSAGES/messages.mo +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/translations/en/LC_MESSAGES/messages.po +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/translations/messages.pot +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
- {flask_exts-0.2.8 → flask_exts-0.3.0}/tests/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# EditorConfig is awesome: https://EditorConfig.org
|
|
2
|
+
# Team style guide blending Google and Microsoft conventions
|
|
3
|
+
|
|
4
|
+
# Mark as root so EditorConfig stops searching parent directories
|
|
5
|
+
root = true
|
|
6
|
+
|
|
7
|
+
# ============================================================
|
|
8
|
+
# General defaults (common to Google and Microsoft)
|
|
9
|
+
# ============================================================
|
|
10
|
+
[*]
|
|
11
|
+
charset = utf-8
|
|
12
|
+
end_of_line = lf
|
|
13
|
+
insert_final_newline = true
|
|
14
|
+
trim_trailing_whitespace = true
|
|
15
|
+
indent_style = space
|
|
16
|
+
indent_size = 4
|
|
17
|
+
|
|
18
|
+
# ============================================================
|
|
19
|
+
# JavaScript / TypeScript (Google style: 2 spaces)
|
|
20
|
+
# Ref: Google JavaScript Style Guide - Block indentation
|
|
21
|
+
# ============================================================
|
|
22
|
+
[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts}]
|
|
23
|
+
indent_size = 2
|
|
24
|
+
|
|
25
|
+
# ============================================================
|
|
26
|
+
# JSON / YAML / HTML / CSS (industry common: 2 spaces)
|
|
27
|
+
# ============================================================
|
|
28
|
+
[*.{json,jsonc,yml,yaml,html,css,scss,less,vue,svelte}]
|
|
29
|
+
indent_size = 2
|
|
30
|
+
|
|
31
|
+
# ============================================================
|
|
32
|
+
# Python (Google style: 4 spaces, never tabs)
|
|
33
|
+
# Ref: Google Python Style Guide - Indentation
|
|
34
|
+
# ============================================================
|
|
35
|
+
[*.py]
|
|
36
|
+
indent_size = 4
|
|
37
|
+
|
|
38
|
+
# ============================================================
|
|
39
|
+
# Go (gofmt enforces tabs)
|
|
40
|
+
# Ref: gofmt specification
|
|
41
|
+
# ============================================================
|
|
42
|
+
[*.go]
|
|
43
|
+
indent_style = tab
|
|
44
|
+
|
|
45
|
+
# ============================================================
|
|
46
|
+
# C# / .NET (Microsoft style: 4 spaces, UTF-8 BOM)
|
|
47
|
+
# Ref: dotnet/roslyn .editorconfig
|
|
48
|
+
# ============================================================
|
|
49
|
+
[*.{cs,csx,vb,vbx}]
|
|
50
|
+
indent_size = 4
|
|
51
|
+
charset = utf-8-bom
|
|
52
|
+
|
|
53
|
+
# ============================================================
|
|
54
|
+
# Shell scripts
|
|
55
|
+
# ============================================================
|
|
56
|
+
[*.sh]
|
|
57
|
+
indent_size = 2
|
|
58
|
+
|
|
59
|
+
# ============================================================
|
|
60
|
+
# Markdown (do not trim trailing whitespace; preserves line breaks)
|
|
61
|
+
# ============================================================
|
|
62
|
+
[*.md]
|
|
63
|
+
trim_trailing_whitespace = false
|
|
64
|
+
|
|
65
|
+
# ============================================================
|
|
66
|
+
# Makefile (must use tabs)
|
|
67
|
+
# ============================================================
|
|
68
|
+
[Makefile]
|
|
69
|
+
indent_style = tab
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
paths:
|
|
6
|
+
- "docs/**"
|
|
7
|
+
- "src/**"
|
|
8
|
+
- "examples/**"
|
|
9
|
+
- "CHANGES.rst"
|
|
10
|
+
- "pyproject.toml"
|
|
11
|
+
- ".github/workflows/docs.yml"
|
|
12
|
+
pull_request:
|
|
13
|
+
paths:
|
|
14
|
+
- "docs/**"
|
|
15
|
+
- "src/**"
|
|
16
|
+
- "examples/**"
|
|
17
|
+
- "CHANGES.rst"
|
|
18
|
+
- "pyproject.toml"
|
|
19
|
+
- ".github/workflows/docs.yml"
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
build-docs:
|
|
26
|
+
name: Build Sphinx documentation
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- name: Check out repository
|
|
31
|
+
uses: actions/checkout@v4
|
|
32
|
+
|
|
33
|
+
- name: Set up Python
|
|
34
|
+
uses: actions/setup-python@v5
|
|
35
|
+
with:
|
|
36
|
+
python-version: "3.13"
|
|
37
|
+
cache: pip
|
|
38
|
+
cache-dependency-path: |
|
|
39
|
+
pyproject.toml
|
|
40
|
+
docs/requirements.txt
|
|
41
|
+
|
|
42
|
+
- name: Install project and documentation dependencies
|
|
43
|
+
run: |
|
|
44
|
+
python -m pip install --upgrade pip
|
|
45
|
+
python -m pip install -e .
|
|
46
|
+
python -m pip install -r docs/requirements.txt
|
|
47
|
+
|
|
48
|
+
- name: Build documentation
|
|
49
|
+
run: python -m sphinx -b html docs docs/_build/html -W -n --keep-going
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files.eol": "\n",
|
|
3
|
+
"files.associations": {
|
|
4
|
+
"**/templates/**/*.html": "jinja-html"
|
|
5
|
+
},
|
|
6
|
+
"[jinja-html]": {
|
|
7
|
+
"editor.defaultFormatter": "monosans.djlint",
|
|
8
|
+
"editor.formatOnSave": true
|
|
9
|
+
},
|
|
10
|
+
"djlint.useEditorIndentation": false,
|
|
11
|
+
"python.testing.unittestEnabled": false,
|
|
12
|
+
"python.testing.pytestEnabled": true,
|
|
13
|
+
"python.testing.pytestArgs": [
|
|
14
|
+
"tests"
|
|
15
|
+
],
|
|
16
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
v0.3.0
|
|
2
|
+
------
|
|
3
|
+
|
|
4
|
+
Released 2026-10-07
|
|
5
|
+
|
|
6
|
+
- usercenter
|
|
7
|
+
- userstore
|
|
8
|
+
- security
|
|
9
|
+
- user view, authentication and authorization
|
|
10
|
+
- 2FA with TOTP
|
|
11
|
+
|
|
12
|
+
v0.2.0
|
|
13
|
+
------
|
|
14
|
+
|
|
15
|
+
Released 2026-01-07
|
|
16
|
+
|
|
17
|
+
- extensions
|
|
18
|
+
- admin
|
|
19
|
+
- datastore
|
|
20
|
+
- emailer
|
|
21
|
+
- forms
|
|
22
|
+
- frontend
|
|
23
|
+
- babel
|
|
24
|
+
|
|
25
|
+
v0.1.0
|
|
26
|
+
------
|
|
27
|
+
|
|
28
|
+
Released 2024-03-20
|
|
29
|
+
|
|
30
|
+
- Init release
|
|
31
|
+
- Init docs
|
|
32
|
+
- .readthedocs.yaml
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
.PHONY: docs-build docs-serve docs-clean
|
|
2
|
+
|
|
3
|
+
docs-build:
|
|
4
|
+
python -m sphinx -b html docs docs/_build/html -W -n --keep-going
|
|
5
|
+
|
|
6
|
+
docs-serve:
|
|
7
|
+
python -m http.server -d docs/_build/html 8000
|
|
8
|
+
|
|
9
|
+
docs-clean:
|
|
10
|
+
rm -rf docs/_build
|
|
11
|
+
|
|
12
|
+
pytest:
|
|
13
|
+
pytest
|
|
14
|
+
|
|
15
|
+
pytest-last:
|
|
16
|
+
pytest --lf --last-failed-no-failures=none
|
|
17
|
+
|
|
18
|
+
pytest-clean:
|
|
19
|
+
rm -rf .pytest_cache
|
|
20
|
+
|
|
21
|
+
pytest-warn:
|
|
22
|
+
pytest -W error
|
|
23
|
+
|
|
24
|
+
pytest-print:
|
|
25
|
+
pytest -s
|
|
26
|
+
|
|
27
|
+
coverage:
|
|
28
|
+
coverage run -m pytest
|
|
29
|
+
|
|
30
|
+
coverage-report:
|
|
31
|
+
coverage report -m
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: Flask-Exts
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
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
|
|
@@ -43,6 +43,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
43
43
|
Classifier: Programming Language :: Python :: 3.13
|
|
44
44
|
Classifier: Topic :: Software Development :: Build Tools
|
|
45
45
|
Requires-Python: >=3.10
|
|
46
|
+
Requires-Dist: email-validator>=2.0
|
|
46
47
|
Requires-Dist: flask-babel>=4.0
|
|
47
48
|
Requires-Dist: flask-login>=0.6
|
|
48
49
|
Requires-Dist: flask>=3.0
|
|
@@ -78,7 +79,7 @@ Install and update using pip:
|
|
|
78
79
|
|
|
79
80
|
$ pip install Flask-Exts
|
|
80
81
|
|
|
81
|
-
|
|
82
|
+
Example
|
|
82
83
|
----------
|
|
83
84
|
|
|
84
85
|
.. code-block:: python
|
|
@@ -8,235 +8,231 @@ msgid ""
|
|
|
8
8
|
msgstr ""
|
|
9
9
|
"Project-Id-Version: Flask-Exts VERSION\n"
|
|
10
10
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
|
11
|
-
"POT-Creation-Date: 2026-
|
|
11
|
+
"POT-Creation-Date: 2026-10-03 19:07+0800\n"
|
|
12
12
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
13
13
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
14
14
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
15
15
|
"MIME-Version: 1.0\n"
|
|
16
16
|
"Content-Type: text/plain; charset=utf-8\n"
|
|
17
17
|
"Content-Transfer-Encoding: 8bit\n"
|
|
18
|
-
"Generated-By: Babel 2.
|
|
18
|
+
"Generated-By: Babel 2.18.0\n"
|
|
19
19
|
|
|
20
|
-
#: src/flask_exts/admin/model/
|
|
20
|
+
#: src/flask_exts/admin/model/actions_mixin.py:113
|
|
21
21
|
msgid "Delete"
|
|
22
22
|
msgstr ""
|
|
23
23
|
|
|
24
|
-
#: src/flask_exts/admin/model/
|
|
24
|
+
#: src/flask_exts/admin/model/actions_mixin.py:114
|
|
25
25
|
msgid "Are you sure you want to delete selected records?"
|
|
26
26
|
msgstr ""
|
|
27
27
|
|
|
28
|
-
#: src/flask_exts/admin/model/
|
|
29
|
-
#: src/flask_exts/admin/model/view.py:
|
|
28
|
+
#: src/flask_exts/admin/model/actions_mixin.py:120
|
|
29
|
+
#: src/flask_exts/admin/model/view.py:387
|
|
30
30
|
#, python-format
|
|
31
31
|
msgid "Record was successfully deleted."
|
|
32
32
|
msgid_plural "%(count)s records were successfully deleted."
|
|
33
33
|
msgstr[0] ""
|
|
34
34
|
msgstr[1] ""
|
|
35
35
|
|
|
36
|
-
#: src/flask_exts/admin/model/filter.py:
|
|
37
|
-
#: src/flask_exts/
|
|
36
|
+
#: src/flask_exts/admin/model/filter.py:124
|
|
37
|
+
#: src/flask_exts/forms/widgets/editable.py:45
|
|
38
38
|
msgid "Yes"
|
|
39
39
|
msgstr ""
|
|
40
40
|
|
|
41
|
-
#: src/flask_exts/admin/model/filter.py:
|
|
42
|
-
#: src/flask_exts/
|
|
41
|
+
#: src/flask_exts/admin/model/filter.py:124
|
|
42
|
+
#: src/flask_exts/forms/widgets/editable.py:44
|
|
43
43
|
msgid "No"
|
|
44
44
|
msgstr ""
|
|
45
45
|
|
|
46
|
-
#: src/flask_exts/admin/model/filter.py:
|
|
46
|
+
#: src/flask_exts/admin/model/filter.py:214
|
|
47
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:313
|
|
48
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:348
|
|
49
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:377
|
|
47
50
|
msgid "between"
|
|
48
51
|
msgstr ""
|
|
49
52
|
|
|
50
|
-
#: src/flask_exts/admin/model/filter_mixin.py:
|
|
53
|
+
#: src/flask_exts/admin/model/filter_mixin.py:186
|
|
51
54
|
#, python-format
|
|
52
55
|
msgid "Invalid Filter Value: %(value)s"
|
|
53
56
|
msgstr ""
|
|
54
57
|
|
|
55
|
-
#: src/flask_exts/admin/model/
|
|
56
|
-
#: src/flask_exts/admin/model/
|
|
58
|
+
#: src/flask_exts/admin/model/row_actions.py:15
|
|
59
|
+
#: src/flask_exts/admin/model/row_actions.py:22
|
|
57
60
|
msgid "View Record"
|
|
58
61
|
msgstr ""
|
|
59
62
|
|
|
60
|
-
#: src/flask_exts/admin/model/
|
|
61
|
-
#: src/flask_exts/admin/model/
|
|
63
|
+
#: src/flask_exts/admin/model/row_actions.py:29
|
|
64
|
+
#: src/flask_exts/admin/model/row_actions.py:36
|
|
62
65
|
#: src/flask_exts/templates/admin/model/modals/edit.html:2
|
|
63
66
|
msgid "Edit Record"
|
|
64
67
|
msgstr ""
|
|
65
68
|
|
|
66
|
-
#: src/flask_exts/admin/model/
|
|
69
|
+
#: src/flask_exts/admin/model/row_actions.py:43
|
|
67
70
|
msgid "Delete Record"
|
|
68
71
|
msgstr ""
|
|
69
72
|
|
|
70
|
-
#: src/flask_exts/admin/model/
|
|
73
|
+
#: src/flask_exts/admin/model/row_actions.py:45
|
|
71
74
|
msgid "Are you sure you want to delete this record?"
|
|
72
75
|
msgstr ""
|
|
73
76
|
|
|
74
|
-
#: src/flask_exts/admin/model/view.py:
|
|
77
|
+
#: src/flask_exts/admin/model/view.py:271
|
|
75
78
|
msgid "Record was successfully created."
|
|
76
79
|
msgstr ""
|
|
77
80
|
|
|
78
|
-
#: src/flask_exts/admin/model/view.py:
|
|
79
|
-
#: src/flask_exts/admin/model/view.py:
|
|
80
|
-
#: src/flask_exts/admin/model/view.py:
|
|
81
|
-
#: src/flask_exts/admin/model/view.py:
|
|
81
|
+
#: src/flask_exts/admin/model/view.py:312
|
|
82
|
+
#: src/flask_exts/admin/model/view.py:353
|
|
83
|
+
#: src/flask_exts/admin/model/view.py:380
|
|
84
|
+
#: src/flask_exts/admin/model/view.py:440
|
|
82
85
|
msgid "Record does not exist."
|
|
83
86
|
msgstr ""
|
|
84
87
|
|
|
85
|
-
#: src/flask_exts/admin/model/view.py:
|
|
86
|
-
#: src/flask_exts/admin/model/view.py:
|
|
88
|
+
#: src/flask_exts/admin/model/view.py:319
|
|
89
|
+
#: src/flask_exts/admin/model/view.py:443
|
|
87
90
|
msgid "Record was successfully saved."
|
|
88
91
|
msgstr ""
|
|
89
92
|
|
|
90
|
-
#: src/flask_exts/admin/model/view.py:
|
|
93
|
+
#: src/flask_exts/admin/model/view.py:446
|
|
94
|
+
#: src/flask_exts/admin/model/view.py:453
|
|
95
|
+
#: src/flask_exts/admin/model/view.py:460 src/flask_exts/admin/sqla/view.py:482
|
|
96
|
+
#, python-format
|
|
97
|
+
msgid "Failed to update record. %(error)s"
|
|
98
|
+
msgstr ""
|
|
99
|
+
|
|
100
|
+
#: src/flask_exts/admin/model/view.py:464
|
|
101
|
+
msgid "Validation failed."
|
|
102
|
+
msgstr ""
|
|
103
|
+
|
|
104
|
+
#: src/flask_exts/admin/model/operations/export.py:146
|
|
105
|
+
#, python-format
|
|
106
|
+
msgid "Export type \"%(type)s\" not supported."
|
|
107
|
+
msgstr ""
|
|
108
|
+
|
|
109
|
+
#: src/flask_exts/admin/model/operations/export.py:172
|
|
91
110
|
msgid "Permission denied."
|
|
92
111
|
msgstr ""
|
|
93
112
|
|
|
94
|
-
#: src/flask_exts/admin/
|
|
113
|
+
#: src/flask_exts/admin/sqla/view.py:461
|
|
95
114
|
#, python-format
|
|
96
|
-
msgid "
|
|
115
|
+
msgid "Failed to create record. %(error)s"
|
|
97
116
|
msgstr ""
|
|
98
117
|
|
|
99
|
-
#: src/flask_exts/admin/
|
|
100
|
-
#: src/flask_exts/admin/model/view.py:1610
|
|
101
|
-
#: src/flask_exts/admin/model/view.py:1617
|
|
102
|
-
#: src/flask_exts/admin/sqla/view.py:474
|
|
118
|
+
#: src/flask_exts/admin/sqla/view.py:495
|
|
103
119
|
#, python-format
|
|
104
|
-
msgid "Failed to
|
|
120
|
+
msgid "Failed to delete record. %(error)s"
|
|
105
121
|
msgstr ""
|
|
106
122
|
|
|
107
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
123
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:59
|
|
108
124
|
msgid "equals"
|
|
109
125
|
msgstr ""
|
|
110
126
|
|
|
111
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
127
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:69
|
|
112
128
|
msgid "not equal"
|
|
113
129
|
msgstr ""
|
|
114
130
|
|
|
115
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
131
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:79
|
|
116
132
|
msgid "greater than"
|
|
117
133
|
msgstr ""
|
|
118
134
|
|
|
119
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
135
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:89
|
|
120
136
|
msgid "smaller than"
|
|
121
137
|
msgstr ""
|
|
122
138
|
|
|
123
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
139
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:99
|
|
124
140
|
msgid "contains"
|
|
125
141
|
msgstr ""
|
|
126
142
|
|
|
127
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
143
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:109
|
|
128
144
|
msgid "not contains"
|
|
129
145
|
msgstr ""
|
|
130
146
|
|
|
131
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
147
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:119
|
|
132
148
|
msgid "empty"
|
|
133
149
|
msgstr ""
|
|
134
150
|
|
|
135
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
151
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:135
|
|
136
152
|
msgid "in list"
|
|
137
153
|
msgstr ""
|
|
138
154
|
|
|
139
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
155
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:148
|
|
140
156
|
msgid "not in list"
|
|
141
157
|
msgstr ""
|
|
142
158
|
|
|
143
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
144
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
145
|
-
#: src/flask_exts/admin/sqla/filter.py:
|
|
159
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:323
|
|
160
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:358
|
|
161
|
+
#: src/flask_exts/admin/sqla/filter/filters.py:387
|
|
146
162
|
msgid "not between"
|
|
147
163
|
msgstr ""
|
|
148
164
|
|
|
149
|
-
#: src/flask_exts/
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
#: src/flask_exts/admin/sqla/view.py:487
|
|
155
|
-
#, python-format
|
|
156
|
-
msgid "Failed to delete record. %(error)s"
|
|
157
|
-
msgstr ""
|
|
158
|
-
|
|
159
|
-
#: src/flask_exts/template/forms/fields/ajax_select.py:60
|
|
160
|
-
#: src/flask_exts/template/forms/fields/ajax_select.py:110
|
|
161
|
-
#: src/flask_exts/template/forms/fields/sqla.py:118
|
|
162
|
-
#: src/flask_exts/template/forms/fields/sqla.py:170
|
|
163
|
-
#: src/flask_exts/template/forms/fields/sqla.py:175
|
|
165
|
+
#: src/flask_exts/forms/fields/ajax_select.py:60
|
|
166
|
+
#: src/flask_exts/forms/fields/ajax_select.py:109
|
|
167
|
+
#: src/flask_exts/forms/fields/sqla.py:120
|
|
168
|
+
#: src/flask_exts/forms/fields/sqla.py:172
|
|
169
|
+
#: src/flask_exts/forms/fields/sqla.py:177
|
|
164
170
|
msgid "Not a valid choice"
|
|
165
171
|
msgstr ""
|
|
166
172
|
|
|
167
|
-
#: src/flask_exts/
|
|
173
|
+
#: src/flask_exts/forms/fields/datetime.py:103
|
|
168
174
|
msgid "Invalid time format"
|
|
169
175
|
msgstr ""
|
|
170
176
|
|
|
171
|
-
#: src/flask_exts/
|
|
172
|
-
#: src/flask_exts/
|
|
177
|
+
#: src/flask_exts/forms/fields/file.py:68
|
|
178
|
+
#: src/flask_exts/forms/fields/file.py:78
|
|
173
179
|
#, python-format
|
|
174
180
|
msgid "File \"%s\" already exists."
|
|
175
181
|
msgstr ""
|
|
176
182
|
|
|
177
|
-
#: src/flask_exts/
|
|
183
|
+
#: src/flask_exts/forms/fields/json.py:15
|
|
178
184
|
msgid "Invalid JSON"
|
|
179
185
|
msgstr ""
|
|
180
186
|
|
|
181
|
-
#: src/flask_exts/
|
|
187
|
+
#: src/flask_exts/forms/fields/select.py:64
|
|
182
188
|
msgid "Invalid Choice: could not coerce"
|
|
183
189
|
msgstr ""
|
|
184
190
|
|
|
185
|
-
#: src/flask_exts/
|
|
191
|
+
#: src/flask_exts/forms/form/csrf.py:54
|
|
186
192
|
msgid "CSRF token expired."
|
|
187
193
|
msgstr ""
|
|
188
194
|
|
|
189
|
-
#: src/flask_exts/
|
|
195
|
+
#: src/flask_exts/forms/validators/field_list.py:13
|
|
190
196
|
msgid "This field requires at least one item."
|
|
191
197
|
msgstr ""
|
|
192
198
|
|
|
193
|
-
#: src/flask_exts/
|
|
199
|
+
#: src/flask_exts/forms/validators/file.py:18
|
|
194
200
|
msgid "This field is required."
|
|
195
201
|
msgstr ""
|
|
196
202
|
|
|
197
|
-
#: src/flask_exts/
|
|
203
|
+
#: src/flask_exts/forms/validators/file.py:50
|
|
198
204
|
#, python-brace-format
|
|
199
205
|
msgid "File does not have an approved extension: {extensions}"
|
|
200
206
|
msgstr ""
|
|
201
207
|
|
|
202
|
-
#: src/flask_exts/
|
|
208
|
+
#: src/flask_exts/forms/validators/file.py:85
|
|
203
209
|
#, python-brace-format
|
|
204
210
|
msgid "File must be between {min_size} and {max_size} bytes."
|
|
205
211
|
msgstr ""
|
|
206
212
|
|
|
207
|
-
#: src/flask_exts/
|
|
213
|
+
#: src/flask_exts/forms/validators/sqla.py:38
|
|
208
214
|
msgid "Already exists."
|
|
209
215
|
msgstr ""
|
|
210
216
|
|
|
211
|
-
#: src/flask_exts/
|
|
217
|
+
#: src/flask_exts/forms/validators/sqla.py:56
|
|
212
218
|
#, python-format
|
|
213
219
|
msgid "At least %(num)d item is required"
|
|
214
220
|
msgid_plural "At least %(num)d items are required"
|
|
215
221
|
msgstr[0] ""
|
|
216
222
|
msgstr[1] ""
|
|
217
223
|
|
|
218
|
-
#: src/flask_exts/
|
|
224
|
+
#: src/flask_exts/forms/widgets/select.py:71
|
|
219
225
|
msgid "Please select model"
|
|
220
226
|
msgstr ""
|
|
221
227
|
|
|
222
228
|
#: src/flask_exts/templates/admin/model/create.html:8
|
|
223
|
-
#: src/flask_exts/templates/admin/model/edit.html:7
|
|
224
229
|
msgid "List"
|
|
225
230
|
msgstr ""
|
|
226
231
|
|
|
227
232
|
#: src/flask_exts/templates/admin/model/create.html:11
|
|
228
|
-
#: src/flask_exts/templates/admin/model/edit.html:11
|
|
229
233
|
msgid "Create"
|
|
230
234
|
msgstr ""
|
|
231
235
|
|
|
232
|
-
#: src/flask_exts/templates/admin/model/edit.html:15
|
|
233
|
-
msgid "Edit"
|
|
234
|
-
msgstr ""
|
|
235
|
-
|
|
236
|
-
#: src/flask_exts/templates/admin/model/edit.html:18
|
|
237
|
-
msgid "Details"
|
|
238
|
-
msgstr ""
|
|
239
|
-
|
|
240
236
|
#: src/flask_exts/templates/admin/model/modals/create.html:2
|
|
241
237
|
msgid "Create New Record"
|
|
242
238
|
msgstr ""
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Advanced usage
|
|
2
|
+
==============
|
|
3
|
+
|
|
4
|
+
This section covers advanced patterns for using Flask-Exts in larger projects,
|
|
5
|
+
including database configuration and application lifecycle management.
|
|
6
|
+
|
|
7
|
+
Use the pages in this section when you need more control over how extensions are
|
|
8
|
+
initialized, configured, or integrated with your application structure.
|
|
9
|
+
|
|
10
|
+
.. toctree::
|
|
11
|
+
:maxdepth: 2
|
|
12
|
+
|
|
13
|
+
database
|
|
@@ -4,14 +4,14 @@ API
|
|
|
4
4
|
Admin
|
|
5
5
|
-----
|
|
6
6
|
|
|
7
|
-
.. automodule:: flask_exts.
|
|
7
|
+
.. automodule:: flask_exts.admin.base
|
|
8
8
|
:members:
|
|
9
9
|
:inherited-members:
|
|
10
10
|
|
|
11
11
|
view
|
|
12
12
|
-----
|
|
13
13
|
|
|
14
|
-
.. autoclass:: flask_exts.
|
|
14
|
+
.. autoclass:: flask_exts.admin.view.View
|
|
15
15
|
:members:
|
|
16
16
|
|
|
17
17
|
|
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
# add these directories to sys.path here. If the directory is relative to the
|
|
11
11
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
12
12
|
#
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
|
|
16
|
+
sys.path.insert(0, os.path.abspath("../src"))
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
# -- Project information -----------------------------------------------------
|
|
@@ -31,12 +32,12 @@ extensions = [
|
|
|
31
32
|
"sphinx.ext.intersphinx",
|
|
32
33
|
]
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
intersphinx_mapping = {
|
|
36
|
+
"python": ("https://docs.python.org/3/", None),
|
|
37
|
+
"flask": ("https://flask.palletsprojects.com/en/latest/", None),
|
|
38
|
+
"sphinx": ("https://www.sphinx-doc.org/en/master/", None),
|
|
39
|
+
}
|
|
40
|
+
intersphinx_disabled_domains = ["std"]
|
|
40
41
|
|
|
41
42
|
templates_path = ["_templates"]
|
|
42
43
|
|