flask-appbuilder 5.2.2rc2__tar.gz → 5.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (794) hide show
  1. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/CHANGELOG.rst +8 -1
  2. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/Flask_AppBuilder.egg-info/PKG-INFO +1 -1
  3. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/PKG-INFO +1 -1
  4. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/__init__.py +1 -1
  5. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/_compat.py +6 -5
  6. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/baseviews.py +1 -1
  7. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/cli.py +0 -1
  8. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/filemanager.py +1 -1
  9. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/generic/filters.py +0 -1
  10. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/mixins.py +0 -1
  11. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/decorators.py +6 -3
  12. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/schemas.py +0 -1
  13. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/user/api.py +4 -8
  14. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/views.py +15 -7
  15. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/utils/base.py +0 -1
  16. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/views.py +0 -1
  17. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/widgets.py +0 -1
  18. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/setup.py +0 -1
  19. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/security/test_auth_ldap.py +45 -45
  20. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/security/test_auth_oauth.py +9 -9
  21. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/security/test_mvc_security.py +21 -2
  22. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_addon.py +0 -1
  23. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_custom_indexview.py +3 -3
  24. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_fab_cli.py +3 -3
  25. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_hooks.py +0 -1
  26. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_mvc.py +1 -1
  27. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_security_api.py +0 -1
  28. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.coveragerc +0 -0
  29. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.env +0 -0
  30. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.github/ISSUE_TEMPLATE.md +0 -0
  31. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  32. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.github/prlint.json +0 -0
  33. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.github/stale.yml +0 -0
  34. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.github/workflows/ci.yml +0 -0
  35. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.github/workflows/odbcinst.ini +0 -0
  36. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/.gitignore +0 -0
  37. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/CONTRIBUTING.rst +0 -0
  38. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/Flask_AppBuilder.egg-info/SOURCES.txt +0 -0
  39. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/Flask_AppBuilder.egg-info/dependency_links.txt +0 -0
  40. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/Flask_AppBuilder.egg-info/entry_points.txt +0 -0
  41. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/Flask_AppBuilder.egg-info/not-zip-safe +0 -0
  42. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/Flask_AppBuilder.egg-info/requires.txt +0 -0
  43. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/Flask_AppBuilder.egg-info/top_level.txt +0 -0
  44. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/LICENSE +0 -0
  45. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/MANIFEST.in +0 -0
  46. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/README.rst +0 -0
  47. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/RELEASE.rst +0 -0
  48. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/babel/babel.cfg +0 -0
  49. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/babel/messages.pot +0 -0
  50. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/babel_extract.sh +0 -0
  51. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/babel_init.sh +0 -0
  52. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/bootswatch_update.sh +0 -0
  53. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/config.py +0 -0
  54. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/db_create.py +0 -0
  55. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/db_migrate.py +0 -0
  56. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/db_upgrade.py +0 -0
  57. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/hash_db_password.py +0 -0
  58. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/migrate_db_0.7.py +0 -0
  59. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/migrate_db_1.3.py +0 -0
  60. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/bin/sqlite_upgrade_1.3.sql +0 -0
  61. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docker-compose.yml +0 -0
  62. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/Makefile +0 -0
  63. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_static/Flask-AppBuilder.png +0 -0
  64. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_templates/layout.html +0 -0
  65. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/LICENSE +0 -0
  66. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/README +0 -0
  67. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask/layout.html +0 -0
  68. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask/relations.html +0 -0
  69. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask/static/Flask-AppBuilder.png +0 -0
  70. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask/static/flasky.css_t +0 -0
  71. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask/theme.conf +0 -0
  72. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask_small/layout.html +0 -0
  73. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask_small/static/flasky.css_t +0 -0
  74. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask_small/theme.conf +0 -0
  75. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/_themes/flask_theme_support.py +0 -0
  76. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/actions.rst +0 -0
  77. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/addons.rst +0 -0
  78. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/advanced.rst +0 -0
  79. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/api.rst +0 -0
  80. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/cli.rst +0 -0
  81. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/conf.py +0 -0
  82. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/config.rst +0 -0
  83. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/customizing.rst +0 -0
  84. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/diagrams.rst +0 -0
  85. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/generic_datasource.rst +0 -0
  86. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/i18n.rst +0 -0
  87. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/ListThumbnail.png +0 -0
  88. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/chart.png +0 -0
  89. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/chart_time1.png +0 -0
  90. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/chart_time2.png +0 -0
  91. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/charts.png +0 -0
  92. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/contact_list.png +0 -0
  93. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/contacts.png +0 -0
  94. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/direct_chart.png +0 -0
  95. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/fab.png +0 -0
  96. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/group_list.png +0 -0
  97. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/grouped_chart.png +0 -0
  98. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/groups.png +0 -0
  99. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/images_list.png +0 -0
  100. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/list_cascade.png +0 -0
  101. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/list_cascade_block.png +0 -0
  102. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/list_compact_inline.png +0 -0
  103. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/list_master_detail.png +0 -0
  104. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/login.png +0 -0
  105. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/login_db.png +0 -0
  106. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/oauth_login.png +0 -0
  107. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/oauth_login_one_provider.png +0 -0
  108. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/security.png +0 -0
  109. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/simpleview2.png +0 -0
  110. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/swagger001.png +0 -0
  111. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/images/swagger002.png +0 -0
  112. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/index.rst +0 -0
  113. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/installation.rst +0 -0
  114. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/intro.rst +0 -0
  115. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/make.bat +0 -0
  116. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/multipledbs.rst +0 -0
  117. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/quickcharts.rst +0 -0
  118. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/quickfiles.rst +0 -0
  119. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/quickhowto.rst +0 -0
  120. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/quickminimal.rst +0 -0
  121. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/relations.rst +0 -0
  122. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/rest_api.rst +0 -0
  123. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/security.rst +0 -0
  124. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/templates.rst +0 -0
  125. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/user_registration.rst +0 -0
  126. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/versionmigration.rst +0 -0
  127. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/docs/views.rst +0 -0
  128. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/README.rst +0 -0
  129. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/base_api/README.rst +0 -0
  130. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/base_api/app/__init__.py +0 -0
  131. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/base_api/app/api.py +0 -0
  132. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/base_api/config.py +0 -0
  133. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/basefilter/babel/messages.pot~ +0 -0
  134. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/composite_keys/README.rst +0 -0
  135. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/composite_keys/app/__init__.py +0 -0
  136. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/composite_keys/app/models.py +0 -0
  137. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/composite_keys/app/views.py +0 -0
  138. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/composite_keys/config.py +0 -0
  139. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/composite_keys/testdata.py +0 -0
  140. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/NAMES.DIC +0 -0
  141. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/README.rst +0 -0
  142. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/app/__init__.py +0 -0
  143. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/app/api.py +0 -0
  144. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/app/models.py +0 -0
  145. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  146. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  147. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/babel/babel.cfg +0 -0
  148. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/babel/messages.pot +0 -0
  149. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/config.py +0 -0
  150. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/crud_rest_api/testdata.py +0 -0
  151. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/employees/README.rst +0 -0
  152. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/employees/app/__init__.py +0 -0
  153. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/employees/app/models.py +0 -0
  154. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/employees/app/security.py +0 -0
  155. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/employees/app/views.py +0 -0
  156. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/employees/babel/babel.cfg +0 -0
  157. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/employees/config.py +0 -0
  158. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/NAMES.DIC +0 -0
  159. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/README.rst +0 -0
  160. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/app/__init__.py +0 -0
  161. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/app/models.py +0 -0
  162. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  163. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  164. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/app/views.py +0 -0
  165. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/babel/babel.cfg +0 -0
  166. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/babel/messages.pot +0 -0
  167. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/config.py +0 -0
  168. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/enums/testdata.py +0 -0
  169. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/NAMES.DIC +0 -0
  170. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/README.rst +0 -0
  171. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/app/__init__.py +0 -0
  172. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/app/models.py +0 -0
  173. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/app/sec.py +0 -0
  174. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/app/sec_forms.py +0 -0
  175. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/app/sec_views.py +0 -0
  176. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  177. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  178. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/app/views.py +0 -0
  179. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/babel/babel.cfg +0 -0
  180. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/babel/messages.pot +0 -0
  181. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/babel/messages.pot~ +0 -0
  182. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/config.py +0 -0
  183. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity/testdata.py +0 -0
  184. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/NAMES.DIC +0 -0
  185. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/README.rst +0 -0
  186. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/app/__init__.py +0 -0
  187. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/app/models.py +0 -0
  188. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/app/sec.py +0 -0
  189. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/app/sec_forms.py +0 -0
  190. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/app/sec_views.py +0 -0
  191. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  192. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  193. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/app/views.py +0 -0
  194. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/babel/babel.cfg +0 -0
  195. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/babel/messages.pot +0 -0
  196. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/config.py +0 -0
  197. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/extendsecurity2/testdata.py +0 -0
  198. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/factoryapp/babel/messages.pot~ +0 -0
  199. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/NAMES.DIC +0 -0
  200. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/app/__init__.py +0 -0
  201. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/app/models.py +0 -0
  202. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  203. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  204. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/app/views.py +0 -0
  205. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/babel/babel.cfg +0 -0
  206. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/babel/messages.pot +0 -0
  207. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/babel/messages.pot~ +0 -0
  208. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/config.py +0 -0
  209. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/masterdetail/testdata.py +0 -0
  210. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/.gitignore +0 -0
  211. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/README.rst +0 -0
  212. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/app/__init__.py +0 -0
  213. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/app/forms.py +0 -0
  214. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/app/models.py +0 -0
  215. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/app/security.py +0 -0
  216. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/app/views.py +0 -0
  217. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/babel/babel.cfg +0 -0
  218. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/babel/messages.pot +0 -0
  219. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/config.py +0 -0
  220. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/oauth/run.py +0 -0
  221. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/README.rst +0 -0
  222. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/app/__init__.py +0 -0
  223. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/app/models.py +0 -0
  224. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/app/translations/es/LC_MESSAGES/messages.mo +0 -0
  225. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/app/translations/es/LC_MESSAGES/messages.po +0 -0
  226. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  227. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  228. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/app/views.py +0 -0
  229. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/babel/babel.cfg +0 -0
  230. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/config.py +0 -0
  231. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/productsale/run.py +0 -0
  232. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/app/__init__.py +0 -0
  233. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/app/models.py +0 -0
  234. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/app/translations/es/LC_MESSAGES/messages.mo +0 -0
  235. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/app/translations/es/LC_MESSAGES/messages.po +0 -0
  236. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  237. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  238. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/app/views.py +0 -0
  239. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/babel/babel.cfg +0 -0
  240. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/config.py +0 -0
  241. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/run.py +0 -0
  242. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickactions/testdata.py +0 -0
  243. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/README.rst +0 -0
  244. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/app/__init__.py +0 -0
  245. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/app/data.py +0 -0
  246. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/app/models.py +0 -0
  247. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  248. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  249. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/app/views.py +0 -0
  250. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/babel/babel.cfg +0 -0
  251. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/babel/messages.pot +0 -0
  252. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/babel/messages.pot~ +0 -0
  253. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts/config.py +0 -0
  254. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/app/__init__.py +0 -0
  255. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/app/models.py +0 -0
  256. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  257. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  258. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/app/views.py +0 -0
  259. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/babel/babel.cfg +0 -0
  260. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/babel/messages.pot +0 -0
  261. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/babel/messages.pot~ +0 -0
  262. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/build/bdist.linux-i686/egg/app/__init__.py +0 -0
  263. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/build/bdist.linux-i686/egg/app/models.py +0 -0
  264. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/build/bdist.linux-i686/egg/app/views.py +0 -0
  265. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/build/lib/app/__init__.py +0 -0
  266. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/build/lib/app/models.py +0 -0
  267. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/build/lib/app/views.py +0 -0
  268. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/config.py +0 -0
  269. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickcharts2/run.py +0 -0
  270. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/README.rst +0 -0
  271. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/__init__.py +0 -0
  272. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/models.py +0 -0
  273. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/translations/__init__.py +0 -0
  274. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.mo +0 -0
  275. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.po +0 -0
  276. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.po~ +0 -0
  277. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  278. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  279. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.po~ +0 -0
  280. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/app/views.py +0 -0
  281. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/babel/babel.cfg +0 -0
  282. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/babel/messages.pot +0 -0
  283. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/config.py +0 -0
  284. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickfiles/run.py +0 -0
  285. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/NAMES.DIC +0 -0
  286. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/README.rst +0 -0
  287. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/app/__init__.py +0 -0
  288. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/app/models.py +0 -0
  289. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  290. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  291. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/app/views.py +0 -0
  292. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/babel/babel.cfg +0 -0
  293. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/babel/messages.pot +0 -0
  294. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/babel/messages.pot~ +0 -0
  295. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/config.py +0 -0
  296. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto/testdata.py +0 -0
  297. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/NAMES.DIC +0 -0
  298. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/__init__.py +0 -0
  299. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/forms.py +0 -0
  300. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/indexview.py +0 -0
  301. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/models.py +0 -0
  302. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/sec.py +0 -0
  303. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/sec_models.py +0 -0
  304. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/sec_views.py +0 -0
  305. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abBtnAdd.html +0 -0
  306. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abBtnDelete.html +0 -0
  307. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abBtnEdit.html +0 -0
  308. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abBtnShow.html +0 -0
  309. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abDate.html +0 -0
  310. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abMenuPageSize.html +0 -0
  311. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abModalOkCancel.html +0 -0
  312. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abModelSearch.html +0 -0
  313. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abModelTable.html +0 -0
  314. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abPagination.html +0 -0
  315. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/angularAssets/abSelect.html +0 -0
  316. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/css/clean-blog.min.css +0 -0
  317. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/css/scrolling-nav.css +0 -0
  318. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/img/brand.jpg +0 -0
  319. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/img/loading.gif +0 -0
  320. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/Controllers/alertsCtrl.js +0 -0
  321. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/Controllers/searchCtrl.js +0 -0
  322. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/Controllers/tableCtrl.js +0 -0
  323. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/Directives/bigDirectives.js +0 -0
  324. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/Directives/btnDirectives.js +0 -0
  325. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/Services/apiService.js +0 -0
  326. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/angular.min.js +0 -0
  327. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/app.js +0 -0
  328. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/clean-blog.min.js +0 -0
  329. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/static/js/scrolling-nav.js +0 -0
  330. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/appbuilder/index.html +0 -0
  331. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/index.html +0 -0
  332. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/list_angulajs.html +0 -0
  333. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/list_contacts.html +0 -0
  334. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/list_json.html +0 -0
  335. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/mylist.html +0 -0
  336. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/new_base.html +0 -0
  337. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/show_contacts.html +0 -0
  338. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/widgets/list.html +0 -0
  339. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/templates/widgets/list_override.html +0 -0
  340. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  341. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  342. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/app/views.py +0 -0
  343. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/babel/babel.cfg +0 -0
  344. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/babel/messages.pot +0 -0
  345. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/babel/messages.pot~ +0 -0
  346. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/config.py +0 -0
  347. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/run.py +0 -0
  348. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto2/testdata.py +0 -0
  349. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/.coverage +0 -0
  350. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/NAMES.DIC +0 -0
  351. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/README.rst +0 -0
  352. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/app/__init__.py +0 -0
  353. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/app/models.py +0 -0
  354. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  355. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  356. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/app/views.py +0 -0
  357. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/babel/babel.cfg +0 -0
  358. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/babel/messages.pot +0 -0
  359. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/babel/messages.pot~ +0 -0
  360. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/config.py +0 -0
  361. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/migrate_db_0.7.py +0 -0
  362. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/run.py +0 -0
  363. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickhowto3/testdata.py +0 -0
  364. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/README.rst +0 -0
  365. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/app/__init__.py +0 -0
  366. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/app/models.py +0 -0
  367. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/app/translations/es/LC_MESSAGES/messages.mo +0 -0
  368. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/app/translations/es/LC_MESSAGES/messages.po +0 -0
  369. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  370. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  371. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/app/views.py +0 -0
  372. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/babel/babel.cfg +0 -0
  373. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickimages/config.py +0 -0
  374. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/NAMES.DIC +0 -0
  375. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/README.rst +0 -0
  376. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/app/__init__.py +0 -0
  377. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/app/models.py +0 -0
  378. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  379. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  380. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/app/views.py +0 -0
  381. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/babel/babel.cfg +0 -0
  382. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/babel/messages.pot +0 -0
  383. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/config.py +0 -0
  384. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickmigrate/testdata.py +0 -0
  385. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quickminimal/run.py +0 -0
  386. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/.idea/encodings.xml +0 -0
  387. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/.idea/misc.xml +0 -0
  388. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/.idea/modules.xml +0 -0
  389. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/.idea/quicksqlviews.iml +0 -0
  390. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/.idea/workspace.xml +0 -0
  391. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/NAMES.DIC +0 -0
  392. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/README.rst +0 -0
  393. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/app/__init__.py +0 -0
  394. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/app/models.py +0 -0
  395. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  396. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  397. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/app/views.py +0 -0
  398. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/babel/babel.cfg +0 -0
  399. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/babel/messages.pot +0 -0
  400. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/config.py +0 -0
  401. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicksqlviews/testdata.py +0 -0
  402. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/NAMES.DIC +0 -0
  403. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/README.rst +0 -0
  404. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/app/__init__.py +0 -0
  405. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/app/models.py +0 -0
  406. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/app/static/css/landing-page.css +0 -0
  407. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/app/templates/mybase.html +0 -0
  408. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  409. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  410. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/app/views.py +0 -0
  411. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/babel/babel.cfg +0 -0
  412. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/babel/messages.pot +0 -0
  413. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/babel/messages.pot~ +0 -0
  414. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/config.py +0 -0
  415. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/run.py +0 -0
  416. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/quicktemplates/testdata.py +0 -0
  417. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/NAMES.DIC +0 -0
  418. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/README.rst +0 -0
  419. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/__init__.py +0 -0
  420. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/api.py +0 -0
  421. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/models.py +0 -0
  422. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/.babelrc +0 -0
  423. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/README.md +0 -0
  424. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/package-lock.json +0 -0
  425. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/package.json +0 -0
  426. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/package.json.react-original +0 -0
  427. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/public/favicon.ico +0 -0
  428. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/public/index.html +0 -0
  429. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/public/manifest.json +0 -0
  430. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/src/App.js +0 -0
  431. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/src/api/Api.js +0 -0
  432. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/src/components/CRUDButtons.js +0 -0
  433. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/src/components/Forms.js +0 -0
  434. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/src/components/Table.js +0 -0
  435. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/src/index.js +0 -0
  436. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/static/webpack.config.js +0 -0
  437. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/templates/base.html +0 -0
  438. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/templates/react.html +0 -0
  439. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  440. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  441. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/babel/babel.cfg +0 -0
  442. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/babel/messages.pot +0 -0
  443. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/config.py +0 -0
  444. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/react-rest-api/testdata.py +0 -0
  445. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/NAMES.DIC +0 -0
  446. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/README.rst +0 -0
  447. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/app/__init__.py +0 -0
  448. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/app/models.py +0 -0
  449. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  450. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  451. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/app/views.py +0 -0
  452. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/babel/babel.cfg +0 -0
  453. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/babel/messages.pot +0 -0
  454. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/config.py +0 -0
  455. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/run.py +0 -0
  456. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/related_fields/testdata.py +0 -0
  457. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/.gitignore +0 -0
  458. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/README.rst +0 -0
  459. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/app/__init__.py +0 -0
  460. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/app/forms.py +0 -0
  461. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/app/templates/404.html +0 -0
  462. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  463. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  464. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/app/views.py +0 -0
  465. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/babel/babel.cfg +0 -0
  466. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/babel/messages.pot +0 -0
  467. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/config.py +0 -0
  468. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleform/run.py +0 -0
  469. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview1/README.rst +0 -0
  470. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview1/app/__init__.py +0 -0
  471. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview1/app/views.py +0 -0
  472. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview1/babel/babel.cfg +0 -0
  473. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview1/babel/messages.pot +0 -0
  474. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview1/config.py +0 -0
  475. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview1/run.py +0 -0
  476. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview2/app/__init__.py +0 -0
  477. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview2/app/templates/method3.html +0 -0
  478. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview2/app/views.py +0 -0
  479. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview2/babel/babel.cfg +0 -0
  480. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview2/babel/messages.pot +0 -0
  481. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview2/config.py +0 -0
  482. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/simpleview2/run.py +0 -0
  483. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/NAMES.DIC +0 -0
  484. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/README.rst +0 -0
  485. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/app/__init__.py +0 -0
  486. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/app/models.py +0 -0
  487. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  488. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  489. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/app/views.py +0 -0
  490. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/babel/babel.cfg +0 -0
  491. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/babel/messages.pot +0 -0
  492. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/babel/messages.pot~ +0 -0
  493. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/config.py +0 -0
  494. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/run.py +0 -0
  495. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/user_registration/testdata.py +0 -0
  496. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/NAMES.DIC +0 -0
  497. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/README.rst +0 -0
  498. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/app/__init__.py +0 -0
  499. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/app/models.py +0 -0
  500. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  501. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  502. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/app/views.py +0 -0
  503. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/babel/babel.cfg +0 -0
  504. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/babel/messages.pot +0 -0
  505. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/babel/messages.pot~ +0 -0
  506. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/config.py +0 -0
  507. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/run.py +0 -0
  508. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/examples/widgets/testdata.py +0 -0
  509. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/actions.py +0 -0
  510. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/api/__init__.py +0 -0
  511. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/api/convert.py +0 -0
  512. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/api/manager.py +0 -0
  513. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/api/schemas.py +0 -0
  514. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/babel/__init__.py +0 -0
  515. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/babel/manager.py +0 -0
  516. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/babel/views.py +0 -0
  517. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/base.py +0 -0
  518. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/basemanager.py +0 -0
  519. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/charts/__init__.py +0 -0
  520. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/charts/jsontools.py +0 -0
  521. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/charts/views.py +0 -0
  522. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/charts/widgets.py +0 -0
  523. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/const.py +0 -0
  524. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/exceptions.py +0 -0
  525. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/fields.py +0 -0
  526. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/fieldwidgets.py +0 -0
  527. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/filters.py +0 -0
  528. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/forms.py +0 -0
  529. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/hooks.py +0 -0
  530. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/menu.py +0 -0
  531. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/messages.py +0 -0
  532. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/__init__.py +0 -0
  533. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/base.py +0 -0
  534. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/decorators.py +0 -0
  535. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/filters.py +0 -0
  536. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/generic/__init__.py +0 -0
  537. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/generic/interface.py +0 -0
  538. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/group.py +0 -0
  539. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/sqla/__init__.py +0 -0
  540. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/sqla/base.py +0 -0
  541. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/sqla/base_legacy.py +0 -0
  542. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/sqla/filters.py +0 -0
  543. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/models/sqla/interface.py +0 -0
  544. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/__init__.py +0 -0
  545. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/api.py +0 -0
  546. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/events.py +0 -0
  547. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/forms.py +0 -0
  548. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/manager.py +0 -0
  549. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/registerviews.py +0 -0
  550. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/saml/__init__.py +0 -0
  551. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/saml/metadata.py +0 -0
  552. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/saml/types.py +0 -0
  553. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/saml/utils.py +0 -0
  554. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/signals.py +0 -0
  555. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/__init__.py +0 -0
  556. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/__init__.py +0 -0
  557. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/api_key/__init__.py +0 -0
  558. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/api_key/api.py +0 -0
  559. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/api_key/schema.py +0 -0
  560. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/group/__init__.py +0 -0
  561. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/group/api.py +0 -0
  562. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/group/schema.py +0 -0
  563. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/permission/__init__.py +0 -0
  564. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/permission/api.py +0 -0
  565. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/permission_view_menu/__init__.py +0 -0
  566. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/permission_view_menu/api.py +0 -0
  567. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/role/__init__.py +0 -0
  568. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/role/api.py +0 -0
  569. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/role/schema.py +0 -0
  570. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/user/__init__.py +0 -0
  571. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/user/schema.py +0 -0
  572. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/user/validator.py +0 -0
  573. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/view_menu/__init__.py +0 -0
  574. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/apis/view_menu/api.py +0 -0
  575. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/manager.py +0 -0
  576. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/sqla/models.py +0 -0
  577. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/security/utils.py +0 -0
  578. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/.DS_Store +0 -0
  579. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/ab.css +0 -0
  580. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/bootstrap-datepicker/bootstrap-datepicker3.min.css +0 -0
  581. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/bootstrap.min.css +0 -0
  582. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/bootstrap.min.css.map +0 -0
  583. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/flags/flags16.css +0 -0
  584. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/all.min.css +0 -0
  585. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/brands.min.css +0 -0
  586. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/fontawesome.min.css +0 -0
  587. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/regular.min.css +0 -0
  588. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/solid.min.css +0 -0
  589. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/svg-with-js.min.css +0 -0
  590. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/v4-font-face.min.css +0 -0
  591. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/v4-shims.min.css +0 -0
  592. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/fontawesome/v5-font-face.min.css +0 -0
  593. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/images/flags16.png +0 -0
  594. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/select2/select2-bootstrap.min.css +0 -0
  595. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/select2/select2.min.css +0 -0
  596. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/swagger/swagger-ui.css +0 -0
  597. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/amelia.css +0 -0
  598. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/cerulean.css +0 -0
  599. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/cosmo.css +0 -0
  600. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/cyborg.css +0 -0
  601. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/darkly.css +0 -0
  602. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/flatly.css +0 -0
  603. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/journal.css +0 -0
  604. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/lumen.css +0 -0
  605. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/paper.css +0 -0
  606. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/readable.css +0 -0
  607. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/sandstone.css +0 -0
  608. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/simplex.css +0 -0
  609. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/slate.css +0 -0
  610. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/solar.css +0 -0
  611. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/spacelab.css +0 -0
  612. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/superhero.css +0 -0
  613. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/united.css +0 -0
  614. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/themes/yeti.css +0 -0
  615. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/webfonts/fa-brands-400.ttf +0 -0
  616. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/webfonts/fa-brands-400.woff2 +0 -0
  617. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/webfonts/fa-regular-400.ttf +0 -0
  618. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/webfonts/fa-regular-400.woff2 +0 -0
  619. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/webfonts/fa-solid-900.ttf +0 -0
  620. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/webfonts/fa-solid-900.woff2 +0 -0
  621. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/webfonts/fa-v4compatibility.ttf +0 -0
  622. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/css/webfonts/fa-v4compatibility.woff2 +0 -0
  623. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.eot +0 -0
  624. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.svg +0 -0
  625. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.ttf +0 -0
  626. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.woff +0 -0
  627. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.woff2 +0 -0
  628. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/img/fab.png +0 -0
  629. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/img/glyphicons-halflings-white.png +0 -0
  630. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/img/glyphicons-halflings.png +0 -0
  631. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/ab.js +0 -0
  632. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/ab_actions.js +0 -0
  633. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/ab_filters.js +0 -0
  634. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/ab_keep_tab.js +0 -0
  635. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/bootstrap-datepicker/bootstrap-datepicker.min.js +0 -0
  636. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/bootstrap.min.js +0 -0
  637. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/google_charts.js +0 -0
  638. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/jquery-latest.js +0 -0
  639. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/select2/select2.min.js +0 -0
  640. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/static/appbuilder/js/swagger-ui-bundle.js +0 -0
  641. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/_formhelpers.html +0 -0
  642. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/base.html +0 -0
  643. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/baselayout.html +0 -0
  644. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/baselib.html +0 -0
  645. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/flash.html +0 -0
  646. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/footer.html +0 -0
  647. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/alert.html +0 -0
  648. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/charts/chart.html +0 -0
  649. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/charts/chart_time.html +0 -0
  650. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/charts/jsonchart.html +0 -0
  651. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/confirm.html +0 -0
  652. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/lib.html +0 -0
  653. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/add.html +0 -0
  654. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/edit.html +0 -0
  655. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/edit_cascade.html +0 -0
  656. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/left_master_detail.html +0 -0
  657. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/list.html +0 -0
  658. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/multiple_views.html +0 -0
  659. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/search.html +0 -0
  660. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/show.html +0 -0
  661. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/model/show_cascade.html +0 -0
  662. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/security/activation.html +0 -0
  663. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/security/login_db.html +0 -0
  664. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/security/login_ldap.html +0 -0
  665. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/security/login_oauth.html +0 -0
  666. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/security/login_saml.html +0 -0
  667. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/security/register_mail.html +0 -0
  668. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/security/register_oauth.html +0 -0
  669. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/base_list.html +0 -0
  670. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/chart.html +0 -0
  671. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/direct_chart.html +0 -0
  672. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/form.html +0 -0
  673. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/form_horizontal.html +0 -0
  674. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/form_inline.html +0 -0
  675. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/form_vertical.html +0 -0
  676. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/group_form_list.html +0 -0
  677. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/list.html +0 -0
  678. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/list_block.html +0 -0
  679. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/list_carousel.html +0 -0
  680. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/list_item.html +0 -0
  681. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/list_link.html +0 -0
  682. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/list_master.html +0 -0
  683. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/list_thumbnail.html +0 -0
  684. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/multiple_chart.html +0 -0
  685. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/roles/list.html +0 -0
  686. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/roles/show.html +0 -0
  687. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/search.html +0 -0
  688. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/show.html +0 -0
  689. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/show_block.html +0 -0
  690. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/general/widgets/show_vertical.html +0 -0
  691. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/index.html +0 -0
  692. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/init.html +0 -0
  693. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/navbar.html +0 -0
  694. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/navbar_menu.html +0 -0
  695. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/navbar_right.html +0 -0
  696. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/templates/appbuilder/swagger/swagger.html +0 -0
  697. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/__init__.py +0 -0
  698. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/de/LC_MESSAGES/messages.mo +0 -0
  699. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/de/LC_MESSAGES/messages.po +0 -0
  700. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/el/LC_MESSAGES/messages.mo +0 -0
  701. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/el/LC_MESSAGES/messages.po +0 -0
  702. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/es/LC_MESSAGES/messages.mo +0 -0
  703. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/es/LC_MESSAGES/messages.po +0 -0
  704. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/fa/LC_MESSAGES/messages.mo +0 -0
  705. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/fa/LC_MESSAGES/messages.po +0 -0
  706. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/fr/LC_MESSAGES/messages.mo +0 -0
  707. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/fr/LC_MESSAGES/messages.po +0 -0
  708. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/it/LC_MESSAGES/messages.mo +0 -0
  709. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/it/LC_MESSAGES/messages.po +0 -0
  710. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/ja_JP/LC_MESSAGES/messages.mo +0 -0
  711. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/ja_JP/LC_MESSAGES/messages.po +0 -0
  712. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/ko/LC_MESSAGES/messages.mo +0 -0
  713. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/ko/LC_MESSAGES/messages.po +0 -0
  714. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/nl/LC_MESSAGES/messages.mo +0 -0
  715. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/nl/LC_MESSAGES/messages.po +0 -0
  716. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/pl/LC_MESSAGES/messages.mo +0 -0
  717. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/pl/LC_MESSAGES/messages.po +0 -0
  718. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.mo +0 -0
  719. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.po +0 -0
  720. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.po~ +0 -0
  721. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/pt_BR/LC_MESSAGES/messages.mo +0 -0
  722. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/pt_BR/LC_MESSAGES/messages.po +0 -0
  723. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/ru/LC_MESSAGES/messages.mo +0 -0
  724. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/ru/LC_MESSAGES/messages.po +0 -0
  725. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/sl/LC_MESSAGES/messages.mo +0 -0
  726. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/sl/LC_MESSAGES/messages.po +0 -0
  727. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/tr/LC_MESSAGES/messages.mo +0 -0
  728. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/tr/LC_MESSAGES/messages.po +0 -0
  729. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/zh/LC_MESSAGES/messages.mo +0 -0
  730. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/zh/LC_MESSAGES/messages.po +0 -0
  731. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/zh_HK/LC_MESSAGES/messages.mo +0 -0
  732. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/translations/zh_HK/LC_MESSAGES/messages.po +0 -0
  733. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/upload.py +0 -0
  734. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/urltools.py +0 -0
  735. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/utils/__init__.py +0 -0
  736. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/utils/legacy.py +0 -0
  737. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/utils/limit.py +0 -0
  738. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/flask_appbuilder/validators.py +0 -0
  739. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/ListThumbnail.png +0 -0
  740. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/chart.png +0 -0
  741. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/chart_time1.png +0 -0
  742. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/chart_time2.png +0 -0
  743. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/charts.png +0 -0
  744. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/contact_list.png +0 -0
  745. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/contacts.png +0 -0
  746. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/direct_chart.png +0 -0
  747. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/fab.png +0 -0
  748. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/group_list.png +0 -0
  749. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/grouped_chart.png +0 -0
  750. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/groups.png +0 -0
  751. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/images_list.png +0 -0
  752. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/list_cascade.png +0 -0
  753. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/list_cascade_block.png +0 -0
  754. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/list_compact_inline.png +0 -0
  755. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/list_master_detail.png +0 -0
  756. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/login.png +0 -0
  757. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/login_db.png +0 -0
  758. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/login_oauth.png +0 -0
  759. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/login_oid.png +0 -0
  760. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/security.png +0 -0
  761. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/images/simpleview2.png +0 -0
  762. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/release.sh +0 -0
  763. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/scripts/babel_extract.sh +0 -0
  764. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/scripts/babel_init.sh +0 -0
  765. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/setup.cfg +0 -0
  766. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/__init__.py +0 -0
  767. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/base.py +0 -0
  768. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/config_api.py +0 -0
  769. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/config_oauth.py +0 -0
  770. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/config_security.py +0 -0
  771. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/config_security_api.py +0 -0
  772. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/const.py +0 -0
  773. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/fixtures/__init__.py +0 -0
  774. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/fixtures/addon_manager.py +0 -0
  775. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/fixtures/data_models.py +0 -0
  776. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/fixtures/users.py +0 -0
  777. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/security/__init__.py +0 -0
  778. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/security/test_base_security_manager.py +0 -0
  779. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/security/test_password_complexity.py +0 -0
  780. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/security/test_rate_limiter.py +0 -0
  781. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/sqla/__init__.py +0 -0
  782. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/sqla/models.py +0 -0
  783. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_api.py +0 -0
  784. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_detached_user.py +0 -0
  785. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_json_coverage_fixes.py +0 -0
  786. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_json_edge_cases.py +0 -0
  787. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_json_support.py +0 -0
  788. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_menu.py +0 -0
  789. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_mvc_oauth.py +0 -0
  790. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_security_manager.py +0 -0
  791. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_security_signals.py +0 -0
  792. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_sqlalchemy.py +0 -0
  793. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tests/test_urltools.py +0 -0
  794. {flask_appbuilder-5.2.2rc2 → flask_appbuilder-5.2.3}/tox.ini +0 -0
