fastapi-rtk 2.1.3__tar.gz → 2.1.5__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 (297) hide show
  1. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/PKG-INFO +1 -1
  2. fastapi_rtk-2.1.5/fastapi_rtk/_version.py +1 -0
  3. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/base_api.py +5 -10
  4. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/__init__.py +28 -22
  5. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_add_mixin.py +1 -2
  6. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_bulk_mixin.py +1 -2
  7. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_columns.py +5 -3
  8. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_delete_mixin.py +0 -1
  9. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_download_mixin.py +2 -3
  10. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_edit_mixin.py +4 -5
  11. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_file_mixin.py +6 -6
  12. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_info_mixin.py +4 -8
  13. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_list_mixin.py +1 -1
  14. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_show_mixin.py +1 -1
  15. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_upload_mixin.py +3 -3
  16. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/apis/license.py +1 -1
  17. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/auth.py +21 -58
  18. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/ldap.py +6 -25
  19. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/password_helpers/fab.py +1 -1
  20. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/strategies/db.py +4 -6
  21. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/generic/column.py +7 -5
  22. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/generic/filters.py +1 -1
  23. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/generic/interface.py +3 -3
  24. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/generic/model.py +2 -2
  25. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/generic/session.py +9 -13
  26. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/db.py +19 -17
  27. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/audit/_decorators_mixin.py +7 -11
  28. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/audit/_lifecycle_mixin.py +2 -2
  29. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/audit/_processing_mixin.py +3 -7
  30. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/audit/audit.py +6 -6
  31. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/audit/types.py +1 -1
  32. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/interface.py +1 -4
  33. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/model.py +9 -13
  34. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/bases/db.py +2 -2
  35. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/bases/file_manager.py +2 -3
  36. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/bases/filter.py +1 -1
  37. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/bases/interface.py +17 -21
  38. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/bases/model.py +2 -2
  39. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/cli.py +0 -3
  40. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/__init__.py +0 -1
  41. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/export.py +0 -15
  42. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/security.py +15 -12
  43. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/translate.py +3 -6
  44. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/types.py +0 -28
  45. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/utils.py +5 -5
  46. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/config.py +1 -1
  47. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/db.py +17 -31
  48. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/decorators.py +7 -5
  49. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/fastapi_react_toolkit.py +5 -9
  50. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/file_managers/file_manager.py +2 -2
  51. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/file_managers/image_manager.py +1 -1
  52. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/file_managers/s3_file_manager.py +3 -3
  53. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/file_managers/s3_image_manager.py +1 -2
  54. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/globals.py +4 -10
  55. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/babel/cli.py +2 -6
  56. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/lazy_text.py +5 -5
  57. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/manager.py +4 -3
  58. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/middlewares.py +13 -19
  59. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/mixins.py +1 -3
  60. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/registry.py +3 -3
  61. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/schemas.py +7 -3
  62. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/apis.py +1 -0
  63. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/__init__.py +2 -2
  64. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/_association_mixin.py +8 -8
  65. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/_builtin_role_mixin.py +5 -5
  66. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/_cleanup_mixin.py +2 -2
  67. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/_role_mixin.py +4 -4
  68. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/_user_mixin.py +8 -6
  69. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/setting.py +2 -2
  70. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/types.py +4 -4
  71. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/async_task_runner.py +21 -29
  72. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/csv_json_converter.py +2 -8
  73. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/deep_merge.py +1 -1
  74. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/extender_mixin.py +3 -3
  75. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/lazy.py +13 -14
  76. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/run_utils.py +5 -9
  77. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/self_dependencies.py +8 -10
  78. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/timezone.py +1 -1
  79. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/update_signature.py +2 -4
  80. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/conftest.py +0 -1
  81. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/api/test_model_rest_api.py +27 -6
  82. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/apis/test_info_contract.py +1 -3
  83. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/auth/test_oauth.py +17 -25
  84. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/conftest.py +0 -1
  85. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/file_managers/test_file_routes.py +4 -12
  86. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/api/conftest.py +0 -1
  87. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/api/model_rest_api/test_columns.py +3 -9
  88. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/api/model_rest_api/test_file_mixin.py +0 -2
  89. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/api/model_rest_api/test_init.py +24 -10
  90. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/api/test_base_api.py +1 -3
  91. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/password_helpers/test_fab.py +1 -2
  92. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/strategies/test_config.py +2 -3
  93. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/strategies/test_db.py +1 -2
  94. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/strategies/test_jwt.py +2 -5
  95. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/test_auth.py +9 -9
  96. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/generic/test_column.py +0 -1
  97. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/generic/test_db.py +2 -7
  98. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/generic/test_filters.py +0 -1
  99. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/generic/test_interface.py +1 -2
  100. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/generic/test_model.py +3 -2
  101. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/generic/test_session.py +2 -7
  102. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/conftest.py +1 -2
  103. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_audit.py +2 -7
  104. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_column.py +5 -6
  105. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_db.py +11 -26
  106. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_filters.py +1 -3
  107. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_geoalchemy2.py +49 -39
  108. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_interface.py +1 -2
  109. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_model.py +2 -5
  110. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_session.py +4 -5
  111. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/bases/test_db.py +0 -1
  112. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/bases/test_file_manager.py +0 -1
  113. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/bases/test_filter.py +0 -1
  114. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/bases/test_interface.py +0 -2
  115. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/bases/test_model.py +0 -1
  116. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/commands/conftest.py +0 -1
  117. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/commands/test_export.py +1 -6
  118. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/commands/test_security.py +21 -39
  119. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/commands/test_security_crypto.py +0 -1
  120. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/conftest.py +0 -1
  121. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/test_cli.py +1 -2
  122. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/test_decorators.py +0 -1
  123. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/test_utils.py +0 -1
  124. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/file_managers/conftest.py +0 -1
  125. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/file_managers/test_file_manager.py +0 -1
  126. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/file_managers/test_image_manager.py +0 -1
  127. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/file_managers/test_s3_file_manager.py +0 -1
  128. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/lang/test_babel_cli.py +0 -1
  129. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/lang/test_babel_config.py +0 -1
  130. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/lang/test_lazy_text.py +0 -1
  131. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/security/sqla/conftest.py +1 -2
  132. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/security/sqla/test_apis.py +10 -4
  133. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/security/sqla/test_models.py +1 -4
  134. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/security/sqla/test_security_manager.py +1 -5
  135. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_config.py +0 -1
  136. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_const.py +0 -1
  137. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_db.py +9 -21
  138. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_decorators.py +11 -12
  139. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_dependencies.py +2 -5
  140. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_exceptions.py +0 -1
  141. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_globals.py +0 -1
  142. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_manager.py +3 -4
  143. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_middlewares.py +1 -4
  144. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_registry.py +0 -1
  145. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_routers.py +29 -34
  146. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_schemas.py +2 -4
  147. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_setting.py +0 -1
  148. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_types.py +3 -2
  149. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_async_task_runner.py +1 -1
  150. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_extender_mixin.py +0 -1
  151. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_flask_appbuilder_utils.py +0 -1
  152. fastapi_rtk-2.1.3/fastapi_rtk/_version.py +0 -1
  153. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/.gitignore +0 -0
  154. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/LICENSE +0 -0
  155. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/README.md +0 -0
  156. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/__init__.py +0 -0
  157. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/__init__.py +0 -0
  158. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/api/model_rest_api/_params.py +0 -0
  159. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/apis/__init__.py +0 -0
  160. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/apis/info.py +0 -0
  161. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/__init__.py +0 -0
  162. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/hashers/__init__.py +0 -0
  163. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/hashers/pbkdf2.py +0 -0
  164. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/hashers/scrypt.py +0 -0
  165. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/password_helpers/__init__.py +0 -0
  166. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/strategies/__init__.py +0 -0
  167. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/strategies/config.py +0 -0
  168. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/auth/strategies/jwt.py +0 -0
  169. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/__init__.py +0 -0
  170. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/generic/__init__.py +0 -0
  171. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/generic/db.py +0 -0
  172. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/generic/exceptions.py +0 -0
  173. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/__init__.py +0 -0
  174. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/column.py +0 -0
  175. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/exceptions.py +0 -0
  176. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/__init__.py +0 -0
  177. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/audit/__init__.py +0 -0
  178. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/audit/_logger.py +0 -0
  179. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/__init__.py +0 -0
  180. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/filters.py +0 -0
  181. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/geometry_converter.py +0 -0
  182. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/filters.py +0 -0
  183. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/backends/sqla/session.py +0 -0
  184. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/bases/__init__.py +0 -0
  185. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/bases/session.py +0 -0
  186. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/__init__.py +0 -0
  187. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/_security_crypto.py +0 -0
  188. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/__init__.py +0 -0
  189. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/templates/fastapi/README +0 -0
  190. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/templates/fastapi/alembic.ini.mako +0 -0
  191. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/templates/fastapi/env.py +0 -0
  192. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/templates/fastapi/script.py.mako +0 -0
  193. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/README +0 -0
  194. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/alembic.ini.mako +0 -0
  195. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/env.py +0 -0
  196. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/script.py.mako +0 -0
  197. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/const.py +0 -0
  198. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/cli/decorators.py +0 -0
  199. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/const.py +0 -0
  200. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/dependencies.py +0 -0
  201. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/exceptions.py +0 -0
  202. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/file_managers/__init__.py +0 -0
  203. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/filters.py +0 -0
  204. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/__init__.py +0 -0
  205. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/babel/__init__.py +0 -0
  206. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/babel/config.py +0 -0
  207. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/babel.cfg +0 -0
  208. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/messages.pot +0 -0
  209. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.mo +0 -0
  210. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.po +0 -0
  211. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.mo +0 -0
  212. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.po +0 -0
  213. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/models.py +0 -0
  214. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/py.typed +0 -0
  215. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/routers.py +0 -0
  216. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/__init__.py +0 -0
  217. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/__init__.py +0 -0
  218. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/models.py +0 -0
  219. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/_exception_filters.py +0 -0
  220. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/_export.py +0 -0
  221. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/security/sqla/security_manager/_import.py +0 -0
  222. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/__init__.py +0 -0
  223. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/class_factory.py +0 -0
  224. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/flask_appbuilder_utils.py +0 -0
  225. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/formatter.py +0 -0
  226. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/hooks.py +0 -0
  227. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/merge_schema.py +0 -0
  228. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/multiple_async_contexts.py +0 -0
  229. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/pydantic.py +0 -0
  230. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/smartdefaultdict.py +0 -0
  231. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/sqla.py +0 -0
  232. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/utils/use_default_when_none.py +0 -0
  233. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/fastapi_rtk/version.py +0 -0
  234. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/pyproject.toml +0 -0
  235. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/docker-compose.gis.yml +0 -0
  236. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/__init__.py +0 -0
  237. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/api/__init__.py +0 -0
  238. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/apis/__init__.py +0 -0
  239. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/auth/__init__.py +0 -0
  240. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/auth/test_auth_flow.py +0 -0
  241. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/file_managers/__init__.py +0 -0
  242. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/security/__init__.py +0 -0
  243. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/security/sqla/__init__.py +0 -0
  244. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/security/sqla/test_security_manager.py +1 -1
  245. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/integration/test_app_smoke.py +0 -0
  246. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/__init__.py +0 -0
  247. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/api/__init__.py +0 -0
  248. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/api/model_rest_api/__init__.py +0 -0
  249. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/apis/__init__.py +0 -0
  250. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/apis/test_info.py +0 -0
  251. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/apis/test_license.py +0 -0
  252. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/__init__.py +0 -0
  253. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/hashers/__init__.py +0 -0
  254. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/hashers/test_pbkdf2.py +0 -0
  255. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/hashers/test_scrypt.py +0 -0
  256. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/password_helpers/__init__.py +0 -0
  257. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/auth/strategies/__init__.py +0 -0
  258. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/__init__.py +0 -0
  259. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/generic/__init__.py +0 -0
  260. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/generic/test_exceptions.py +0 -0
  261. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/__init__.py +0 -0
  262. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/backends/sqla/test_audit_types.py +0 -0
  263. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/bases/__init__.py +0 -0
  264. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/bases/test_session.py +0 -0
  265. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/__init__.py +0 -0
  266. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/commands/__init__.py +0 -0
  267. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/commands/test_db.py +0 -0
  268. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/commands/test_translate.py +0 -0
  269. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/cli/test_types.py +0 -0
  270. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/file_managers/__init__.py +0 -0
  271. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/file_managers/test_s3_image_manager.py +0 -0
  272. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/lang/__init__.py +0 -0
  273. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/security/__init__.py +0 -0
  274. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/security/sqla/__init__.py +0 -0
  275. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_fastapi_react_toolkit.py +0 -0
  276. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_filters.py +0 -0
  277. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_mixins.py +0 -0
  278. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_models.py +0 -0
  279. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/test_version.py +0 -0
  280. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/__init__.py +0 -0
  281. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_class_factory.py +0 -0
  282. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_csv_json_converter.py +0 -0
  283. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_deep_merge.py +0 -0
  284. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_formatter.py +0 -0
  285. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_hooks.py +0 -0
  286. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_lazy.py +0 -0
  287. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_merge_schema.py +0 -0
  288. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_multiple_async_contexts.py +0 -0
  289. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_pydantic.py +0 -0
  290. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_run_utils.py +0 -0
  291. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_self_dependencies.py +0 -0
  292. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_smartdefaultdict.py +0 -0
  293. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_sqla.py +0 -0
  294. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_timezone.py +0 -0
  295. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_update_signature.py +0 -0
  296. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/tests/unit/utils/test_use_default_when_none.py +0 -0
  297. {fastapi_rtk-2.1.3 → fastapi_rtk-2.1.5}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-rtk
