flask-appbuilder 5.2.0__tar.gz → 5.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (795) hide show
  1. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/CHANGELOG.rst +7 -0
  2. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/PKG-INFO +1 -1
  3. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/SOURCES.txt +7 -0
  4. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/PKG-INFO +1 -1
  5. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/__init__.py +1 -1
  6. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/interface.py +1 -0
  7. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/manager.py +59 -7
  8. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/group/api.py +2 -0
  9. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/api.py +2 -0
  10. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/views.py +40 -1
  11. flask_appbuilder-5.2.1/flask_appbuilder/views.py +566 -0
  12. flask_appbuilder-5.2.1/tests/test_detached_user.py +311 -0
  13. flask_appbuilder-5.2.1/tests/test_hooks.py +245 -0
  14. flask_appbuilder-5.2.1/tests/test_json_coverage_fixes.py +153 -0
  15. flask_appbuilder-5.2.1/tests/test_json_edge_cases.py +269 -0
  16. flask_appbuilder-5.2.1/tests/test_json_support.py +361 -0
  17. flask_appbuilder-5.2.1/tests/test_security_manager.py +20 -0
  18. flask_appbuilder-5.2.1/tests/test_security_signals.py +754 -0
  19. flask_appbuilder-5.2.0/flask_appbuilder/views.py +0 -0
  20. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.coveragerc +0 -0
  21. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.env +0 -0
  22. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/ISSUE_TEMPLATE.md +0 -0
  23. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  24. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/prlint.json +0 -0
  25. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/stale.yml +0 -0
  26. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/workflows/ci.yml +0 -0
  27. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.github/workflows/odbcinst.ini +0 -0
  28. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/.gitignore +0 -0
  29. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/CONTRIBUTING.rst +0 -0
  30. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/dependency_links.txt +0 -0
  31. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/entry_points.txt +0 -0
  32. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/not-zip-safe +0 -0
  33. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/requires.txt +0 -0
  34. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/Flask_AppBuilder.egg-info/top_level.txt +0 -0
  35. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/LICENSE +0 -0
  36. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/MANIFEST.in +0 -0
  37. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/README.rst +0 -0
  38. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/RELEASE.rst +0 -0
  39. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/babel/babel.cfg +0 -0
  40. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/babel/messages.pot +0 -0
  41. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/babel_extract.sh +0 -0
  42. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/babel_init.sh +0 -0
  43. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/bootswatch_update.sh +0 -0
  44. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/config.py +0 -0
  45. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/db_create.py +0 -0
  46. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/db_migrate.py +0 -0
  47. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/db_upgrade.py +0 -0
  48. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/hash_db_password.py +0 -0
  49. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/migrate_db_0.7.py +0 -0
  50. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/migrate_db_1.3.py +0 -0
  51. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/bin/sqlite_upgrade_1.3.sql +0 -0
  52. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docker-compose.yml +0 -0
  53. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/Makefile +0 -0
  54. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_static/Flask-AppBuilder.png +0 -0
  55. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_templates/layout.html +0 -0
  56. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/LICENSE +0 -0
  57. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/README +0 -0
  58. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/layout.html +0 -0
  59. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/relations.html +0 -0
  60. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/static/Flask-AppBuilder.png +0 -0
  61. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/static/flasky.css_t +0 -0
  62. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask/theme.conf +0 -0
  63. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask_small/layout.html +0 -0
  64. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask_small/static/flasky.css_t +0 -0
  65. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask_small/theme.conf +0 -0
  66. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/_themes/flask_theme_support.py +0 -0
  67. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/actions.rst +0 -0
  68. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/addons.rst +0 -0
  69. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/advanced.rst +0 -0
  70. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/api.rst +0 -0
  71. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/cli.rst +0 -0
  72. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/conf.py +0 -0
  73. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/config.rst +0 -0
  74. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/customizing.rst +0 -0
  75. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/diagrams.rst +0 -0
  76. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/generic_datasource.rst +0 -0
  77. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/i18n.rst +0 -0
  78. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/ListThumbnail.png +0 -0
  79. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/chart.png +0 -0
  80. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/chart_time1.png +0 -0
  81. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/chart_time2.png +0 -0
  82. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/charts.png +0 -0
  83. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/contact_list.png +0 -0
  84. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/contacts.png +0 -0
  85. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/direct_chart.png +0 -0
  86. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/fab.png +0 -0
  87. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/group_list.png +0 -0
  88. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/grouped_chart.png +0 -0
  89. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/groups.png +0 -0
  90. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/images_list.png +0 -0
  91. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/list_cascade.png +0 -0
  92. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/list_cascade_block.png +0 -0
  93. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/list_compact_inline.png +0 -0
  94. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/list_master_detail.png +0 -0
  95. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/login.png +0 -0
  96. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/login_db.png +0 -0
  97. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/oauth_login.png +0 -0
  98. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/oauth_login_one_provider.png +0 -0
  99. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/security.png +0 -0
  100. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/simpleview2.png +0 -0
  101. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/swagger001.png +0 -0
  102. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/images/swagger002.png +0 -0
  103. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/index.rst +0 -0
  104. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/installation.rst +0 -0
  105. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/intro.rst +0 -0
  106. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/make.bat +0 -0
  107. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/multipledbs.rst +0 -0
  108. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/quickcharts.rst +0 -0
  109. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/quickfiles.rst +0 -0
  110. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/quickhowto.rst +0 -0
  111. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/quickminimal.rst +0 -0
  112. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/relations.rst +0 -0
  113. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/rest_api.rst +0 -0
  114. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/security.rst +0 -0
  115. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/templates.rst +0 -0
  116. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/user_registration.rst +0 -0
  117. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/versionmigration.rst +0 -0
  118. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/docs/views.rst +0 -0
  119. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/README.rst +0 -0
  120. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/base_api/README.rst +0 -0
  121. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/base_api/app/__init__.py +0 -0
  122. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/base_api/app/api.py +0 -0
  123. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/base_api/config.py +0 -0
  124. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/basefilter/babel/messages.pot~ +0 -0
  125. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/README.rst +0 -0
  126. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/app/__init__.py +0 -0
  127. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/app/models.py +0 -0
  128. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/app/views.py +0 -0
  129. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/config.py +0 -0
  130. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/composite_keys/testdata.py +0 -0
  131. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/NAMES.DIC +0 -0
  132. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/README.rst +0 -0
  133. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/__init__.py +0 -0
  134. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/api.py +0 -0
  135. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/models.py +0 -0
  136. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  137. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  138. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/babel/babel.cfg +0 -0
  139. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/babel/messages.pot +0 -0
  140. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/config.py +0 -0
  141. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/crud_rest_api/testdata.py +0 -0
  142. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/README.rst +0 -0
  143. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/app/__init__.py +0 -0
  144. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/app/models.py +0 -0
  145. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/app/security.py +0 -0
  146. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/app/views.py +0 -0
  147. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/babel/babel.cfg +0 -0
  148. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/employees/config.py +0 -0
  149. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/NAMES.DIC +0 -0
  150. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/README.rst +0 -0
  151. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/__init__.py +0 -0
  152. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/models.py +0 -0
  153. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  154. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  155. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/app/views.py +0 -0
  156. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/babel/babel.cfg +0 -0
  157. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/babel/messages.pot +0 -0
  158. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/config.py +0 -0
  159. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/enums/testdata.py +0 -0
  160. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/NAMES.DIC +0 -0
  161. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/README.rst +0 -0
  162. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/__init__.py +0 -0
  163. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/models.py +0 -0
  164. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/sec.py +0 -0
  165. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/sec_forms.py +0 -0
  166. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/sec_views.py +0 -0
  167. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  168. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  169. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/app/views.py +0 -0
  170. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/babel/babel.cfg +0 -0
  171. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/babel/messages.pot +0 -0
  172. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/babel/messages.pot~ +0 -0
  173. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/config.py +0 -0
  174. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity/testdata.py +0 -0
  175. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/NAMES.DIC +0 -0
  176. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/README.rst +0 -0
  177. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/__init__.py +0 -0
  178. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/models.py +0 -0
  179. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/sec.py +0 -0
  180. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/sec_forms.py +0 -0
  181. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/sec_views.py +0 -0
  182. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  183. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  184. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/app/views.py +0 -0
  185. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/babel/babel.cfg +0 -0
  186. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/babel/messages.pot +0 -0
  187. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/config.py +0 -0
  188. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/extendsecurity2/testdata.py +0 -0
  189. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/factoryapp/babel/messages.pot~ +0 -0
  190. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/NAMES.DIC +0 -0
  191. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/__init__.py +0 -0
  192. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/models.py +0 -0
  193. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  194. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  195. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/app/views.py +0 -0
  196. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/babel/babel.cfg +0 -0
  197. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/babel/messages.pot +0 -0
  198. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/babel/messages.pot~ +0 -0
  199. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/config.py +0 -0
  200. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/masterdetail/testdata.py +0 -0
  201. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/.gitignore +0 -0
  202. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/README.rst +0 -0
  203. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/__init__.py +0 -0
  204. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/forms.py +0 -0
  205. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/models.py +0 -0
  206. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/security.py +0 -0
  207. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/app/views.py +0 -0
  208. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/babel/babel.cfg +0 -0
  209. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/babel/messages.pot +0 -0
  210. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/config.py +0 -0
  211. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/oauth/run.py +0 -0
  212. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/README.rst +0 -0
  213. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/__init__.py +0 -0
  214. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/models.py +0 -0
  215. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/translations/es/LC_MESSAGES/messages.mo +0 -0
  216. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/translations/es/LC_MESSAGES/messages.po +0 -0
  217. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  218. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  219. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/app/views.py +0 -0
  220. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/babel/babel.cfg +0 -0
  221. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/config.py +0 -0
  222. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/productsale/run.py +0 -0
  223. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/__init__.py +0 -0
  224. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/models.py +0 -0
  225. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/translations/es/LC_MESSAGES/messages.mo +0 -0
  226. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/translations/es/LC_MESSAGES/messages.po +0 -0
  227. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  228. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  229. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/app/views.py +0 -0
  230. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/babel/babel.cfg +0 -0
  231. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/config.py +0 -0
  232. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/run.py +0 -0
  233. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickactions/testdata.py +0 -0
  234. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/README.rst +0 -0
  235. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/__init__.py +0 -0
  236. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/data.py +0 -0
  237. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/models.py +0 -0
  238. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  239. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  240. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/app/views.py +0 -0
  241. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/babel/babel.cfg +0 -0
  242. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/babel/messages.pot +0 -0
  243. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/babel/messages.pot~ +0 -0
  244. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts/config.py +0 -0
  245. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/__init__.py +0 -0
  246. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/models.py +0 -0
  247. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  248. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  249. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/app/views.py +0 -0
  250. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/babel/babel.cfg +0 -0
  251. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/babel/messages.pot +0 -0
  252. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/babel/messages.pot~ +0 -0
  253. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/bdist.linux-i686/egg/app/__init__.py +0 -0
  254. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/bdist.linux-i686/egg/app/models.py +0 -0
  255. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/bdist.linux-i686/egg/app/views.py +0 -0
  256. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/lib/app/__init__.py +0 -0
  257. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/lib/app/models.py +0 -0
  258. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/build/lib/app/views.py +0 -0
  259. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/config.py +0 -0
  260. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickcharts2/run.py +0 -0
  261. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/README.rst +0 -0
  262. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/__init__.py +0 -0
  263. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/models.py +0 -0
  264. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/__init__.py +0 -0
  265. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.mo +0 -0
  266. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.po +0 -0
  267. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/es/LC_MESSAGES/messages.po~ +0 -0
  268. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  269. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  270. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/translations/pt/LC_MESSAGES/messages.po~ +0 -0
  271. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/app/views.py +0 -0
  272. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/babel/babel.cfg +0 -0
  273. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/babel/messages.pot +0 -0
  274. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/config.py +0 -0
  275. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickfiles/run.py +0 -0
  276. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/NAMES.DIC +0 -0
  277. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/README.rst +0 -0
  278. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/__init__.py +0 -0
  279. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/models.py +0 -0
  280. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  281. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  282. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/app/views.py +0 -0
  283. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/babel/babel.cfg +0 -0
  284. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/babel/messages.pot +0 -0
  285. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/babel/messages.pot~ +0 -0
  286. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/config.py +0 -0
  287. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto/testdata.py +0 -0
  288. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/NAMES.DIC +0 -0
  289. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/__init__.py +0 -0
  290. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/forms.py +0 -0
  291. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/indexview.py +0 -0
  292. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/models.py +0 -0
  293. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/sec.py +0 -0
  294. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/sec_models.py +0 -0
  295. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/sec_views.py +0 -0
  296. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abBtnAdd.html +0 -0
  297. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abBtnDelete.html +0 -0
  298. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abBtnEdit.html +0 -0
  299. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abBtnShow.html +0 -0
  300. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abDate.html +0 -0
  301. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abMenuPageSize.html +0 -0
  302. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abModalOkCancel.html +0 -0
  303. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abModelSearch.html +0 -0
  304. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abModelTable.html +0 -0
  305. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abPagination.html +0 -0
  306. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/angularAssets/abSelect.html +0 -0
  307. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/css/clean-blog.min.css +0 -0
  308. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/css/scrolling-nav.css +0 -0
  309. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/img/brand.jpg +0 -0
  310. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/img/loading.gif +0 -0
  311. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Controllers/alertsCtrl.js +0 -0
  312. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Controllers/searchCtrl.js +0 -0
  313. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Controllers/tableCtrl.js +0 -0
  314. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Directives/bigDirectives.js +0 -0
  315. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Directives/btnDirectives.js +0 -0
  316. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/Services/apiService.js +0 -0
  317. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/angular.min.js +0 -0
  318. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/app.js +0 -0
  319. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/clean-blog.min.js +0 -0
  320. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/static/js/scrolling-nav.js +0 -0
  321. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/appbuilder/index.html +0 -0
  322. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/index.html +0 -0
  323. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/list_angulajs.html +0 -0
  324. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/list_contacts.html +0 -0
  325. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/list_json.html +0 -0
  326. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/mylist.html +0 -0
  327. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/new_base.html +0 -0
  328. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/show_contacts.html +0 -0
  329. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/widgets/list.html +0 -0
  330. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/templates/widgets/list_override.html +0 -0
  331. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  332. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  333. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/app/views.py +0 -0
  334. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/babel/babel.cfg +0 -0
  335. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/babel/messages.pot +0 -0
  336. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/babel/messages.pot~ +0 -0
  337. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/config.py +0 -0
  338. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/run.py +0 -0
  339. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto2/testdata.py +0 -0
  340. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/.coverage +0 -0
  341. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/NAMES.DIC +0 -0
  342. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/README.rst +0 -0
  343. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/__init__.py +0 -0
  344. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/models.py +0 -0
  345. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  346. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  347. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/app/views.py +0 -0
  348. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/babel/babel.cfg +0 -0
  349. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/babel/messages.pot +0 -0
  350. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/babel/messages.pot~ +0 -0
  351. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/config.py +0 -0
  352. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/migrate_db_0.7.py +0 -0
  353. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/run.py +0 -0
  354. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickhowto3/testdata.py +0 -0
  355. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/README.rst +0 -0
  356. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/__init__.py +0 -0
  357. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/models.py +0 -0
  358. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/translations/es/LC_MESSAGES/messages.mo +0 -0
  359. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/translations/es/LC_MESSAGES/messages.po +0 -0
  360. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  361. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  362. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/app/views.py +0 -0
  363. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/babel/babel.cfg +0 -0
  364. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickimages/config.py +0 -0
  365. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/NAMES.DIC +0 -0
  366. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/README.rst +0 -0
  367. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/__init__.py +0 -0
  368. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/models.py +0 -0
  369. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  370. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  371. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/app/views.py +0 -0
  372. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/babel/babel.cfg +0 -0
  373. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/babel/messages.pot +0 -0
  374. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/config.py +0 -0
  375. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickmigrate/testdata.py +0 -0
  376. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quickminimal/run.py +0 -0
  377. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/encodings.xml +0 -0
  378. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/misc.xml +0 -0
  379. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/modules.xml +0 -0
  380. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/quicksqlviews.iml +0 -0
  381. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/.idea/workspace.xml +0 -0
  382. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/NAMES.DIC +0 -0
  383. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/README.rst +0 -0
  384. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/__init__.py +0 -0
  385. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/models.py +0 -0
  386. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  387. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  388. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/app/views.py +0 -0
  389. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/babel/babel.cfg +0 -0
  390. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/babel/messages.pot +0 -0
  391. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/config.py +0 -0
  392. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicksqlviews/testdata.py +0 -0
  393. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/NAMES.DIC +0 -0
  394. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/README.rst +0 -0
  395. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/__init__.py +0 -0
  396. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/models.py +0 -0
  397. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/static/css/landing-page.css +0 -0
  398. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/templates/mybase.html +0 -0
  399. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  400. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  401. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/app/views.py +0 -0
  402. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/babel/babel.cfg +0 -0
  403. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/babel/messages.pot +0 -0
  404. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/babel/messages.pot~ +0 -0
  405. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/config.py +0 -0
  406. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/run.py +0 -0
  407. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/quicktemplates/testdata.py +0 -0
  408. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/NAMES.DIC +0 -0
  409. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/README.rst +0 -0
  410. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/__init__.py +0 -0
  411. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/api.py +0 -0
  412. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/models.py +0 -0
  413. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/.babelrc +0 -0
  414. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/README.md +0 -0
  415. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/package-lock.json +0 -0
  416. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/package.json +0 -0
  417. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/package.json.react-original +0 -0
  418. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/public/favicon.ico +0 -0
  419. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/public/index.html +0 -0
  420. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/public/manifest.json +0 -0
  421. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/App.js +0 -0
  422. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/api/Api.js +0 -0
  423. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/components/CRUDButtons.js +0 -0
  424. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/components/Forms.js +0 -0
  425. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/components/Table.js +0 -0
  426. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/src/index.js +0 -0
  427. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/static/webpack.config.js +0 -0
  428. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/templates/base.html +0 -0
  429. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/templates/react.html +0 -0
  430. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  431. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  432. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/babel/babel.cfg +0 -0
  433. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/babel/messages.pot +0 -0
  434. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/config.py +0 -0
  435. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/react-rest-api/testdata.py +0 -0
  436. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/NAMES.DIC +0 -0
  437. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/README.rst +0 -0
  438. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/__init__.py +0 -0
  439. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/models.py +0 -0
  440. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  441. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  442. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/app/views.py +0 -0
  443. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/babel/babel.cfg +0 -0
  444. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/babel/messages.pot +0 -0
  445. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/config.py +0 -0
  446. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/run.py +0 -0
  447. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/related_fields/testdata.py +0 -0
  448. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/.gitignore +0 -0
  449. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/README.rst +0 -0
  450. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/__init__.py +0 -0
  451. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/forms.py +0 -0
  452. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/templates/404.html +0 -0
  453. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  454. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  455. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/app/views.py +0 -0
  456. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/babel/babel.cfg +0 -0
  457. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/babel/messages.pot +0 -0
  458. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/config.py +0 -0
  459. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleform/run.py +0 -0
  460. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/README.rst +0 -0
  461. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/app/__init__.py +0 -0
  462. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/app/views.py +0 -0
  463. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/babel/babel.cfg +0 -0
  464. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/babel/messages.pot +0 -0
  465. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/config.py +0 -0
  466. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview1/run.py +0 -0
  467. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/app/__init__.py +0 -0
  468. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/app/templates/method3.html +0 -0
  469. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/app/views.py +0 -0
  470. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/babel/babel.cfg +0 -0
  471. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/babel/messages.pot +0 -0
  472. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/config.py +0 -0
  473. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/simpleview2/run.py +0 -0
  474. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/NAMES.DIC +0 -0
  475. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/README.rst +0 -0
  476. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/__init__.py +0 -0
  477. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/models.py +0 -0
  478. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  479. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  480. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/app/views.py +0 -0
  481. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/babel/babel.cfg +0 -0
  482. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/babel/messages.pot +0 -0
  483. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/babel/messages.pot~ +0 -0
  484. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/config.py +0 -0
  485. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/run.py +0 -0
  486. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/user_registration/testdata.py +0 -0
  487. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/NAMES.DIC +0 -0
  488. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/README.rst +0 -0
  489. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/__init__.py +0 -0
  490. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/models.py +0 -0
  491. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/translations/pt/LC_MESSAGES/messages.mo +0 -0
  492. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/translations/pt/LC_MESSAGES/messages.po +0 -0
  493. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/app/views.py +0 -0
  494. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/babel/babel.cfg +0 -0
  495. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/babel/messages.pot +0 -0
  496. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/babel/messages.pot~ +0 -0
  497. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/config.py +0 -0
  498. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/run.py +0 -0
  499. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/examples/widgets/testdata.py +0 -0
  500. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/_compat.py +0 -0
  501. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/actions.py +0 -0
  502. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/api/__init__.py +0 -0
  503. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/api/convert.py +0 -0
  504. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/api/manager.py +0 -0
  505. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/api/schemas.py +0 -0
  506. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/babel/__init__.py +0 -0
  507. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/babel/manager.py +0 -0
  508. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/babel/views.py +0 -0
  509. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/base.py +0 -0
  510. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/basemanager.py +0 -0
  511. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/baseviews.py +0 -0
  512. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/charts/__init__.py +0 -0
  513. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/charts/jsontools.py +0 -0
  514. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/charts/views.py +0 -0
  515. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/charts/widgets.py +0 -0
  516. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/cli.py +0 -0
  517. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/const.py +0 -0
  518. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/exceptions.py +0 -0
  519. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/fields.py +0 -0
  520. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/fieldwidgets.py +0 -0
  521. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/filemanager.py +0 -0
  522. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/filters.py +0 -0
  523. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/forms.py +0 -0
  524. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/hooks.py +0 -0
  525. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/menu.py +0 -0
  526. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/messages.py +0 -0
  527. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/__init__.py +0 -0
  528. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/base.py +0 -0
  529. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/decorators.py +0 -0
  530. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/filters.py +0 -0
  531. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/generic/__init__.py +0 -0
  532. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/generic/filters.py +0 -0
  533. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/generic/interface.py +0 -0
  534. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/group.py +0 -0
  535. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/mixins.py +0 -0
  536. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/__init__.py +0 -0
  537. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/base.py +0 -0
  538. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/base_legacy.py +0 -0
  539. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/models/sqla/filters.py +0 -0
  540. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/__init__.py +0 -0
  541. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/api.py +0 -0
  542. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/decorators.py +0 -0
  543. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/events.py +0 -0
  544. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/forms.py +0 -0
  545. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/registerviews.py +0 -0
  546. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/saml/__init__.py +0 -0
  547. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/saml/metadata.py +0 -0
  548. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/saml/types.py +0 -0
  549. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/saml/utils.py +0 -0
  550. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/schemas.py +0 -0
  551. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/signals.py +0 -0
  552. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/__init__.py +0 -0
  553. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/__init__.py +0 -0
  554. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/api_key/__init__.py +0 -0
  555. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/api_key/api.py +0 -0
  556. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/api_key/schema.py +0 -0
  557. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/group/__init__.py +0 -0
  558. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/group/schema.py +0 -0
  559. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/permission/__init__.py +0 -0
  560. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/permission/api.py +0 -0
  561. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/permission_view_menu/__init__.py +0 -0
  562. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/permission_view_menu/api.py +0 -0
  563. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/role/__init__.py +0 -0
  564. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/role/api.py +0 -0
  565. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/role/schema.py +0 -0
  566. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/__init__.py +0 -0
  567. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/schema.py +0 -0
  568. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/user/validator.py +0 -0
  569. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/view_menu/__init__.py +0 -0
  570. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/apis/view_menu/api.py +0 -0
  571. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/manager.py +0 -0
  572. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/sqla/models.py +0 -0
  573. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/security/utils.py +0 -0
  574. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/.DS_Store +0 -0
  575. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/ab.css +0 -0
  576. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/bootstrap-datepicker/bootstrap-datepicker3.min.css +0 -0
  577. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/bootstrap.min.css +0 -0
  578. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/bootstrap.min.css.map +0 -0
  579. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/flags/flags16.css +0 -0
  580. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/all.min.css +0 -0
  581. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/brands.min.css +0 -0
  582. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/fontawesome.min.css +0 -0
  583. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/regular.min.css +0 -0
  584. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/solid.min.css +0 -0
  585. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/svg-with-js.min.css +0 -0
  586. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/v4-font-face.min.css +0 -0
  587. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/v4-shims.min.css +0 -0
  588. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/fontawesome/v5-font-face.min.css +0 -0
  589. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/images/flags16.png +0 -0
  590. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/select2/select2-bootstrap.min.css +0 -0
  591. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/select2/select2.min.css +0 -0
  592. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/swagger/swagger-ui.css +0 -0
  593. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/amelia.css +0 -0
  594. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/cerulean.css +0 -0
  595. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/cosmo.css +0 -0
  596. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/cyborg.css +0 -0
  597. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/darkly.css +0 -0
  598. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/flatly.css +0 -0
  599. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/journal.css +0 -0
  600. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/lumen.css +0 -0
  601. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/paper.css +0 -0
  602. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/readable.css +0 -0
  603. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/sandstone.css +0 -0
  604. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/simplex.css +0 -0
  605. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/slate.css +0 -0
  606. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/solar.css +0 -0
  607. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/spacelab.css +0 -0
  608. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/superhero.css +0 -0
  609. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/united.css +0 -0
  610. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/themes/yeti.css +0 -0
  611. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-brands-400.ttf +0 -0
  612. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-brands-400.woff2 +0 -0
  613. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-regular-400.ttf +0 -0
  614. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-regular-400.woff2 +0 -0
  615. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-solid-900.ttf +0 -0
  616. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-solid-900.woff2 +0 -0
  617. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-v4compatibility.ttf +0 -0
  618. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/css/webfonts/fa-v4compatibility.woff2 +0 -0
  619. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.eot +0 -0
  620. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.svg +0 -0
  621. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.ttf +0 -0
  622. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.woff +0 -0
  623. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/fonts/glyphicons-halflings-regular.woff2 +0 -0
  624. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/img/fab.png +0 -0
  625. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/img/glyphicons-halflings-white.png +0 -0
  626. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/img/glyphicons-halflings.png +0 -0
  627. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/ab.js +0 -0
  628. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/ab_actions.js +0 -0
  629. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/ab_filters.js +0 -0
  630. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/ab_keep_tab.js +0 -0
  631. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/bootstrap-datepicker/bootstrap-datepicker.min.js +0 -0
  632. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/bootstrap.min.js +0 -0
  633. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/google_charts.js +0 -0
  634. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/jquery-latest.js +0 -0
  635. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/select2/select2.min.js +0 -0
  636. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/static/appbuilder/js/swagger-ui-bundle.js +0 -0
  637. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/_formhelpers.html +0 -0
  638. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/base.html +0 -0
  639. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/baselayout.html +0 -0
  640. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/baselib.html +0 -0
  641. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/flash.html +0 -0
  642. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/footer.html +0 -0
  643. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/alert.html +0 -0
  644. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/charts/chart.html +0 -0
  645. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/charts/chart_time.html +0 -0
  646. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/charts/jsonchart.html +0 -0
  647. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/confirm.html +0 -0
  648. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/lib.html +0 -0
  649. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/add.html +0 -0
  650. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/edit.html +0 -0
  651. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/edit_cascade.html +0 -0
  652. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/left_master_detail.html +0 -0
  653. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/list.html +0 -0
  654. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/multiple_views.html +0 -0
  655. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/search.html +0 -0
  656. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/show.html +0 -0
  657. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/model/show_cascade.html +0 -0
  658. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/activation.html +0 -0
  659. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/login_db.html +0 -0
  660. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/login_ldap.html +0 -0
  661. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/login_oauth.html +0 -0
  662. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/login_saml.html +0 -0
  663. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/register_mail.html +0 -0
  664. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/security/register_oauth.html +0 -0
  665. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/base_list.html +0 -0
  666. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/chart.html +0 -0
  667. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/direct_chart.html +0 -0
  668. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/form.html +0 -0
  669. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/form_horizontal.html +0 -0
  670. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/form_inline.html +0 -0
  671. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/form_vertical.html +0 -0
  672. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/group_form_list.html +0 -0
  673. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list.html +0 -0
  674. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_block.html +0 -0
  675. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_carousel.html +0 -0
  676. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_item.html +0 -0
  677. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_link.html +0 -0
  678. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_master.html +0 -0
  679. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/list_thumbnail.html +0 -0
  680. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/multiple_chart.html +0 -0
  681. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/roles/list.html +0 -0
  682. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/roles/show.html +0 -0
  683. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/search.html +0 -0
  684. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/show.html +0 -0
  685. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/show_block.html +0 -0
  686. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/general/widgets/show_vertical.html +0 -0
  687. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/index.html +0 -0
  688. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/init.html +0 -0
  689. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/navbar.html +0 -0
  690. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/navbar_menu.html +0 -0
  691. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/navbar_right.html +0 -0
  692. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/templates/appbuilder/swagger/swagger.html +0 -0
  693. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/__init__.py +0 -0
  694. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/de/LC_MESSAGES/messages.mo +0 -0
  695. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/de/LC_MESSAGES/messages.po +0 -0
  696. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/el/LC_MESSAGES/messages.mo +0 -0
  697. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/el/LC_MESSAGES/messages.po +0 -0
  698. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/es/LC_MESSAGES/messages.mo +0 -0
  699. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/es/LC_MESSAGES/messages.po +0 -0
  700. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/fa/LC_MESSAGES/messages.mo +0 -0
  701. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/fa/LC_MESSAGES/messages.po +0 -0
  702. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/fr/LC_MESSAGES/messages.mo +0 -0
  703. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/fr/LC_MESSAGES/messages.po +0 -0
  704. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/it/LC_MESSAGES/messages.mo +0 -0
  705. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/it/LC_MESSAGES/messages.po +0 -0
  706. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ja_JP/LC_MESSAGES/messages.mo +0 -0
  707. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ja_JP/LC_MESSAGES/messages.po +0 -0
  708. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ko/LC_MESSAGES/messages.mo +0 -0
  709. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ko/LC_MESSAGES/messages.po +0 -0
  710. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/nl/LC_MESSAGES/messages.mo +0 -0
  711. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/nl/LC_MESSAGES/messages.po +0 -0
  712. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pl/LC_MESSAGES/messages.mo +0 -0
  713. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pl/LC_MESSAGES/messages.po +0 -0
  714. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.mo +0 -0
  715. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.po +0 -0
  716. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt/LC_MESSAGES/messages.po~ +0 -0
  717. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt_BR/LC_MESSAGES/messages.mo +0 -0
  718. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/pt_BR/LC_MESSAGES/messages.po +0 -0
  719. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ru/LC_MESSAGES/messages.mo +0 -0
  720. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/ru/LC_MESSAGES/messages.po +0 -0
  721. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/sl/LC_MESSAGES/messages.mo +0 -0
  722. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/sl/LC_MESSAGES/messages.po +0 -0
  723. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/tr/LC_MESSAGES/messages.mo +0 -0
  724. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/tr/LC_MESSAGES/messages.po +0 -0
  725. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/zh/LC_MESSAGES/messages.mo +0 -0
  726. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/zh/LC_MESSAGES/messages.po +0 -0
  727. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/zh_HK/LC_MESSAGES/messages.mo +0 -0
  728. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/translations/zh_HK/LC_MESSAGES/messages.po +0 -0
  729. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/upload.py +0 -0
  730. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/urltools.py +0 -0
  731. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/utils/__init__.py +0 -0
  732. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/utils/base.py +0 -0
  733. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/utils/legacy.py +0 -0
  734. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/utils/limit.py +0 -0
  735. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/validators.py +0 -0
  736. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/flask_appbuilder/widgets.py +0 -0
  737. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/ListThumbnail.png +0 -0
  738. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/chart.png +0 -0
  739. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/chart_time1.png +0 -0
  740. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/chart_time2.png +0 -0
  741. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/charts.png +0 -0
  742. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/contact_list.png +0 -0
  743. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/contacts.png +0 -0
  744. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/direct_chart.png +0 -0
  745. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/fab.png +0 -0
  746. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/group_list.png +0 -0
  747. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/grouped_chart.png +0 -0
  748. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/groups.png +0 -0
  749. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/images_list.png +0 -0
  750. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/list_cascade.png +0 -0
  751. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/list_cascade_block.png +0 -0
  752. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/list_compact_inline.png +0 -0
  753. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/list_master_detail.png +0 -0
  754. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/login.png +0 -0
  755. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/login_db.png +0 -0
  756. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/login_oauth.png +0 -0
  757. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/login_oid.png +0 -0
  758. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/security.png +0 -0
  759. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/images/simpleview2.png +0 -0
  760. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/release.sh +0 -0
  761. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/scripts/babel_extract.sh +0 -0
  762. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/scripts/babel_init.sh +0 -0
  763. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/setup.cfg +0 -0
  764. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/setup.py +0 -0
  765. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/__init__.py +0 -0
  766. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/base.py +0 -0
  767. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/config_api.py +0 -0
  768. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/config_oauth.py +0 -0
  769. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/config_security.py +0 -0
  770. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/config_security_api.py +0 -0
  771. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/const.py +0 -0
  772. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/fixtures/__init__.py +0 -0
  773. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/fixtures/addon_manager.py +0 -0
  774. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/fixtures/data_models.py +0 -0
  775. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/fixtures/users.py +0 -0
  776. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/__init__.py +0 -0
  777. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_auth_ldap.py +0 -0
  778. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_auth_oauth.py +0 -0
  779. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_base_security_manager.py +0 -0
  780. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_mvc_security.py +0 -0
  781. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_password_complexity.py +0 -0
  782. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/security/test_rate_limiter.py +0 -0
  783. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/sqla/__init__.py +0 -0
  784. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/sqla/models.py +0 -0
  785. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_addon.py +0 -0
  786. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_api.py +0 -0
  787. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_custom_indexview.py +0 -0
  788. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_fab_cli.py +0 -0
  789. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_menu.py +0 -0
  790. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_mvc.py +0 -0
  791. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_mvc_oauth.py +0 -0
  792. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_security_api.py +0 -0
  793. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_sqlalchemy.py +0 -0
  794. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tests/test_urltools.py +0 -0
  795. {flask_appbuilder-5.2.0 → flask_appbuilder-5.2.1}/tox.ini +0 -0