@@ -1,9 +1,16 @@
1
1
  Flask-AppBuilder ChangeLog
2
2
  ==========================
3
3
 
4
- Improvements and Bug fixes on 5.2.2rc2
4
+ Improvements and Bug fixes on 5.2.3
5
5
  -----------------------------------
6
6
 
7
+ - fix: distinguish authentication from authorization redirects (#2479) [Amin Ghadersohi]
8
+ - fix: bump pinned dependencies to address vulnerabilities (#2474) [Daniel Vaz Gaspar]
9
+
10
+ Improvements and Bug fixes on 5.2.2
11
+ -----------------------------------
12
+
13
+ - fix: preserve safe login redirects for authenticated users and return 403 on authorization failures
7
14
  - fix: anchor OAuth email whitelist regex to end of string (#2470) [Daniel Vaz Gaspar]
8
15
  - fix: switch from uuid1 to uuid4 for better randomness (#2435) [Rin]
9
16
  - fix: escape special characters in LDAP search filter username (#2469) [Daniel Vaz Gaspar]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flask-appbuilder
3
- Version: 5.2.2rc2
3
+ Version: 5.2.3
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flask_appbuilder
3
- Version: 5.2.2rc2
3
+ Version: 5.2.3
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
@@ -1,5 +1,5 @@
1
1
  __author__ = "Daniel Vaz Gaspar"
2
- __version__ = "5.2.2rc2"
2
+ __version__ = "5.2.3"
3
3
 
4
4
  from .actions import action # noqa: F401
5
5
  from .api import ModelRestApi # noqa: F401
@@ -1,12 +1,13 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- Some py2/py3 compatibility support based on a stripped down
4
- version of six so we don't have to depend on a specific version
5
- of it.
3
+ Some py2/py3 compatibility support based on a stripped down
4
+ version of six so we don't have to depend on a specific version
5
+ of it.
6
6
 
7
- :copyright: (c) 2013 by Armin Ronacher.
8
- :license: BSD, see LICENSE for more details.
7
+ :copyright: (c) 2013 by Armin Ronacher.
8
+ :license: BSD, see LICENSE for more details.
9
9
  """
10
+
10
11
  import sys
11
12
 
12
13
  PY2 = sys.version_info[0] == 2
@@ -86,7 +86,7 @@ class AbstractViewApi:
86
86
  endpoint: Optional[str] = None,
87
87
  static_folder: Optional[str] = None,
88
88
  ):
89
- ...
89
+ pass
90
90
 
91
91
  def get_uninit_inner_views(self):
92
92
  """
@@ -14,7 +14,6 @@ import jinja2
14
14
 
15
15
  from .const import AUTH_DB, AUTH_LDAP, AUTH_OAUTH, AUTH_REMOTE_USER
16
16
 
17
-
18
17
  SQLA_REPO_URL = (
19
18
  "https://github.com/dpgaspar/Flask-AppBuilder-Skeleton/archive/refs/heads/v5.zip"
20
19
  )
@@ -197,7 +197,7 @@ class ImageManager(FileManager):
197
197
  :param image: The image object
198
198
  :param size: size is PIL tuple (width, height, force) ex: (200,100,True)
199
199
  """
200
- (width, height, force) = size
200
+ width, height, force = size
201
201
 
202
202
  if image.size[0] > width or image.size[1] > height:
203
203
  if force:
@@ -2,7 +2,6 @@ from flask_babel import lazy_gettext
2
2
 
3
3
  from ..filters import BaseFilter, BaseFilterConverter
4
4
 
5
-
6
5
  __all__ = [
7
6
  "GenericFilterConverter",
8
7
  "FilterNotContains",
@@ -7,7 +7,6 @@ from sqlalchemy.ext.declarative import declared_attr
7
7
  from sqlalchemy.orm import relationship
8
8
  import sqlalchemy.types as types
9
9
 
10
-
11
10
  log = logging.getLogger(__name__)
12
11
 
13
12
 
@@ -3,6 +3,7 @@ import logging
3
3
  from typing import Callable, List, Optional, TypeVar, Union
4
4
 
5
5
  from flask import (
6
+ abort,
6
7
  current_app,
7
8
  flash,
8
9
  jsonify,
@@ -34,9 +35,9 @@ def no_cache(view: Callable[..., Response]) -> Callable[..., Response]:
34
35
  @functools.wraps(view)
35
36
  def wrapped_view(*args, **kwargs) -> Response:
36
37
  response = make_response(view(*args, **kwargs))
37
- response.headers[
38
- "Cache-Control"
39
- ] = "no-store, no-cache, must-revalidate, max-age=0"
38
+ response.headers["Cache-Control"] = (
39
+ "no-store, no-cache, must-revalidate, max-age=0"
40
+ )
40
41
  response.headers["Pragma"] = "no-cache"
41
42
  response.headers["Expires"] = "0"
42
43
  return response
@@ -172,6 +173,8 @@ def has_access(f):
172
173
  log.warning(
173
174
  LOGMSG_ERR_SEC_ACCESS_DENIED, permission_str, self.__class__.__name__
174
175
  )
176
+ if current_user.is_authenticated and current_user.is_active:
177
+ abort(403)
175
178
  flash(as_unicode(FLAMSG_ERR_SEC_ACCESS_DENIED), "danger")
176
179
  return redirect(
177
180
  url_for(
@@ -10,7 +10,6 @@ from flask_appbuilder.const import (
10
10
  from marshmallow import fields, Schema, ValidationError
11
11
  from marshmallow.validate import Length, OneOf
12
12
 
13
-
14
13
  provider_to_auth_type = {"db": AUTH_DB, "ldap": AUTH_LDAP}
15
14
 
16
15
 
@@ -229,18 +229,14 @@ class UserApi(ModelRestApi):
229
229
 
230
230
  if item_roles == [] and (item_groups is None and not model.groups):
231
231
  return self.response_400(
232
- message=(
233
- "Cannot clear all roles unless at least one group is \
234
- assigned!"
235
- )
232
+ message=("Cannot clear all roles unless at least one group is \
233
+ assigned!")
236
234
  )
237
235
 
238
236
  if item_groups == [] and (item_roles is None and not model.roles):
239
237
  return self.response_400(
240
- message=(
241
- "Cannot clear all groups unless at least one role is \
242
- assigned!"
243
- )
238
+ message=("Cannot clear all groups unless at least one role is \
239
+ assigned!")
244
240
  )
245
241
 
246
242
  for key, value in item.items():
@@ -45,7 +45,6 @@ from werkzeug.wrappers import Response as WerkzeugResponse
45
45
  from wtforms import PasswordField, validators
46
46
  from wtforms.validators import EqualTo
47
47
 
48
-
49
48
  log = logging.getLogger(__name__)
50
49
 
51
50
 
@@ -577,6 +576,11 @@ class AuthView(BaseView):
577
576
  def login(self):
578
577
  pass
579
578
 
579
+ def _get_safe_next_url(self) -> str:
580
+ """Return the requested redirect target, or the application index."""
581
+ next_url = request.args.get("next", self.appbuilder.get_url_for_index)
582
+ return get_safe_redirect(next_url)
583
+
580
584
  def _get_authenticated_user(self):
581
585
  """Resolve the current user before logout clears the session.
582
586
  Returns a fresh User model from DB, or None if not authenticated.
@@ -618,7 +622,8 @@ class AuthDBView(AuthView):
618
622
  @no_cache
619
623
  def login(self):
620
624
  if g.user is not None and g.user.is_authenticated:
621
- return redirect(self.appbuilder.get_url_for_index)
625
+ # The target has been restricted by get_safe_redirect.
626
+ return redirect(self._get_safe_next_url()) # lgtm[py/url-redirection]
622
627
  form = LoginForm_db()
623
628
  if form.validate_on_submit():
624
629
  next_url = get_safe_redirect(request.args.get("next", ""))
@@ -642,7 +647,8 @@ class AuthLDAPView(AuthView):
642
647
  @no_cache
643
648
  def login(self):
644
649
  if g.user is not None and g.user.is_authenticated:
645
- return redirect(self.appbuilder.get_url_for_index)
650
+ # The target has been restricted by get_safe_redirect.
651
+ return redirect(self._get_safe_next_url()) # lgtm[py/url-redirection]
646
652
  form = LoginForm_db()
647
653
  if form.validate_on_submit():
648
654
  next_url = get_safe_redirect(request.args.get("next", ""))
@@ -668,7 +674,8 @@ class AuthOAuthView(AuthView):
668
674
  log.debug("Provider: %s", provider)
669
675
  if g.user is not None and g.user.is_authenticated:
670
676
  log.debug("Already authenticated %s", g.user)
671
- return redirect(self.appbuilder.get_url_for_index)
677
+ # The target has been restricted by get_safe_redirect.
678
+ return redirect(self._get_safe_next_url()) # lgtm[py/url-redirection]
672
679
 
673
680
  if provider is None:
674
681
  return self.render_template(
@@ -789,7 +796,8 @@ class AuthSAMLView(AuthView):
789
796
  @no_cache
790
797
  def login(self, idp: Optional[str] = None) -> WerkzeugResponse:
791
798
  if g.user is not None and g.user.is_authenticated:
792
- return redirect(self.appbuilder.get_url_for_index)
799
+ # The target has been restricted by get_safe_redirect.
800
+ return redirect(self._get_safe_next_url()) # lgtm[py/url-redirection]
793
801
 
794
802
  sm = self.appbuilder.sm
795
803
  providers = sm.saml_providers
@@ -984,8 +992,8 @@ class AuthRemoteUserView(AuthView):
984
992
  def login(self) -> WerkzeugResponse:
985
993
  username = request.environ.get(self.appbuilder.sm.auth_remote_user_env_var)
986
994
  if g.user is not None and g.user.is_authenticated:
987
- next_url = request.args.get("next", "")
988
- return redirect(get_safe_redirect(next_url))
995
+ # The target has been restricted by get_safe_redirect.
996
+ return redirect(self._get_safe_next_url()) # lgtm[py/url-redirection]
989
997
  if username:
990
998
  user = self.appbuilder.sm.auth_user_remote_user(username)
991
999
  if user is None:
@@ -8,7 +8,6 @@ from flask import current_app, request
8
8
  from flask_babel import gettext
9
9
  from flask_babel.speaklater import LazyString
10
10
 
11
-
12
11
  log = logging.getLogger(__name__)
13
12
 
14
13
 
@@ -29,7 +29,6 @@ from flask_appbuilder.urltools import (
29
29
  )
30
30
  from flask_appbuilder.widgets import GroupFormListWidget, ListMasterWidget
31
31
 
32
-
33
32
  log = logging.getLogger(__name__)
34
33
 
35
34
 
@@ -10,7 +10,6 @@ from flask import current_app
10
10
 
11
11
  from ._compat import as_unicode
12
12
 
13
-
14
13
  log = logging.getLogger(__name__)
15
14
 
16
15
 
@@ -4,7 +4,6 @@ import re
4
4
 
5
5
  from setuptools import find_packages, setup
6
6
 
7
-
8
7
  with io.open("flask_appbuilder/__init__.py", "rt", encoding="utf8") as f:
9
8
  version = re.search(r"__version__ = \"(.*?)\"", f.read()).group(1)
10
9
 
@@ -98,9 +98,9 @@ class LDAPSearchTestCase(unittest.TestCase):
98
98
  self.app.config["AUTH_LDAP_BIND_USER"] = "cn=admin,dc=example,dc=org"
99
99
  self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
100
100
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
101
- self.app.config[
102
- "AUTH_LDAP_SEARCH_FILTER"
103
- ] = "(memberOf=cn=staff,ou=groups,dc=example,dc=org)"
101
+ self.app.config["AUTH_LDAP_SEARCH_FILTER"] = (
102
+ "(memberOf=cn=staff,ou=groups,dc=example,dc=org)"
103
+ )
104
104
  with self.app.app_context():
105
105
  SQLA = get_sqla_class()
106
106
  db = SQLA(self.app)
@@ -154,9 +154,9 @@ class LDAPSearchTestCase(unittest.TestCase):
154
154
  self.app.config["AUTH_LDAP_BIND_USER"] = "cn=admin,dc=example,dc=org"
155
155
  self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
156
156
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
157
- self.app.config[
158
- "AUTH_LDAP_SEARCH_FILTER"
159
- ] = "(memberOf=cn=staff,ou=groups,dc=example,dc=org)"
157
+ self.app.config["AUTH_LDAP_SEARCH_FILTER"] = (
158
+ "(memberOf=cn=staff,ou=groups,dc=example,dc=org)"
159
+ )
160
160
  with self.app.app_context():
161
161
  SQLA = get_sqla_class()
162
162
  db = SQLA(self.app)
@@ -258,9 +258,9 @@ class LDAPSearchTestCase(unittest.TestCase):
258
258
  """
259
259
  LDAP: test login flow for - active user
260
260
  """
261
- self.app.config[
262
- "AUTH_LDAP_USERNAME_FORMAT"
263
- ] = "cn=%s,ou=users,dc=example,dc=org"
261
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
262
+ "cn=%s,ou=users,dc=example,dc=org"
263
+ )
264
264
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
265
265
  with self.app.app_context():
266
266
  SQLA = get_sqla_class()
@@ -297,9 +297,9 @@ class LDAPSearchTestCase(unittest.TestCase):
297
297
  """
298
298
  LDAP: test login flow for - inactive user
299
299
  """
300
- self.app.config[
301
- "AUTH_LDAP_USERNAME_FORMAT"
302
- ] = "cn=%s,ou=users,dc=example,dc=org"
300
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
301
+ "cn=%s,ou=users,dc=example,dc=org"
302
+ )
303
303
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
304
304
  with self.app.app_context():
305
305
  SQLA = get_sqla_class()
@@ -340,9 +340,9 @@ class LDAPSearchTestCase(unittest.TestCase):
340
340
  "cn=staff,ou=groups,dc=example,dc=org": ["Admin"],
341
341
  "cn=readers,ou=groups,dc=example,dc=org": ["User"],
342
342
  }
343
- self.app.config[
344
- "AUTH_LDAP_USERNAME_FORMAT"
345
- ] = "cn=%s,ou=users,dc=example,dc=org"
343
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
344
+ "cn=%s,ou=users,dc=example,dc=org"
345
+ )
346
346
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
347
347
  self.app.config["AUTH_USER_REGISTRATION"] = True
348
348
  self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
@@ -381,9 +381,9 @@ class LDAPSearchTestCase(unittest.TestCase):
381
381
  LDAP: test login flow for - direct bind - unregistered user
382
382
  """
383
383
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
384
- self.app.config[
385
- "AUTH_LDAP_USERNAME_FORMAT"
386
- ] = "cn=%s,ou=users,dc=example,dc=org"
384
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
385
+ "cn=%s,ou=users,dc=example,dc=org"
386
+ )
387
387
  self.app.config["AUTH_USER_REGISTRATION"] = True
388
388
  self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
389
389
  with self.app.app_context():
@@ -418,9 +418,9 @@ class LDAPSearchTestCase(unittest.TestCase):
418
418
  LDAP: test login flow for - direct bind - unregistered user - no self-registration
419
419
  """
420
420
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
421
- self.app.config[
422
- "AUTH_LDAP_USERNAME_FORMAT"
423
- ] = "cn=%s,ou=users,dc=example,dc=org"
421
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
422
+ "cn=%s,ou=users,dc=example,dc=org"
423
+ )
424
424
  self.app.config["AUTH_USER_REGISTRATION"] = False
425
425
  with self.app.app_context():
426
426
  SQLA = get_sqla_class()
@@ -446,9 +446,9 @@ class LDAPSearchTestCase(unittest.TestCase):
446
446
  LDAP: test login flow for - direct bind - unregistered user - no ldap search
447
447
  """
448
448
  self.app.config["AUTH_LDAP_SEARCH"] = None
449
- self.app.config[
450
- "AUTH_LDAP_USERNAME_FORMAT"
451
- ] = "cn=%s,ou=users,dc=example,dc=org"
449
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
450
+ "cn=%s,ou=users,dc=example,dc=org"
451
+ )
452
452
  self.app.config["AUTH_USER_REGISTRATION"] = True
453
453
  with self.app.app_context():
454
454
  SQLA = get_sqla_class()
@@ -472,9 +472,9 @@ class LDAPSearchTestCase(unittest.TestCase):
472
472
  LDAP: test login flow for - direct bind - registered user
473
473
  """
474
474
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
475
- self.app.config[
476
- "AUTH_LDAP_USERNAME_FORMAT"
477
- ] = "cn=%s,ou=users,dc=example,dc=org"
475
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
476
+ "cn=%s,ou=users,dc=example,dc=org"
477
+ )
478
478
  with self.app.app_context():