3
- Version: 2.1.3
3
+ Version: 2.1.5
4
4
  Summary: A package that provides a set of tools to build a FastAPI application with a Class-Based CRUD API.
5
5
  Project-URL: Homepage, https://codeberg.org/datatactics/fastapi-rtk
6
6
  Project-URL: Issues, https://codeberg.org/datatactics/fastapi-rtk/issues
@@ -0,0 +1 @@
1
+ __version__ = "2.1.5"
@@ -21,11 +21,10 @@ class BaseApi:
21
21
  """
22
22
  Base API class for FastAPI.
23
23
 
24
- Provides a foundation for exposing API routes with integrated permission and authentication support.
25
- Handles route registration, permission management, and toolkit integration, allowing you to build
26
- secure and extensible APIs.
24
+ Exposes API routes with integrated permission and authentication support,
25
+ handling route registration, permission management, and toolkit integration.
27
26
 
28
- See [FastAPI path]("https://fastapi.tiangolo.com/tutorial/path-params/") and [FastAPI query]("https://fastapi.tiangolo.com/tutorial/query-params/") for more details on how to use path and query parameters in your API endpoints.
27
+ See [FastAPI path]("https://fastapi.tiangolo.com/tutorial/path-params/") and [FastAPI query]("https://fastapi.tiangolo.com/tutorial/query-params/") for details on path and query parameters in your API endpoints.
29
28
 
30
29
  Usage:
31
30
 
@@ -130,17 +129,13 @@ class BaseApi:
130
129
 
131
130
  async def on_startup(self):
132
131
  """
