flask-appbuilder 5.2.0__tar.gz → 5.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.
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/CHANGELOG.rst +7 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/PKG-INFO +1 -1
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/SOURCES.txt +7 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/PKG-INFO +1 -1
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/__init__.py +1 -1
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/interface.py +1 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/manager.py +59 -7
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/group/api.py +2 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/api.py +2 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/views.py +40 -1
- flask_appbuilder-5.2.1/flask_appbuilder/views.py +566 -0
- flask_appbuilder-5.2.1/tests/test_detached_user.py +311 -0
- flask_appbuilder-5.2.1/tests/test_hooks.py +245 -0
- flask_appbuilder-5.2.1/tests/test_json_coverage_fixes.py +153 -0
- flask_appbuilder-5.2.1/tests/test_json_edge_cases.py +269 -0
- flask_appbuilder-5.2.1/tests/test_json_support.py +361 -0
- flask_appbuilder-5.2.1/tests/test_security_manager.py +20 -0
- flask_appbuilder-5.2.1/tests/test_security_signals.py +754 -0
- flask_appbuilder-5.2.0/flask_appbuilder/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.coveragerc +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.env +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/ISSUE_TEMPLATE.md +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/prlint.json +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/stale.yml +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/workflows/ci.yml +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/workflows/odbcinst.ini +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.gitignore +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/CONTRIBUTING.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/dependency_links.txt +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/entry_points.txt +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/not-zip-safe +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/requires.txt +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/top_level.txt +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/LICENSE +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/MANIFEST.in +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/RELEASE.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/babel_extract.sh +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/babel_init.sh +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/bootswatch_update.sh +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/db_create.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/db_migrate.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/db_upgrade.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/hash_db_password.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/migrate_db_0.7.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/migrate_db_1.3.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/sqlite_upgrade_1.3.sql +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docker-compose.yml +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/Makefile +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_static/Flask-AppBuilder.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_templates/layout.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/LICENSE +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/README +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/layout.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/relations.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/static/Flask-AppBuilder.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/static/flasky.css_t +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/theme.conf +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask_small/layout.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask_small/static/flasky.css_t +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask_small/theme.conf +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask_theme_support.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/actions.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/addons.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/advanced.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/api.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/cli.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/conf.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/config.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/customizing.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/diagrams.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/generic_datasource.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/i18n.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/ListThumbnail.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/chart.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/chart_time1.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/chart_time2.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/charts.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/contact_list.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/contacts.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/direct_chart.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/fab.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/group_list.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/grouped_chart.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/groups.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/images_list.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/list_cascade.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/list_cascade_block.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/list_compact_inline.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/list_master_detail.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/login.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/login_db.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/oauth_login.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/oauth_login_one_provider.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/security.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/simpleview2.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/swagger001.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/swagger002.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/index.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/installation.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/intro.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/make.bat +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/multipledbs.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/quickcharts.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/quickfiles.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/quickhowto.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/quickminimal.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/relations.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/rest_api.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/security.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/templates.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/user_registration.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/versionmigration.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/views.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/base_api/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/base_api/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/base_api/app/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/base_api/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/basefilter/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/app/security.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/sec.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/sec_forms.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/sec_views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/sec.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/sec_forms.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/sec_views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/factoryapp/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/.gitignore +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/forms.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/security.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/translations/es/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/translations/es/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/translations/es/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/translations/es/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/data.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/bdist.linux-i686/egg/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/bdist.linux-i686/egg/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/bdist.linux-i686/egg/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/lib/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/lib/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/lib/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.po~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.po~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/forms.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/indexview.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/sec.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/sec_models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/sec_views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abBtnAdd.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abBtnDelete.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abBtnEdit.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abBtnShow.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abDate.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abMenuPageSize.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abModalOkCancel.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abModelSearch.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abModelTable.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abPagination.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abSelect.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/css/clean-blog.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/css/scrolling-nav.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/img/brand.jpg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/img/loading.gif +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Controllers/alertsCtrl.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Controllers/searchCtrl.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Controllers/tableCtrl.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Directives/bigDirectives.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Directives/btnDirectives.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Services/apiService.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/angular.min.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/app.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/clean-blog.min.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/scrolling-nav.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/appbuilder/index.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/index.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/list_angulajs.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/list_contacts.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/list_json.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/mylist.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/new_base.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/show_contacts.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/widgets/list.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/widgets/list_override.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/.coverage +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/migrate_db_0.7.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/translations/es/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/translations/es/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickminimal/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/encodings.xml +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/misc.xml +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/modules.xml +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/quicksqlviews.iml +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/workspace.xml +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/static/css/landing-page.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/templates/mybase.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/.babelrc +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/README.md +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/package-lock.json +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/package.json +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/package.json.react-original +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/public/favicon.ico +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/public/index.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/public/manifest.json +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/App.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/api/Api.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/components/CRUDButtons.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/components/Forms.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/components/Table.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/index.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/webpack.config.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/templates/base.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/templates/react.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/.gitignore +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/forms.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/templates/404.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/app/templates/method3.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/NAMES.DIC +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/README.rst +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/babel/babel.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/babel/messages.pot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/babel/messages.pot~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/config.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/run.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/testdata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/_compat.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/actions.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/api/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/api/convert.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/api/manager.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/api/schemas.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/babel/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/babel/manager.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/babel/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/base.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/basemanager.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/baseviews.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/charts/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/charts/jsontools.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/charts/views.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/charts/widgets.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/cli.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/const.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/exceptions.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/fields.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/fieldwidgets.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/filemanager.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/filters.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/forms.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/hooks.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/menu.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/messages.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/base.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/decorators.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/filters.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/generic/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/generic/filters.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/generic/interface.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/group.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/mixins.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/base.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/base_legacy.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/filters.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/decorators.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/events.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/forms.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/registerviews.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/saml/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/saml/metadata.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/saml/types.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/saml/utils.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/schemas.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/signals.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/api_key/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/api_key/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/api_key/schema.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/group/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/group/schema.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/permission/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/permission/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/permission_view_menu/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/permission_view_menu/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/role/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/role/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/role/schema.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/schema.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/validator.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/view_menu/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/view_menu/api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/manager.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/utils.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/.DS_Store +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/ab.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/bootstrap-datepicker/bootstrap-datepicker3.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/bootstrap.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/bootstrap.min.css.map +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/flags/flags16.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/all.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/brands.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/fontawesome.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/regular.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/solid.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/svg-with-js.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/v4-font-face.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/v4-shims.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/v5-font-face.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/images/flags16.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/select2/select2-bootstrap.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/select2/select2.min.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/swagger/swagger-ui.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/amelia.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/cerulean.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/cosmo.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/cyborg.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/darkly.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/flatly.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/journal.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/lumen.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/paper.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/readable.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/sandstone.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/simplex.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/slate.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/solar.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/spacelab.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/superhero.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/united.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/yeti.css +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-brands-400.ttf +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-brands-400.woff2 +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-regular-400.ttf +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-regular-400.woff2 +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-solid-900.ttf +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-solid-900.woff2 +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-v4compatibility.ttf +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-v4compatibility.woff2 +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.eot +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.svg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.ttf +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.woff +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/img/fab.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/img/glyphicons-halflings-white.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/img/glyphicons-halflings.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/ab.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/ab_actions.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/ab_filters.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/ab_keep_tab.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/bootstrap-datepicker/bootstrap-datepicker.min.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/bootstrap.min.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/google_charts.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/jquery-latest.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/select2/select2.min.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/swagger-ui-bundle.js +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/_formhelpers.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/base.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/baselayout.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/baselib.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/flash.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/footer.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/alert.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/charts/chart.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/charts/chart_time.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/charts/jsonchart.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/confirm.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/lib.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/add.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/edit.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/edit_cascade.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/left_master_detail.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/list.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/multiple_views.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/search.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/show.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/show_cascade.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/activation.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/login_db.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/login_ldap.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/login_oauth.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/login_saml.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/register_mail.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/register_oauth.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/base_list.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/chart.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/direct_chart.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/form.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/form_horizontal.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/form_inline.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/form_vertical.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/group_form_list.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_block.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_carousel.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_item.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_link.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_master.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_thumbnail.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/multiple_chart.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/roles/list.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/roles/show.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/search.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/show.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/show_block.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/show_vertical.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/index.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/init.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/navbar.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/navbar_menu.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/navbar_right.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/swagger/swagger.html +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/de/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/de/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/el/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/el/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/es/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/es/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/fa/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/fa/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/fr/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/it/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/it/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ja_JP/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ja_JP/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ko/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ko/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/nl/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/nl/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pl/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pl/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.po~ +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt_BR/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt_BR/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ru/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ru/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/sl/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/sl/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/tr/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/tr/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/zh/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/zh/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/zh_HK/LC_MESSAGES/messages.mo +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/zh_HK/LC_MESSAGES/messages.po +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/upload.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/urltools.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/utils/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/utils/base.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/utils/legacy.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/utils/limit.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/validators.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/widgets.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/ListThumbnail.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/chart.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/chart_time1.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/chart_time2.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/charts.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/contact_list.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/contacts.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/direct_chart.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/fab.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/group_list.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/grouped_chart.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/groups.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/images_list.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/list_cascade.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/list_cascade_block.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/list_compact_inline.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/list_master_detail.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/login.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/login_db.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/login_oauth.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/login_oid.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/security.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/simpleview2.png +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/release.sh +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/scripts/babel_extract.sh +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/scripts/babel_init.sh +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/setup.cfg +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/setup.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/base.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/config_api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/config_oauth.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/config_security.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/config_security_api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/const.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/fixtures/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/fixtures/addon_manager.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/fixtures/data_models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/fixtures/users.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_auth_ldap.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_auth_oauth.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_base_security_manager.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_mvc_security.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_password_complexity.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_rate_limiter.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/sqla/__init__.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/sqla/models.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_addon.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_custom_indexview.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_fab_cli.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_menu.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_mvc.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_mvc_oauth.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_security_api.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_sqlalchemy.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_urltools.py +0 -0
- {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tox.ini +0 -0
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
Flask-AppBuilder ChangeLog
|
|
2
2
|
==========================
|
|
3
3
|
|
|
4
|
+
Improvements and Bug fixes on 5.2.1
|
|
5
|
+
-----------------------------------
|
|
6
|
+
|
|
7
|
+
- fix: pass outer_default_load to apply_all (#2449) [skrepkaq]
|
|
8
|
+
- feat: add missing CRUD hooks and auth event hooks (#2450) [Daniel Vaz Gaspar]
|
|
9
|
+
- fix(security): remove OAuth token values from debug log statements (#2440) [Daniel Vaz Gaspar]
|
|
10
|
+
|
|
4
11
|
Improvements and Bug fixes on 5.2.0
|
|
5
12
|
-----------------------------------
|
|
6
13
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flask-appbuilder
|
|
3
|
-
Version: 5.2.
|
|
3
|
+
Version: 5.2.1
|
|
4
4
|
Summary: Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more.
|
|
5
5
|
Home-page: https://github.com/dpgaspar/flask-appbuilder/
|
|
6
6
|
Author: Daniel Vaz Gaspar
|
|
@@ -782,11 +782,18 @@ tests/const.py
|
|
|
782
782
|
tests/test_addon.py
|
|
783
783
|
tests/test_api.py
|
|
784
784
|
tests/test_custom_indexview.py
|
|
785
|
+
tests/test_detached_user.py
|
|
785
786
|
tests/test_fab_cli.py
|
|
787
|
+
tests/test_hooks.py
|
|
788
|
+
tests/test_json_coverage_fixes.py
|
|
789
|
+
tests/test_json_edge_cases.py
|
|
790
|
+
tests/test_json_support.py
|
|
786
791
|
tests/test_menu.py
|
|
787
792
|
tests/test_mvc.py
|
|
788
793
|
tests/test_mvc_oauth.py
|
|
789
794
|
tests/test_security_api.py
|
|
795
|
+
tests/test_security_manager.py
|
|
796
|
+
tests/test_security_signals.py
|
|
790
797
|
tests/test_sqlalchemy.py
|
|
791
798
|
tests/test_urltools.py
|
|
792
799
|
tests/fixtures/__init__.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flask_appbuilder
|
|
3
|
-
Version: 5.2.
|
|
3
|
+
Version: 5.2.1
|
|
4
4
|
Summary: Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more.
|
|
5
5
|
Home-page: https://github.com/dpgaspar/flask-appbuilder/
|
|
6
6
|
Author: Daniel Vaz Gaspar
|
|
@@ -16,6 +16,7 @@ from flask_limiter.util import get_remote_address
|
|
|
16
16
|
from flask_login import current_user, LoginManager
|
|
17
17
|
import jwt
|
|
18
18
|
from packaging.version import Version
|
|
19
|
+
from sqlalchemy import inspect as sa_inspect
|
|
19
20
|
from werkzeug.security import check_password_hash, generate_password_hash
|
|
20
21
|
|
|
21
22
|
from .api import SecurityApi
|
|
@@ -134,7 +135,7 @@ def _oauth_tokengetter(token=None):
|
|
|
134
135
|
from session cookie.
|
|
135
136
|
"""
|
|
136
137
|
token = session.get("oauth")
|
|
137
|
-
log.debug("Token Get:
|
|
138
|
+
log.debug("Token Get: retrieved OAuth token from session")
|
|
138
139
|
return token
|
|
139
140
|
|
|
140
141
|
|
|
@@ -975,6 +976,27 @@ class BaseSecurityManager(AbstractSecurityManager):
|
|
|
975
976
|
)
|
|
976
977
|
self.update_user(user)
|
|
977
978
|
|
|
979
|
+
def on_user_login(self, user) -> None:
|
|
980
|
+
"""Called after a successful user login.
|
|
981
|
+
Override to add custom logic (e.g., audit logging).
|
|
982
|
+
|
|
983
|
+
:param user: The authenticated user model
|
|
984
|
+
"""
|
|
985
|
+
|
|
986
|
+
def on_user_login_failed(self, user) -> None:
|
|
987
|
+
"""Called after a failed user login attempt.
|
|
988
|
+
Override to add custom logic (e.g., audit logging).
|
|
989
|
+
|
|
990
|
+
:param user: The identified (but not authenticated) user model
|
|
991
|
+
"""
|
|
992
|
+
|
|
993
|
+
def on_user_logout(self, user) -> None:
|
|
994
|
+
"""Called when a user logs out.
|
|
995
|
+
Override to add custom logic (e.g., audit logging).
|
|
996
|
+
|
|
997
|
+
:param user: The user model that is logging out
|
|
998
|
+
"""
|
|
999
|
+
|
|
978
1000
|
def update_user_auth_stat(self, user, success=True):
|
|
979
1001
|
"""
|
|
980
1002
|
Update user authentication stats upon successful/unsuccessful
|
|
@@ -1000,6 +1022,10 @@ class BaseSecurityManager(AbstractSecurityManager):
|
|
|
1000
1022
|
else:
|
|
1001
1023
|
user.fail_login_count += 1
|
|
1002
1024
|
self.update_user(user)
|
|
1025
|
+
if success:
|
|
1026
|
+
self.on_user_login(user)
|
|
1027
|
+
else:
|
|
1028
|
+
self.on_user_login_failed(user)
|
|
1003
1029
|
|
|
1004
1030
|
def auth_user_db(self, username, password):
|
|
1005
1031
|
"""
|
|
@@ -1867,21 +1893,47 @@ class BaseSecurityManager(AbstractSecurityManager):
|
|
|
1867
1893
|
|
|
1868
1894
|
return result
|
|
1869
1895
|
|
|
1896
|
+
def _is_user_detached(self, user) -> bool:
|
|
1897
|
+
"""Check if a SQLAlchemy user instance is detached from the session."""
|
|
1898
|
+
try:
|
|
1899
|
+
return sa_inspect(user).detached
|
|
1900
|
+
except Exception:
|
|
1901
|
+
return False
|
|
1902
|
+
|
|
1903
|
+
def _get_safe_user(self, user):
|
|
1904
|
+
"""Return an attached ORM user instance, re-fetching from DB if needed.
|
|
1905
|
+
Handles detached ORM instances and non-ORM objects (e.g. LocalProxy).
|
|
1906
|
+
Returns None if the user cannot be resolved.
|
|
1907
|
+
"""
|
|
1908
|
+
if user is None:
|
|
1909
|
+
return None
|
|
1910
|
+
if self._is_user_detached(user):
|
|
1911
|
+
try:
|
|
1912
|
+
identity = sa_inspect(user).identity
|
|
1913
|
+
except Exception:
|
|
1914
|
+
return None
|
|
1915
|
+
if identity:
|
|
1916
|
+
return self.get_user_by_id(identity[0])
|
|
1917
|
+
return None
|
|
1918
|
+
return user
|
|
1919
|
+
|
|
1870
1920
|
def has_access(self, permission_name: str, view_name: str) -> bool:
|
|
1871
1921
|
"""
|
|
1872
1922
|
Check if current user or public has access to view or menu
|
|
1873
1923
|
"""
|
|
1874
1924
|
# Check API key authenticated user first
|
|
1875
1925
|
if getattr(g, "_api_key_user", False) and hasattr(g, "user"):
|
|
1876
|
-
user = g.user
|
|
1926
|
+
user = self._get_safe_user(g.user)
|
|
1927
|
+
if user and user.is_active:
|
|
1928
|
+
return self._has_view_access(user, permission_name, view_name)
|
|
1929
|
+
if current_user.is_authenticated:
|
|
1930
|
+
user = self._get_safe_user(g.user)
|
|
1877
1931
|
if user and user.is_active:
|
|
1878
1932
|
return self._has_view_access(user, permission_name, view_name)
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
elif current_user_jwt and current_user_jwt.is_active:
|
|
1933
|
+
return False
|
|
1934
|
+
if current_user_jwt and current_user_jwt.is_active:
|
|
1882
1935
|
return self._has_view_access(current_user_jwt, permission_name, view_name)
|
|
1883
|
-
|
|
1884
|
-
return self.is_item_public(permission_name, view_name)
|
|
1936
|
+
return self.is_item_public(permission_name, view_name)
|
|
1885
1937
|
|
|
1886
1938
|
def get_user_menu_access(self, menu_names: List[str] = None) -> Set[str]:
|
|
1887
1939
|
if current_user.is_authenticated:
|
{flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/group/api.py
RENAMED
|
@@ -120,6 +120,7 @@ class GroupApi(ModelRestApi):
|
|
|
120
120
|
|
|
121
121
|
self.pre_add(model)
|
|
122
122
|
self.datamodel.add(model)
|
|
123
|
+
self.post_add(model)
|
|
123
124
|
|
|
124
125
|
return self.response(201, id=model.id)
|
|
125
126
|
|
|
@@ -216,6 +217,7 @@ class GroupApi(ModelRestApi):
|
|
|
216
217
|
model.users = users
|
|
217
218
|
self.pre_update(model)
|
|
218
219
|
self.datamodel.edit(model)
|
|
220
|
+
self.post_update(model)
|
|
219
221
|
return self.response(
|
|
220
222
|
200,
|
|
221
223
|
**{API_RESULT_RES_KEY: self.edit_model_schema.dump(item, many=False)},
|
{flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/api.py
RENAMED
|
@@ -165,6 +165,7 @@ class UserApi(ModelRestApi):
|
|
|
165
165
|
|
|
166
166
|
self.pre_add(model)
|
|
167
167
|
self.datamodel.add(model)
|
|
168
|
+
self.post_add(model)
|
|
168
169
|
return self.response(201, id=model.id)
|
|
169
170
|
except ValidationError as error:
|
|
170
171
|
return self.response_400(message=error.messages)
|
|
@@ -281,6 +282,7 @@ class UserApi(ModelRestApi):
|
|
|
281
282
|
|
|
282
283
|
self.pre_update(model, item)
|
|
283
284
|
self.datamodel.edit(model)
|
|
285
|
+
self.post_update(model)
|
|
284
286
|
return self.response(
|
|
285
287
|
200,
|
|
286
288
|
**{API_RESULT_RES_KEY: self.edit_model_schema.dump(item, many=False)},
|
|
@@ -577,9 +577,33 @@ class AuthView(BaseView):
|
|
|
577
577
|
def login(self):
|
|
578
578
|
pass
|
|
579
579
|
|
|
580
|
+
def _get_authenticated_user(self):
|
|
581
|
+
"""Resolve the current user before logout clears the session.
|
|
582
|
+
Returns a fresh User model from DB, or None if not authenticated.
|
|
583
|
+
Note: g.user may be a LocalProxy that becomes anonymous after
|
|
584
|
+
logout_user(), or a detached ORM instance whose attribute access
|
|
585
|
+
raises DetachedInstanceError. We extract the id and re-fetch
|
|
586
|
+
a concrete, session-bound instance before logout.
|
|
587
|
+
"""
|
|
588
|
+
user = getattr(g, "user", None)
|
|
589
|
+
if user is None:
|
|
590
|
+
return None
|
|
591
|
+
try:
|
|
592
|
+
if not user.is_authenticated:
|
|
593
|
+
return None
|
|
594
|
+
user_id = user.id
|
|
595
|
+
except Exception:
|
|
596
|
+
return None
|
|
597
|
+
if user_id is not None:
|
|
598
|
+
return self.appbuilder.sm.get_user_by_id(user_id)
|
|
599
|
+
return None
|
|
600
|
+
|
|
580
601
|
@expose("/logout/")
|
|
581
602
|
def logout(self):
|
|
603
|
+
user = self._get_authenticated_user()
|
|
582
604
|
logout_user()
|
|
605
|
+
if user is not None:
|
|
606
|
+
self.appbuilder.sm.on_user_logout(user)
|
|
583
607
|
return redirect(
|
|
584
608
|
current_app.config.get(
|
|
585
609
|
"LOGOUT_REDIRECT_URL", self.appbuilder.get_url_for_index
|
|
@@ -698,7 +722,7 @@ class AuthOAuthView(AuthView):
|
|
|
698
722
|
if resp is None:
|
|
699
723
|
flash("You denied the request to sign in.", "warning")
|
|
700
724
|
return redirect(self.appbuilder.get_url_for_login)
|
|
701
|
-
log.debug("OAUTH Authorized resp: %s",
|
|
725
|
+
log.debug("OAUTH Authorized resp received for provider: %s", provider)
|
|
702
726
|
# Retrieves specific user info from the provider
|
|
703
727
|
try:
|
|
704
728
|
self.appbuilder.sm.set_oauth_session(provider, resp)
|
|
@@ -865,7 +889,10 @@ class AuthSAMLView(AuthView):
|
|
|
865
889
|
try:
|
|
866
890
|
idp = session.get("saml_idp")
|
|
867
891
|
if not idp:
|
|
892
|
+
user = self._get_authenticated_user()
|
|
868
893
|
logout_user()
|
|
894
|
+
if user is not None:
|
|
895
|
+
self.appbuilder.sm.on_user_logout(user)
|
|
869
896
|
return redirect(self.appbuilder.get_url_for_index)
|
|
870
897
|
|
|
871
898
|
url, should_logout = self.appbuilder.sm.get_saml_logout_redirect_url(
|
|
@@ -874,16 +901,25 @@ class AuthSAMLView(AuthView):
|
|
|
874
901
|
session_index=session.get("saml_session_index"),
|
|
875
902
|
)
|
|
876
903
|
if should_logout:
|
|
904
|
+
user = self._get_authenticated_user()
|
|
877
905
|
logout_user()
|
|
906
|
+
if user is not None:
|
|
907
|
+
self.appbuilder.sm.on_user_logout(user)
|
|
878
908
|
return redirect(url or self.appbuilder.get_url_for_index)
|
|
879
909
|
|
|
880
910
|
except (OneLogin_Saml2_Error, OneLogin_Saml2_ValidationError) as e:
|
|
881
911
|
log.error("SAML SLO validation error: %s", e)
|
|
912
|
+
user = self._get_authenticated_user()
|
|
882
913
|
logout_user()
|
|
914
|
+
if user is not None:
|
|
915
|
+
self.appbuilder.sm.on_user_logout(user)
|
|
883
916
|
return redirect(self.appbuilder.get_url_for_index)
|
|
884
917
|
except ValueError as e:
|
|
885
918
|
log.error("SAML SLO configuration error: %s", e)
|
|
919
|
+
user = self._get_authenticated_user()
|
|
886
920
|
logout_user()
|
|
921
|
+
if user is not None:
|
|
922
|
+
self.appbuilder.sm.on_user_logout(user)
|
|
887
923
|
return redirect(self.appbuilder.get_url_for_index)
|
|
888
924
|
|
|
889
925
|
@expose("/logout/")
|
|
@@ -895,7 +931,10 @@ class AuthSAMLView(AuthView):
|
|
|
895
931
|
return redirect(url_for(".slo"))
|
|
896
932
|
except Exception:
|
|
897
933
|
pass
|
|
934
|
+
user = self._get_authenticated_user()
|
|
898
935
|
logout_user()
|
|
936
|
+
if user is not None:
|
|
937
|
+
self.appbuilder.sm.on_user_logout(user)
|
|
899
938
|
return redirect(
|
|
900
939
|
current_app.config.get(
|
|
901
940
|
"LOGOUT_REDIRECT_URL", self.appbuilder.get_url_for_index
|