479
479
  SQLA = get_sqla_class()
480
480
  db = SQLA(self.app)
@@ -508,9 +508,9 @@ class LDAPSearchTestCase(unittest.TestCase):
508
508
  LDAP: test login flow for - direct bind - registered user - no ldap search
509
509
  """
510
510
  self.app.config["AUTH_LDAP_SEARCH"] = None
511
- self.app.config[
512
- "AUTH_LDAP_USERNAME_FORMAT"
513
- ] = "cn=%s,ou=users,dc=example,dc=org"
511
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
512
+ "cn=%s,ou=users,dc=example,dc=org"
513
+ )
514
514
  with self.app.app_context():
515
515
  SQLA = get_sqla_class()
516
516
  db = SQLA(self.app)
@@ -707,9 +707,9 @@ class LDAPSearchTestCase(unittest.TestCase):
707
707
  "cn=staff,ou=groups,dc=example,dc=org": ["Admin"]
708
708
  }
709
709
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
710
- self.app.config[
711
- "AUTH_LDAP_USERNAME_FORMAT"
712
- ] = "cn=%s,ou=users,dc=example,dc=org"
710
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
711
+ "cn=%s,ou=users,dc=example,dc=org"
712
+ )
713
713
  self.app.config["AUTH_USER_REGISTRATION"] = True
714
714
  self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
715
715
  with self.app.app_context():
@@ -750,9 +750,9 @@ class LDAPSearchTestCase(unittest.TestCase):
750
750
  "cn=staff,ou=groups,dc=example,dc=org": ["Admin", "User"]
751
751
  }
752
752
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
753
- self.app.config[
754
- "AUTH_LDAP_USERNAME_FORMAT"
755
- ] = "cn=%s,ou=users,dc=example,dc=org"
753
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
754
+ "cn=%s,ou=users,dc=example,dc=org"
755
+ )
756
756
  self.app.config["AUTH_USER_REGISTRATION"] = True
757
757
  self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
758
758
  with self.app.app_context():
@@ -793,9 +793,9 @@ class LDAPSearchTestCase(unittest.TestCase):
793
793
  "cn=staff,ou=groups,dc=example,dc=org": ["Admin", "User"]
794
794
  }
795
795
  self.app.config["AUTH_ROLES_SYNC_AT_LOGIN"] = False
796
- self.app.config[
797
- "AUTH_LDAP_USERNAME_FORMAT"
798
- ] = "cn=%s,ou=users,dc=example,dc=org"
796
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
797
+ "cn=%s,ou=users,dc=example,dc=org"
798
+ )
799
799
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
800
800
  with self.app.app_context():
801
801
  SQLA = get_sqla_class()
@@ -839,9 +839,9 @@ class LDAPSearchTestCase(unittest.TestCase):
839
839
  "cn=staff,ou=groups,dc=example,dc=org": ["Admin", "User"]
840
840
  }
841
841
  self.app.config["AUTH_ROLES_SYNC_AT_LOGIN"] = True
842
- self.app.config[
843
- "AUTH_LDAP_USERNAME_FORMAT"
844
- ] = "cn=%s,ou=users,dc=example,dc=org"
842
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
843
+ "cn=%s,ou=users,dc=example,dc=org"
844
+ )
845
845
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
846
846
  with self.app.app_context():
847
847
  SQLA = get_sqla_class()
@@ -1056,9 +1056,9 @@ class LDAPSearchTestCase(unittest.TestCase):
1056
1056
  LDAP: Keeping next url after failed login attempt
1057
1057
  """