133
- Method to run on startup.
134
-
135
- This will be called by `FastAPIReactToolkit` when the application starts.
132
+ Called by `FastAPIReactToolkit` when the application starts.
136
133
  """
137
134
  pass
138
135
 
139
136
  async def on_shutdown(self):
140
137
  """
141
- Method to run on shutdown.
142
-
143
- This will be called by `FastAPIReactToolkit` when the application shuts down.
138
+ Called by `FastAPIReactToolkit` when the application shuts down.
144
139
  """
145
140
  pass
146
141
 
@@ -32,11 +32,11 @@ from pydantic import BaseModel, Field
32
32
 
33
33
  from ...backends.sqla.filters import BaseFilter, BaseOprFilter
34
34
  from ...backends.sqla.interface import SQLAInterface
35
+ from ...bases import DBQueryParams
35
36
  from ...const import AVAILABLE_ROUTES
36
37
  from ...dependencies import current_permissions
37
38
  from ...exceptions import HTTPWithValidationException, raise_exception
38
39
  from ...lang.lazy_text import translate
39
- from ...bases import DBQueryParams
40
40
  from ...schemas import (
41
41
  BaseResponseMany,
42
42
  BaseResponseSingle,
@@ -59,13 +59,7 @@ from ._edit_mixin import EditMixin
59
59
  from ._file_mixin import FileMixin
60
60
  from ._info_mixin import InfoMixin
61
61
  from ._list_mixin import ListMixin
62
- from ._upload_mixin import UploadMixin
63
62
  from ._params import (
64
- PARAM_BODY_SESSION,
65
- PARAM_ID_SESSION,
66
- PARAM_ID_SESSION_ITEM,
67
- PARAM_IDS_Q_SESSION_ITEMS,
68
- PARAM_Q,
69
63
  P_BODY,
70
64
  P_ID,
71
65
  P_IDS,
@@ -73,9 +67,15 @@ from ._params import (
73
67
  P_ITEMS,
74
68
  P_Q,
75
69
  P_SESSION,
70
+ PARAM_BODY_SESSION,
71
+ PARAM_ID_SESSION,
72
+ PARAM_ID_SESSION_ITEM,
73
+ PARAM_IDS_Q_SESSION_ITEMS,
74
+ PARAM_Q,
76
75
  Params,
77
76
  )
78
77
  from ._show_mixin import ShowMixin
78
+ from ._upload_mixin import UploadMixin
79
79
 
80
80
  __all__ = ["ModelRestApi"]
81
81
 
@@ -100,9 +100,9 @@ class ModelRestApi(
100
100
  """