@@ -1,6 +1,13 @@
1
1
  Flask-AppBuilder ChangeLog
2
2
  ==========================
3
3
 
4
+ Improvements and Bug fixes on 5.2.1
5
+ -----------------------------------
6
+
7
+ - fix: pass outer_default_load to apply_all (#2449) [skrepkaq]
8
+ - feat: add missing CRUD hooks and auth event hooks (#2450) [Daniel Vaz Gaspar]
9
+ - fix(security): remove OAuth token values from debug log statements (#2440) [Daniel Vaz Gaspar]
10
+
4
11
  Improvements and Bug fixes on 5.2.0
5
12
  -----------------------------------
6
13
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flask-appbuilder
3
- Version: 5.2.0
3
+ Version: 5.2.1
4
4
  Summary: Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more.
5
5
  Home-page: https://github.com/dpgaspar/flask-appbuilder/
6
6
  Author: Daniel Vaz Gaspar
@@ -782,11 +782,18 @@ tests/const.py
782
782
  tests/test_addon.py
783
783
  tests/test_api.py
784
784
  tests/test_custom_indexview.py
785
+ tests/test_detached_user.py
785
786
  tests/test_fab_cli.py
787
+ tests/test_hooks.py
788
+ tests/test_json_coverage_fixes.py
789
+ tests/test_json_edge_cases.py
790
+ tests/test_json_support.py
786
791
  tests/test_menu.py
787
792
  tests/test_mvc.py
788
793
  tests/test_mvc_oauth.py
789
794
  tests/test_security_api.py
795
+ tests/test_security_manager.py
796
+ tests/test_security_signals.py
790
797
  tests/test_sqlalchemy.py
791
798
  tests/test_urltools.py
792
799
  tests/fixtures/__init__.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flask_appbuilder
3
- Version: 5.2.0
3
+ Version: 5.2.1
4
4
  Summary: Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more.
5
5
  Home-page: https://github.com/dpgaspar/flask-appbuilder/
6
6
  Author: Daniel Vaz Gaspar
@@ -1,5 +1,5 @@
1
1
  __author__ = "Daniel Vaz Gaspar"
2
- __version__ = "5.2.0"
2
+ __version__ = "5.2.1"
3
3
 
4
4
  from .actions import action # noqa: F401
5
5
  from .api import ModelRestApi # noqa: F401
@@ -569,6 +569,7 @@ class SQLAInterface(BaseInterface):
569
569
  page,
570
570
  page_size,
571
571
  select_columns,
572
+ outer_default_load,
572
573
  )
573
574
  query_results = query.all()
574
575
 
@@ -16,6 +16,7 @@ from flask_limiter.util import get_remote_address
16
16
  from flask_login import current_user, LoginManager
17
17
  import jwt
18
18
  from packaging.version import Version
19
+ from sqlalchemy import inspect as sa_inspect
19
20
  from werkzeug.security import check_password_hash, generate_password_hash
20
21
 
21
22
  from .api import SecurityApi
@@ -134,7 +135,7 @@ def _oauth_tokengetter(token=None):
134
135
  from session cookie.
135
136
  """
136
137
  token = session.get("oauth")
137
- log.debug("Token Get: %s", token)
138
+ log.debug("Token Get: retrieved OAuth token from session")
138
139
  return token
139
140
 
140
141
 
@@ -975,6 +976,27 @@ class BaseSecurityManager(AbstractSecurityManager):
975
976
  )
976
977
  self.update_user(user)
977
978
 
979
+ def on_user_login(self, user) -> None:
980
+ """Called after a successful user login.
981
+ Override to add custom logic (e.g., audit logging).
982
+
983
+ :param user: The authenticated user model
984
+ """
985
+
986
+ def on_user_login_failed(self, user) -> None:
987
+ """Called after a failed user login attempt.
988
+ Override to add custom logic (e.g., audit logging).
989
+
990
+ :param user: The identified (but not authenticated) user model
991
+ """
992
+
993
+ def on_user_logout(self, user) -> None:
994
+ """Called when a user logs out.
995
+ Override to add custom logic (e.g., audit logging).
996
+
997
+ :param user: The user model that is logging out
998
+ """
999
+
978
1000
  def update_user_auth_stat(self, user, success=True):
979
1001
  """
980
1002
  Update user authentication stats upon successful/unsuccessful
@@ -1000,6 +1022,10 @@ class BaseSecurityManager(AbstractSecurityManager):
1000
1022
  else:
1001
1023
  user.fail_login_count += 1
1002
1024
  self.update_user(user)
1025
+ if success:
1026
+ self.on_user_login(user)
1027
+ else:
1028
+ self.on_user_login_failed(user)
1003
1029
 
1004
1030
  def auth_user_db(self, username, password):
1005
1031
  """
@@ -1867,21 +1893,47 @@ class BaseSecurityManager(AbstractSecurityManager):
1867
1893
 
1868
1894
  return result
1869
1895
 
1896
+ def _is_user_detached(self, user) -> bool:
1897
+ """Check if a SQLAlchemy user instance is detached from the session."""
1898
+ try:
1899
+ return sa_inspect(user).detached
1900
+ except Exception:
1901
+ return False
1902
+
1903
+ def _get_safe_user(self, user):
1904
+ """Return an attached ORM user instance, re-fetching from DB if needed.
1905
+ Handles detached ORM instances and non-ORM objects (e.g. LocalProxy).
1906
+ Returns None if the user cannot be resolved.
1907
+ """
1908
+ if user is None:
1909
+ return None
1910
+ if self._is_user_detached(user):
1911
+ try:
1912
+ identity = sa_inspect(user).identity
1913
+ except Exception:
1914
+ return None
1915
+ if identity:
1916
+ return self.get_user_by_id(identity[0])
1917
+ return None
1918
+ return user
1919
+
1870
1920
  def has_access(self, permission_name: str, view_name: str) -> bool:
1871
1921
  """
1872
1922
  Check if current user or public has access to view or menu
1873
1923
  """
1874
1924
  # Check API key authenticated user first
1875
1925
  if getattr(g, "_api_key_user", False) and hasattr(g, "user"):
1876
- user = g.user
1926
+ user = self._get_safe_user(g.user)
1927
+ if user and user.is_active:
1928
+ return self._has_view_access(user, permission_name, view_name)
1929
+ if current_user.is_authenticated:
1930
+ user = self._get_safe_user(g.user)
1877
1931
  if user and user.is_active:
1878
1932
  return self._has_view_access(user, permission_name, view_name)
1879
- if current_user.is_authenticated and current_user.is_active:
1880
- return self._has_view_access(g.user, permission_name, view_name)
1881
- elif current_user_jwt and current_user_jwt.is_active:
1933
+ return False
1934
+ if current_user_jwt and current_user_jwt.is_active:
1882
1935
  return self._has_view_access(current_user_jwt, permission_name, view_name)
1883
- else:
1884
- return self.is_item_public(permission_name, view_name)
1936
+ return self.is_item_public(permission_name, view_name)
1885
1937
 
1886
1938
  def get_user_menu_access(self, menu_names: List[str] = None) -> Set[str]:
1887
1939
  if current_user.is_authenticated:
@@ -120,6 +120,7 @@ class GroupApi(ModelRestApi):
120
120
 
121
121
  self.pre_add(model)
122
122
  self.datamodel.add(model)
123
+ self.post_add(model)
123
124
 
124
125
  return self.response(201, id=model.id)
125
126
 
@@ -216,6 +217,7 @@ class GroupApi(ModelRestApi):
216
217
  model.users = users
217
218
  self.pre_update(model)
218
219
  self.datamodel.edit(model)
220
+ self.post_update(model)
219
221
  return self.response(
220
222
  200,
221
223
  **{API_RESULT_RES_KEY: self.edit_model_schema.dump(item, many=False)},
@@ -165,6 +165,7 @@ class UserApi(ModelRestApi):
165
165
 
166
166
  self.pre_add(model)
167
167
  self.datamodel.add(model)
168
+ self.post_add(model)
168
169
  return self.response(201, id=model.id)
169
170
  except ValidationError as error:
170
171
  return self.response_400(message=error.messages)
@@ -281,6 +282,7 @@ class UserApi(ModelRestApi):
281
282
 
282
283
  self.pre_update(model, item)
283
284
  self.datamodel.edit(model)
285
+ self.post_update(model)
284
286
  return self.response(
285
287
  200,
286
288
  **{API_RESULT_RES_KEY: self.edit_model_schema.dump(item, many=False)},
@@ -577,9 +577,33 @@ class AuthView(BaseView):
577
577
  def login(self):
578
578
  pass
579
579
 
580
+ def _get_authenticated_user(self):
581
+ """Resolve the current user before logout clears the session.
582
+ Returns a fresh User model from DB, or None if not authenticated.
583
+ Note: g.user may be a LocalProxy that becomes anonymous after
584
+ logout_user(), or a detached ORM instance whose attribute access
585
+ raises DetachedInstanceError. We extract the id and re-fetch
586
+ a concrete, session-bound instance before logout.
587
+ """
588
+ user = getattr(g, "user", None)
589
+ if user is None:
590
+ return None
591
+ try:
592
+ if not user.is_authenticated:
593
+ return None
594
+ user_id = user.id
595
+ except Exception:
596
+ return None
597
+ if user_id is not None:
598
+ return self.appbuilder.sm.get_user_by_id(user_id)
599
+ return None
600
+
580
601
  @expose("/logout/")
581
602
  def logout(self):
603
+ user = self._get_authenticated_user()
582
604
  logout_user()
605
+ if user is not None:
606
+ self.appbuilder.sm.on_user_logout(user)
583
607
  return redirect(
584
608
  current_app.config.get(
585
609
  "LOGOUT_REDIRECT_URL", self.appbuilder.get_url_for_index
@@ -698,7 +722,7 @@ class AuthOAuthView(AuthView):
698
722
  if resp is None:
699
723
  flash("You denied the request to sign in.", "warning")
700
724
  return redirect(self.appbuilder.get_url_for_login)
701
- log.debug("OAUTH Authorized resp: %s", resp)
725
+ log.debug("OAUTH Authorized resp received for provider: %s", provider)
702
726
  # Retrieves specific user info from the provider
703
727
  try:
704
728
  self.appbuilder.sm.set_oauth_session(provider, resp)
@@ -865,7 +889,10 @@ class AuthSAMLView(AuthView):
865
889
  try:
866
890
  idp = session.get("saml_idp")
867
891
  if not idp:
892
+ user = self._get_authenticated_user()
868
893
  logout_user()
894
+ if user is not None:
895
+ self.appbuilder.sm.on_user_logout(user)
869
896
  return redirect(self.appbuilder.get_url_for_index)
870
897
 
871
898
  url, should_logout = self.appbuilder.sm.get_saml_logout_redirect_url(
@@ -874,16 +901,25 @@ class AuthSAMLView(AuthView):
874
901
  session_index=session.get("saml_session_index"),
875
902
  )
876
903
  if should_logout:
904
+ user = self._get_authenticated_user()
877
905
  logout_user()
906
+ if user is not None:
907
+ self.appbuilder.sm.on_user_logout(user)
878
908
  return redirect(url or self.appbuilder.get_url_for_index)
879
909
 
880
910
  except (OneLogin_Saml2_Error, OneLogin_Saml2_ValidationError) as e:
881
911
  log.error("SAML SLO validation error: %s", e)
912
+ user = self._get_authenticated_user()
882
913
  logout_user()
914
+ if user is not None:
915
+ self.appbuilder.sm.on_user_logout(user)
883
916
  return redirect(self.appbuilder.get_url_for_index)
884
917
  except ValueError as e:
885
918
  log.error("SAML SLO configuration error: %s", e)
919
+ user = self._get_authenticated_user()
886
920
  logout_user()
921
+ if user is not None:
922
+ self.appbuilder.sm.on_user_logout(user)
887
923
  return redirect(self.appbuilder.get_url_for_index)
888
924
 
889
925
  @expose("/logout/")
@@ -895,7 +931,10 @@ class AuthSAMLView(AuthView):
895
931
  return redirect(url_for(".slo"))
896
932
  except Exception:
897
933
  pass
934
+ user = self._get_authenticated_user()
898
935
  logout_user()
936
+ if user is not None:
937
+ self.appbuilder.sm.on_user_logout(user)
899
938
  return redirect(
900
939
  current_app.config.get(
901
940
  "LOGOUT_REDIRECT_URL", self.appbuilder.get_url_for_index