1058
1058
  self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
1059
- self.app.config[
1060
- "AUTH_LDAP_USERNAME_FORMAT"
1061
- ] = "cn=%s,ou=users,dc=example,dc=org"
1059
+ self.app.config["AUTH_LDAP_USERNAME_FORMAT"] = (
1060
+ "cn=%s,ou=users,dc=example,dc=org"
1061
+ )
1062
1062
  self.app.config["AUTH_USER_REGISTRATION"] = True
1063
1063
  self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
1064
1064
  self.app.config["WTF_CSRF_ENABLED"] = False
@@ -306,9 +306,9 @@ class OAuthRegistrationRoleTestCase(unittest.TestCase):
306
306
  OAUTH: test login flow for - unregistered user - jmespath registration role
307
307
  """
308
308
  self.app.config["AUTH_USER_REGISTRATION"] = True
309
- self.app.config[
310
- "AUTH_USER_REGISTRATION_ROLE_JMESPATH"
311
- ] = "contains(['alice'], username) && 'User' || 'Public'"
309
+ self.app.config["AUTH_USER_REGISTRATION_ROLE_JMESPATH"] = (
310
+ "contains(['alice'], username) && 'User' || 'Public'"
311
+ )
312
312
  with self.app.app_context():
313
313
  SQLA = get_sqla_class()
314
314
  db = SQLA(self.app)
@@ -427,9 +427,9 @@ class OAuthRegistrationRoleTestCase(unittest.TestCase):
427
427
  """ # noqa