101
101
  Base API class for FastAPI with built-in RESTful endpoints for common data operations.
102
102
 
103
- This class automatically delivers standard routes for CRUD (Create, Read, Update, Delete),
103
+ Delivers standard routes for CRUD (Create, Read, Update, Delete),
104
104
  file and image management, data download, bulk operations, filtering, and pagination.
105
- Each route is extensible with corresponding pre- and post-processing methods, allowing for custom logic
105
+ Each route is extensible with pre- and post-processing methods for custom logic
106
106
  before and after the main operation.
107
107
 
108
108
  Usage:
@@ -170,11 +170,11 @@ class ModelRestApi(
170
170
  ]
171
171
  )
172
172
  """
173
- The list of routes to expose. available routes: `info`, `download`, `bulk`, `get_list`, `get`, `post`, `put`, `delete`.
173
+ The list of routes to expose. Available routes: `info`, `download`, `bulk`, `get_list`, `get`, `post`, `put`, `delete`.
174
174
  """
175
175
  exclude_routes: typing.List[AVAILABLE_ROUTES] = lazy(lambda: [])
176
176
  """
177
- The list of routes to exclude. available routes: `info`, `download`, `bulk`, `get_list`, `get`, `post`, `put`, `delete`.
177
+ The list of routes to exclude. Available routes: `info`, `download`, `bulk`, `get_list`, `get`, `post`, `put`, `delete`.
178
178
  """