428
428
  self.app.config["AUTH_ROLES_SYNC_AT_LOGIN"] = False
429
429
  self.app.config["AUTH_USER_REGISTRATION"] = True
430
- self.app.config[
431
- "AUTH_USER_REGISTRATION_ROLE_JMESPATH"
432
- ] = "contains(['alice'], username) && 'User' || 'Public'"
430
+ self.app.config["AUTH_USER_REGISTRATION_ROLE_JMESPATH"] = (
431
+ "contains(['alice'], username) && 'User' || 'Public'"
432
+ )
433
433
  with self.app.app_context():
434
434
  SQLA = get_sqla_class()
435
435
  db = SQLA(self.app)
@@ -470,9 +470,9 @@ class OAuthRegistrationRoleTestCase(unittest.TestCase):
470
470
  """ # noqa
471
471
  self.app.config["AUTH_ROLES_SYNC_AT_LOGIN"] = True
472
472
  self.app.config["AUTH_USER_REGISTRATION"] = True
473
- self.app.config[
474
- "AUTH_USER_REGISTRATION_ROLE_JMESPATH"
475
- ] = "contains(['alice'], username) && 'User' || 'Public'"
473
+ self.app.config["AUTH_USER_REGISTRATION_ROLE_JMESPATH"] = (
474
+ "contains(['alice'], username) && 'User' || 'Public'"
475
+ )
476
476
  with self.app.app_context():
477
477
  SQLA = get_sqla_class()
478
478
  db = SQLA(self.app)
@@ -162,6 +162,25 @@ class MVCSecurityTestCase(BaseMVCTestCase):
162
162
  )
163
163
  assert response.location == "/users/list/"
164
164
 
165
+ def test_authenticated_db_login_valid_next_url(self):
166
+ """An authenticated login request retains a safe next URL."""
167
+ self.browser_login(self.client, USERNAME_ADMIN, PASSWORD_ADMIN)
168
+
169
+ response = self.client.get("/login/?next=/users/list/", follow_redirects=False)
170
+
171
+ assert response.status_code == 302
172
+ assert response.location == "/users/list/"
173
+
174
+ def test_authenticated_access_denial_returns_forbidden(self):
175
+ """A logged-in user lacking permission is not sent back to login."""
176
+ self.browser_login(self.client, USERNAME_ADMIN, PASSWORD_ADMIN)
177
+
178
+ with patch.object(self.appbuilder.sm, "has_access", return_value=False):
179
+ response = self.client.get("/model1view/list/", follow_redirects=False)
180
+
181
+ assert response.status_code == 403
182
+ assert response.location is None
183
+
165
184
  def test_db_login_valid_http_scheme_url(self):
166
185
  """
167
186
  Test Security valid http scheme next URL
@@ -371,10 +390,10 @@ class MVCSecurityTestCase(BaseMVCTestCase):
371
390
  self.assertEqual(rv.status_code, 200)
372
391
  # Test unauthorized EDIT
373
392
  rv = client.get(f"/model1view/edit/{model_id}")
374
- self.assertEqual(rv.status_code, 302)
393
+ self.assertEqual(rv.status_code, 403)
375
394
  # Test unauthorized DELETE
376
395
  rv = client.get(f"/model1view/delete/{model_id}")
377
- self.assertEqual(rv.status_code, 302)
396
+ self.assertEqual(rv.status_code, 403)
378
397
 
379
398
  def test_sec_reset_password(self):
380
399
  """
@@ -4,7 +4,6 @@ import os
4
4
  from tests.base import FABTestCase
5
5
  from tests.fixtures.addon_manager import DummyAddOnManager
6
6
 
7
-
8
7
  log = logging.getLogger(__name__)
9
8
 
10
9
 
@@ -19,9 +19,9 @@ class FlaskTestCase(FABTestCase):
19
19
  self.app = Flask(__name__, template_folder=".")
20
20
  self.basedir = os.path.abspath(os.path.dirname(__file__))
21
21
  self.app.config.from_object("tests.config_api")
22
- self.app.config[
23
- "FAB_INDEX_VIEW"
24
- ] = "tests.test_custom_indexview.CustomIndexView"
22
+ self.app.config["FAB_INDEX_VIEW"] = (
23
+ "tests.test_custom_indexview.CustomIndexView"
24
+ )
25
25
 
26
26
  def test_custom_indexview(self):
27
27
  """