179
179
  protected_routes: typing.List[AVAILABLE_ROUTES] = lazy(
180
180
  lambda self: [x for x in self.routes if x not in self.exclude_protected_routes]
@@ -208,7 +208,9 @@ class ModelRestApi(
208
208
  base_order = ("name", "asc")
209
209
  ```
210
210
  """
211
- base_filters: typing.List[typing.Tuple[str, typing.Type[BaseFilter], typing.Any]] | None = None
211
+ base_filters: (
212
+ typing.List[typing.Tuple[str, typing.Type[BaseFilter], typing.Any]] | None
213
+ ) = None
212
214
  """
213
215
  The default filters to apply for the following endpoints: `download`, `list`, `show`, `add`, and `edit`. Defaults to None.
214
216
 
@@ -219,7 +221,9 @@ class ModelRestApi(
219
221
  ]
220
222
  ```
221
223
  """
222
- base_opr_filters: typing.List[typing.Tuple[typing.Type[BaseOprFilter], typing.Any]] | None = None
224
+ base_opr_filters: (
225
+ typing.List[typing.Tuple[typing.Type[BaseOprFilter], typing.Any]] | None
226
+ ) = None
223
227
  """
224
228
  The default opr filters to apply for the following endpoints: `download`, `list`, `show`, `add`, and `edit`. Defaults to None.
225
229
 
@@ -471,7 +475,7 @@ class ModelRestApi(
471
475
  cache=False,
472
476
  )
473
477
  """
474
- The title for the list endpoint. If not provided, Defaults to "List {ModelName}".
478
+ The title for the list endpoint. If not provided, defaults to "List {ModelName}".
475
479
  """
476
480
  show_title = lazy(
477
481
  lambda self: translate(
@@ -480,7 +484,7 @@ class ModelRestApi(
480
484
  cache=False,
481
485
  )
482
486
  """
483
- The title for the show endpoint. If not provided, Defaults to "Show {ModelName}".
487
+ The title for the show endpoint. If not provided, defaults to "Show {ModelName}".
484
488
  """
485
489
  add_title = lazy(
486
490
  lambda self: translate(
@@ -489,7 +493,7 @@ class ModelRestApi(
489
493
  cache=False,
490
494
  )
491
495
  """
492
- The title for the add endpoint. If not provided, Defaults to "Add {ModelName}".
496
+ The title for the add endpoint. If not provided, defaults to "Add {ModelName}".
493
497
  """
494
498
  edit_title = lazy(
495
499
  lambda self: translate(
@@ -498,7 +502,7 @@ class ModelRestApi(
498
502
  cache=False,
499
503
  )
500
504
  """
501
- The title for the edit endpoint. If not provided, Defaults to "Edit {ModelName}".
505
+ The title for the edit endpoint. If not provided, defaults to "Edit {ModelName}".
502
506
  """
503
507
 
504
508
  """
@@ -613,7 +617,7 @@ class ModelRestApi(
613
617
 
614
618
  extra_list_fetch_columns = lazy(lambda: list[str]())
615
619
  """
616
- The list of columns to be fetch from the database alongside the `list_columns`. Useful if you don't want some columns to be shown but still want to fetch them.
620
+ The list of columns to be fetched from the database alongside the `list_columns`. Useful if you don't want some columns to be shown but still want to fetch them.
617
621
  """
618
622
  list_select_columns = lazy(
619
623
  lambda self: self.list_columns + self.extra_list_fetch_columns
@@ -625,7 +629,7 @@ class ModelRestApi(
625
629
  """
626
630
  extra_show_fetch_columns = lazy(lambda: list[str]())
627
631
  """
628
- The list of columns to be fetch from the database alongside the `show_columns`. Useful if you don't want some columns to be shown but still want to fetch them.
632
+ The list of columns to be fetched from the database alongside the `show_columns`. Useful if you don't want some columns to be shown but still want to fetch them.
629
633
  """
630
634
  show_select_columns = lazy(
631
635
  lambda self: self.show_columns + self.extra_show_fetch_columns
@@ -659,7 +663,8 @@ class ModelRestApi(
659
663
  | typing.Callable[[ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool]
660
664
  | dict[
661
665
  str,
662
- bool | typing.Callable[[ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool],
666
+ bool
667
+ | typing.Callable[[ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool],
663
668
  ]
664
669
  ) = lazy(lambda: lambda info: len(info.values) > 100)
665
670
  """
@@ -700,7 +705,8 @@ class ModelRestApi(
700
705
  | typing.Callable[[ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool]
701
706
  | dict[
702
707
  str,
703
- bool | typing.Callable[[ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool],
708
+ bool
709
+ | typing.Callable[[ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool],
704
710
  ]
705
711
  ) = lazy(lambda: lambda info: len(info.values) > 100)
706
712
  """
@@ -1172,7 +1178,7 @@ class ModelRestApi(
1172
1178
  filter_classes=self.base_filters,
1173
1179
  opr_filters=q.opr_filters,
1174
1180
  opr_filter_classes=self.base_opr_filters,
1175
- global_filter=(self.list_columns, q.global_filter)
1181
+ global_filter=(q.columns or self.list_columns, q.global_filter)
1176
1182
  if q.global_filter
1177
1183
  else None,
1178
1184
  )
@@ -134,8 +134,7 @@ class AddMixin:
134
134
  self, item: Model, params: PARAM_BODY_SESSION
135
135
  ) -> None | Model | typing.Any:
136
136
  """
137
- Post-process the item after adding it to the database.
138
- But before sending the response.
137
+ Post-process the item after adding it to the database, before sending the response.
139
138
 
140
139
  - When a `Model` is returned, it will replace the current `item`.
141
140
  - When any other value is returned, it is assumed to be a response to be returned directly.
@@ -79,8 +79,7 @@ class BulkMixin:
79
79
  session: SQLASession,
80
80
  ) -> Response:
81
81
  """
82
- Bulk handler for the API.
83
- To be implemented by the subclass.
82
+ Bulk handler for the API, to be implemented by the subclass.
84
83
 
85
84
  Example:
86
85
  ```python
@@ -94,7 +94,9 @@ class ColumnsMixin:
94
94
  return re.sub("[._]", " ", name).title()
95
95
 
96
96
  def _init_filters(
97
- self, datamodel: SQLAInterface, filters: typing.List[typing.Tuple[str, typing.Type[BaseFilter], typing.Any]]
97
+ self,
98
+ datamodel: SQLAInterface,
99
+ filters: typing.List[typing.Tuple[str, typing.Type[BaseFilter], typing.Any]],
98
100
  ):
99
101
  """
100
102
  Initialize the filter for the API.
@@ -125,7 +127,7 @@ class ColumnsMixin:
125
127
  ):
126
128
  """
127
129
  Handle the schema extra fields for the API.
128
- This will transform the fields into a dictionary with the field name as the key and the field type as the value if the field is not a tuple.
130
+ Transforms non-tuple fields into a dictionary mapping field name to field type.
129
131
 
130
132
  Args:
131
133
  schema_extra_fields (dict[str, type | tuple[type, pydantic.fields.FieldInfo]]): The schema extra fields to handle.
@@ -181,7 +183,7 @@ class ColumnsMixin:
181
183
  name: str | None = None,
182
184
  ):
183
185
  """
184
- Create a request schema based on the provided `schema` parameter. Useful for creating request schemas for add and edit endpoints, as it will transform the relation columns into the appropriate schema.
186
+ Create a request schema from `schema` for add and edit endpoints, transforming relation columns into the appropriate schema.
185
187
 
186
188
  Args:
187
189
  schema (typing.Type[BaseModel]): The base schema to create the request schema from.
@@ -61,7 +61,6 @@ class DeleteMixin:
61
61
 
62
62
  Args:
63
63
  id (str): The id of the item.
64
- query (QueryManager): The query manager object.
65
64
  session (SQLASession): A database scoped session.
66
65
 
67
66
  Returns:
@@ -73,7 +73,7 @@ class DownloadMixin:
73
73
  Downloads a file in a headless mode.
74
74
 
75
75
  Args:
76
- body (QueryBody): The query body.
76
+ q (QuerySchema): The query schema.
77
77
  session (SQLASession): A database scoped session.
78
78
  export_mode (ExportMode): The export mode. Can be "simplified" or "detailed". Defaults to "simplified".
79
79
  delimiter (str): The delimiter for the CSV file. Defaults to ",".
@@ -193,11 +193,10 @@ class DownloadMixin:
193
193
  quotechar: str = '"',
194
194
  ):
195
195
  """
196
- Import data from CSV format. This will parse the CSV data and resolve any relationships.
196
+ Import data from CSV format, parsing it and resolving any relationships.
197
197
 
198
198
  Args:
199
199
  data (str | bytes): The CSV data to import.
200
- query (QueryManager): The query manager object.
201
200
  session (SQLASession): The session object for the database connection.
202
201
  delimiter (str, optional): Delimiter for the CSV file. Defaults to ",".
203
202
  quotechar (str): Quote character for the CSV file. Defaults to '"'.
@@ -68,7 +68,7 @@ class EditMixin:
68
68
  session: SQLASession = SelfDepends().datamodel.get_session_factory,
69
69
  ):
70
70
  """
71
- Updates an item in a headless mode.
71
+ Updates an item in headless mode.
72
72
 
73
73
  Args:
74
74
  id (str): The id of the item.
@@ -76,7 +76,7 @@ class EditMixin:
76
76
  session (SQLASession): A database scoped session.
77
77
 
78
78
  Returns:
79
- add_return_schema: The add return schema.
79
+ edit_return_schema: The edit return schema.
80
80
 
81
81
  ### Note:
82
82
  If you are overriding this method, make sure to copy all the decorators too.
@@ -159,7 +159,7 @@ class EditMixin:
159
159
  Args:
160
160
  item (Model): The item that will be updated in the database.
161
161
  data (dict[str, typing.Any]): The data to merge with the item.
162
- params (PARAM_BODY_QUERY_SESSION): Additional data passed to the handler.
162
+ params (PARAM_BODY_SESSION): Additional data passed to the handler.
163
163
  """
164
164
  pass
165
165
 
@@ -182,8 +182,7 @@ class EditMixin:
182
182
  self, item: Model, params: PARAM_BODY_SESSION
183
183
  ) -> None | Model | typing.Any:
184
184
  """
185
- Post-process the item after updating it in the database.
186
- But before sending the response.
185
+ Post-process the item after updating it in the database, before sending the response.
187
186
 
188
187
  - When a `Model` is returned, it will replace the current `item`.
189
188
  - When any other value is returned, it is assumed to be a response to be returned directly.
@@ -27,9 +27,9 @@ class FileMixin:
27
27
 
28
28
  def image(self):
29
29
  """
30
- Image endpoint for the API. Used to retrieve the image from the application.
30
+ Image endpoint for the API.
31
31
 
32
- This endpoint is only available if the model has image columns.
32
+ Only available if the model has image columns.
33
33
  """
34
34
  if not self.datamodel.get_image_column_list():
35
35
  return
@@ -50,9 +50,9 @@ class FileMixin:
50
50
 
51
51
  def file(self):
52
52
  """
53
- File endpoint for the API. Used to retrieve the file from the application.
53
+ File endpoint for the API.
54
54
 
55
- This endpoint is only available if the model has file columns.
55
+ Only available if the model has file columns.
56
56
  """
57
57
  if not self.datamodel.get_file_column_list():
58
58
  return
@@ -73,7 +73,7 @@ class FileMixin:
73
73
 
74
74
  async def image_headless(self, filename: str):
75
75
  """
76
- Retrieves an image based on the filename.
76
+ Retrieves an image by filename.
77
77
  """
78
78
  async with AsyncTaskRunner():
79
79
  pre_image = await smart_run(self.pre_image, filename)
@@ -91,7 +91,7 @@ class FileMixin:
91
91
 
92
92
  async def file_headless(self, filename: str):
93
93
  """
94
- Retrieves a file based on the filename.
94
+ Retrieves a file by filename.
95
95
  """
96
96
  async with AsyncTaskRunner():
97
97
  pre_file = await smart_run(self.pre_file, filename)
@@ -48,9 +48,7 @@ class InfoMixin:
48
48
  add_obj_schema: typing.Type[BaseModel]
49
49
  add_jsonforms_use_enum: (
50
50
  bool
51
- | typing.Callable[
52
- [ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool
53
- ]
51
+ | typing.Callable[[ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool]
54
52
  | dict[
55
53
  str,
56
54
  bool
@@ -64,9 +62,7 @@ class InfoMixin:
64
62
  edit_obj_schema: typing.Type[BaseModel]
65
63
  edit_jsonforms_use_enum: (
66
64
  bool
67
- | typing.Callable[
68
- [ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool
69
- ]
65
+ | typing.Callable[[ColumnInfo | ColumnEnumInfo | ColumnRelationInfo], bool]
70
66
  | dict[
71
67
  str,
72
68
  bool
@@ -104,7 +100,7 @@ class InfoMixin:
104
100
  session_count: SQLASession = SelfDepends().datamodel.get_session_factory,
105
101
  ):
106
102
  """
107
- Retrieves information in a headless mode.
103
+ Retrieves information in headless mode.
108
104
 
109
105
  Args:
110
106
  permissions (typing.List[str]): A list of permissions.
@@ -155,7 +151,7 @@ class InfoMixin:
155
151
  session_count: SQLASession,
156
152
  ):
157
153
  """
158
- Generates the information schema for the API based on the given permissions and database session.
154
+ Generates the information schema for the API.
159
155
 
160
156
  Args:
161
157
  permissions (typing.List[str]): The list of permissions for the API.
@@ -54,7 +54,7 @@ class ListMixin:
54
54
  ] = SelfDepends().get_q_and_session_count_factory,
55
55
  ):
56
56
  """
57
- Retrieves all items in a headless mode.
57
+ Retrieves all items in headless mode.
58
58
 
59
59
  Args:
60
60
  session (SQLASession): A database scoped session.
@@ -61,7 +61,7 @@ class ShowMixin:
61
61
  session: SQLASession = SelfDepends().datamodel.get_session_factory,
62
62
  ):
63
63
  """
64
- Retrieves a single item in a headless mode.
64
+ Retrieves a single item in headless mode.
65
65
 
66
66
  Args:
67
67
  id (str): The id of the item.
@@ -2,9 +2,9 @@
2
2
  Upload route mixin for ``ModelRestApi``.
3
3
 
4
4
  The ``upload`` registration and ``upload_headless`` implementation are
5
- disabled (commented out) until further notice. The mixin is wired into
6
- ``ModelRestApi`` so the route can be re-enabled by uncommenting the
7
- blocks below without further plumbing.
5
+ disabled (commented out) until further notice. The mixin stays wired into
6
+ ``ModelRestApi`` so the route can be re-enabled by uncommenting the blocks
7
+ below.
8
8
  """
9
9
 
10
10
 
@@ -16,7 +16,7 @@ from ..utils import lazy, prettify_dict
16
16
 
17
17
 
18
18
  class LicenseParserError(Exception):
19
- """Custom exception for license parser errors."""
19
+ """Raised on license parsing failures."""
20
20
 
21
21
  def __init__(
22
22
  self, data: typing.Any, message: str = "Error processing license data"