@@ -228,9 +228,9 @@ class SQLAlchemyImportExportTestCase(FABTestCase):
228
228
  def test_import_roles(self):
229
229
  with tempfile.TemporaryDirectory() as tmp_dir:
230
230
  app = Flask("dst_app")
231
- app.config[
232
- "SQLALCHEMY_DATABASE_URI"
233
- ] = f"sqlite:///{os.path.join(tmp_dir, 'dst.db')}"
231
+ app.config["SQLALCHEMY_DATABASE_URI"] = (
232
+ f"sqlite:///{os.path.join(tmp_dir, 'dst.db')}"
233
+ )
234
234
  with app.app_context():
235
235
  SQLA = get_sqla_class()
236
236
  db = SQLA(app)
@@ -10,7 +10,6 @@ from flask_appbuilder.utils.legacy import get_sqla_class
10
10
  from tests.base import FABTestCase
11
11
  from tests.const import PASSWORD_ADMIN, USERNAME_ADMIN
12
12
 
13
-
14
13
  log = logging.getLogger(__name__)
15
14
 
16
15
 
@@ -1550,7 +1550,7 @@ class MVCTestCase(BaseMVCTestCase):
1550
1550
  )
1551
1551
  pk = model1.id
1552
1552
  rv = client.get(f"/model1permoverride/delete/{pk}")
1553
- self.assertEqual(rv.status_code, 302)
1553
+ self.assertEqual(rv.status_code, 403)
1554
1554
  model = self.appbuilder.session.query(Model1).filter_by(id=pk).one_or_none()
1555
1555
  self.assertEqual(model.field_string, "test1")
1556
1556
 
@@ -13,7 +13,6 @@ from tests.base import FABTestCase
13
13
  from tests.const import PASSWORD_ADMIN, USERNAME_ADMIN
14
14
  from werkzeug.security import generate_password_hash
15
15
 
16
-
17
16
  log = logging.getLogger(__name__)
18
17
 
19
18