fastapi-rtk 2.16.0__tar.gz → 2.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/PKG-INFO +1 -1
  2. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/__init__.py +13 -0
  3. fastapi_rtk-2.18.0/fastapi_rtk/_version.py +1 -0
  4. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/guide/backend.md +7 -5
  5. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/api/__init__.py +13 -0
  6. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/api/base_api.py +14 -4
  7. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/__init__.py +19 -0
  8. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/model_rest_api.py +2316 -0
  9. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_params.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/params.py +1 -1
  10. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/__init__.py +25 -0
  11. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_add_service.py +99 -0
  12. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_bulk_service.py +59 -0
  13. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_delete_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_delete_service.py +36 -77
  14. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_download_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_download_service.py +99 -87
  15. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_edit_service.py +123 -0
  16. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_file_service.py +85 -0
  17. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_info_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_info_service.py +86 -97
  18. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_list_service.py +99 -0
  19. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_columns_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_schema_service.py +95 -80
  20. fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_show_service.py +76 -0
  21. fastapi_rtk-2.16.0/fastapi_rtk/backends/sqla/extensions/audit/_decorators_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/backends/sqla/extensions/audit/_decorators_service.py +38 -64
  22. fastapi_rtk-2.16.0/fastapi_rtk/backends/sqla/extensions/audit/_lifecycle_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/backends/sqla/extensions/audit/_lifecycle_service.py +79 -120
  23. fastapi_rtk-2.16.0/fastapi_rtk/backends/sqla/extensions/audit/_processing_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/backends/sqla/extensions/audit/_processing_service.py +51 -56
  24. fastapi_rtk-2.18.0/fastapi_rtk/backends/sqla/extensions/audit/audit.py +715 -0
  25. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/filters.py +44 -10
  26. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/interface.py +3 -0
  27. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/interface.py +3 -1
  28. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/const.py +1 -0
  29. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/fastapi_react_toolkit.py +2 -2
  30. fastapi_rtk-2.18.0/fastapi_rtk/security/sqla/security_manager/__init__.py +4 -0
  31. fastapi_rtk-2.16.0/fastapi_rtk/security/sqla/security_manager/__init__.py → fastapi_rtk-2.18.0/fastapi_rtk/security/sqla/security_manager/security_manager.py +1 -1
  32. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/setting.py +18 -0
  33. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/lazy.py +18 -5
  34. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/api/test_model_rest_api.py +30 -6
  35. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/model_rest_api/test_init.py +18 -3
  36. fastapi_rtk-2.18.0/tests/unit/api/model_rest_api/test_service_delegators.py +77 -0
  37. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/conftest.py +27 -3
  38. fastapi_rtk-2.18.0/tests/unit/backends/sqla/test_audit_service_delegators.py +81 -0
  39. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_filters.py +70 -0
  40. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_interface.py +15 -0
  41. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_user_service.py +1 -1
  42. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_const.py +1 -0
  43. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_setting.py +19 -0
  44. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_lazy.py +99 -0
  45. fastapi_rtk-2.16.0/fastapi_rtk/_version.py +0 -1
  46. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/__init__.py +0 -1322
  47. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_add_mixin.py +0 -135
  48. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_bulk_mixin.py +0 -97
  49. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_edit_mixin.py +0 -176
  50. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_file_mixin.py +0 -131
  51. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_list_mixin.py +0 -119
  52. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_show_mixin.py +0 -97
  53. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_typed_base.py +0 -215
  54. fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_upload_mixin.py +0 -62
  55. fastapi_rtk-2.16.0/fastapi_rtk/backends/sqla/extensions/audit/audit.py +0 -255
  56. fastapi_rtk-2.16.0/tests/unit/api/model_rest_api/test_typed_base_consistency.py +0 -104
  57. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/.gitignore +0 -0
  58. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/LICENSE +0 -0
  59. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/README.md +0 -0
  60. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/adapters/agents-md/AGENTS.md +0 -0
  61. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/adapters/claude/skill.frontmatter +0 -0
  62. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/guide/frontend.md +0 -0
  63. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/guide/legacy.md +0 -0
  64. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/guide/overview.md +0 -0
  65. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/apis/__init__.py +0 -0
  66. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/apis/info.py +0 -0
  67. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/apis/license.py +0 -0
  68. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/__init__.py +0 -0
  69. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/auth.py +0 -0
  70. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/hashers/__init__.py +0 -0
  71. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/hashers/pbkdf2.py +0 -0
  72. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/hashers/scrypt.py +0 -0
  73. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/ldap.py +0 -0
  74. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/password_helpers/__init__.py +0 -0
  75. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/password_helpers/fab.py +0 -0
  76. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/strategies/__init__.py +0 -0
  77. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/strategies/config.py +0 -0
  78. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/strategies/db.py +0 -0
  79. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/strategies/jwt.py +0 -0
  80. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/__init__.py +0 -0
  81. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/__init__.py +0 -0
  82. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/column.py +0 -0
  83. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/db.py +0 -0
  84. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/exceptions.py +0 -0
  85. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/filters.py +0 -0
  86. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/interface.py +0 -0
  87. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/model.py +0 -0
  88. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/session.py +0 -0
  89. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/__init__.py +0 -0
  90. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/column.py +0 -0
  91. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/db.py +0 -0
  92. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/exceptions.py +0 -0
  93. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/__init__.py +0 -0
  94. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/audit/__init__.py +0 -0
  95. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/audit/_logger.py +0 -0
  96. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/audit/types.py +0 -0
  97. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/__init__.py +0 -0
  98. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/filters.py +0 -0
  99. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/geometry_converter.py +0 -0
  100. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/model.py +0 -0
  101. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/session.py +0 -0
  102. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/__init__.py +0 -0
  103. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/cache.py +0 -0
  104. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/db.py +0 -0
  105. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/file_manager.py +0 -0
  106. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/filter.py +0 -0
  107. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/loop_manager.py +0 -0
  108. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/model.py +0 -0
  109. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/session.py +0 -0
  110. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/user_cache.py +0 -0
  111. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/caches/__init__.py +0 -0
  112. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/caches/cache.py +0 -0
  113. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/caches/serializers.py +0 -0
  114. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/caches/storages.py +0 -0
  115. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/__init__.py +0 -0
  116. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/cli.py +0 -0
  117. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/__init__.py +0 -0
  118. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/_security_crypto.py +0 -0
  119. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/__init__.py +0 -0
  120. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/adapters/__init__.py +0 -0
  121. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/adapters/agents_md.py +0 -0
  122. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/adapters/claude.py +0 -0
  123. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/base.py +0 -0
  124. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/docs.py +0 -0
  125. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/__init__.py +0 -0
  126. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi/README +0 -0
  127. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi/alembic.ini.mako +0 -0
  128. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi/env.py +0 -0
  129. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi/script.py.mako +0 -0
  130. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/README +0 -0
  131. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/alembic.ini.mako +0 -0
  132. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/env.py +0 -0
  133. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/script.py.mako +0 -0
  134. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/export.py +0 -0
  135. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/security.py +0 -0
  136. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/translate.py +0 -0
  137. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/const.py +0 -0
  138. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/decorators.py +0 -0
  139. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/types.py +0 -0
  140. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/utils.py +0 -0
  141. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/config.py +0 -0
  142. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/db.py +0 -0
  143. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/decorators.py +0 -0
  144. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/dependencies.py +0 -0
  145. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/exceptions.py +0 -0
  146. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/__init__.py +0 -0
  147. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/file_manager.py +0 -0
  148. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/image_manager.py +0 -0
  149. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/s3_file_manager.py +0 -0
  150. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/s3_image_manager.py +0 -0
  151. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/filters.py +0 -0
  152. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/globals.py +0 -0
  153. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/__init__.py +0 -0
  154. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/babel/__init__.py +0 -0
  155. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/babel/cli.py +0 -0
  156. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/babel/config.py +0 -0
  157. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/babel.cfg +0 -0
  158. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/lazy_text.py +0 -0
  159. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/messages.pot +0 -0
  160. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.mo +0 -0
  161. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.po +0 -0
  162. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.mo +0 -0
  163. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.po +0 -0
  164. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/loop_managers/__init__.py +0 -0
  165. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/loop_managers/loop_manager.py +0 -0
  166. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/manager.py +0 -0
  167. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/middlewares.py +0 -0
  168. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/mixins.py +0 -0
  169. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/models.py +0 -0
  170. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/py.typed +0 -0
  171. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/registry.py +0 -0
  172. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/routers.py +0 -0
  173. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/schemas.py +0 -0
  174. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/__init__.py +0 -0
  175. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/__init__.py +0 -0
  176. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/apis.py +0 -0
  177. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/models.py +0 -0
  178. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_builtin_role_service.py +0 -0
  179. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_entities.py +0 -0
  180. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_exception_filters.py +0 -0
  181. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_export.py +0 -0
  182. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_import.py +0 -0
  183. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_permission_service.py +0 -0
  184. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_results.py +0 -0
  185. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_role_service.py +0 -0
  186. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_user_service.py +0 -0
  187. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/user_cache.py +0 -0
  188. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/types.py +0 -0
  189. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/__init__.py +0 -0
  190. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/async_task_runner.py +0 -0
  191. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/class_factory.py +0 -0
  192. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/csv_json_converter.py +0 -0
  193. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/deep_merge.py +0 -0
  194. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/extender_mixin.py +0 -0
  195. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/flask_appbuilder_utils.py +0 -0
  196. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/formatter.py +0 -0
  197. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/hooks.py +0 -0
  198. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/merge_schema.py +0 -0
  199. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/multiple_async_contexts.py +0 -0
  200. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/pydantic.py +0 -0
  201. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/run_utils.py +0 -0
  202. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/self_dependencies.py +0 -0
  203. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/smartdefaultdict.py +0 -0
  204. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/sqla.py +0 -0
  205. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/timezone.py +0 -0
  206. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/update_signature.py +0 -0
  207. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/use_default_when_none.py +0 -0
  208. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/version.py +0 -0
  209. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/pyproject.toml +0 -0
  210. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/conftest.py +0 -0
  211. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/docker-compose.gis.yml +0 -0
  212. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/__init__.py +0 -0
  213. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/api/__init__.py +0 -0
  214. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/api/test_add_edit_relation_response.py +0 -0
  215. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/apis/__init__.py +0 -0
  216. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/apis/test_info_callable_schema.py +0 -0
  217. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/apis/test_info_contract.py +0 -0
  218. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/auth/__init__.py +0 -0
  219. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/auth/test_auth_flow.py +0 -0
  220. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/auth/test_oauth.py +0 -0
  221. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/conftest.py +0 -0
  222. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/file_managers/__init__.py +0 -0
  223. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/file_managers/test_file_routes.py +0 -0
  224. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/__init__.py +0 -0
  225. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/__init__.py +0 -0
  226. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/conftest.py +0 -0
  227. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/test_permission_service.py +0 -0
  228. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/test_role_service.py +0 -0
  229. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/test_security_manager.py +0 -0
  230. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/test_user_service.py +0 -0
  231. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/test_app_smoke.py +0 -0
  232. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/__init__.py +0 -0
  233. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/__init__.py +0 -0
  234. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/conftest.py +0 -0
  235. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/model_rest_api/__init__.py +0 -0
  236. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/model_rest_api/test_columns.py +0 -0
  237. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/model_rest_api/test_file_mixin.py +0 -0
  238. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/test_base_api.py +0 -0
  239. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/apis/__init__.py +0 -0
  240. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/apis/test_info.py +0 -0
  241. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/apis/test_license.py +0 -0
  242. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/__init__.py +0 -0
  243. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/hashers/__init__.py +0 -0
  244. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/hashers/test_pbkdf2.py +0 -0
  245. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/hashers/test_scrypt.py +0 -0
  246. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/password_helpers/__init__.py +0 -0
  247. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/password_helpers/test_fab.py +0 -0
  248. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/strategies/__init__.py +0 -0
  249. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/strategies/test_config.py +0 -0
  250. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/strategies/test_db.py +0 -0
  251. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/strategies/test_jwt.py +0 -0
  252. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/test_auth.py +0 -0
  253. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/__init__.py +0 -0
  254. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/__init__.py +0 -0
  255. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_column.py +0 -0
  256. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_db.py +0 -0
  257. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_exceptions.py +0 -0
  258. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_filters.py +0 -0
  259. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_interface.py +0 -0
  260. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_model.py +0 -0
  261. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_session.py +0 -0
  262. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/__init__.py +0 -0
  263. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_audit.py +0 -0
  264. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_audit_types.py +0 -0
  265. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_column.py +0 -0
  266. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_db.py +0 -0
  267. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_geoalchemy2.py +0 -0
  268. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_model.py +0 -0
  269. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_session.py +0 -0
  270. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/__init__.py +0 -0
  271. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_db.py +0 -0
  272. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_file_manager.py +0 -0
  273. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_filter.py +0 -0
  274. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_interface.py +0 -0
  275. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_model.py +0 -0
  276. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_session.py +0 -0
  277. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/__init__.py +0 -0
  278. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/__init__.py +0 -0
  279. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/conftest.py +0 -0
  280. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_db.py +0 -0
  281. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_export.py +0 -0
  282. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_security.py +0 -0
  283. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_security_crypto.py +0 -0
  284. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_translate.py +0 -0
  285. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/conftest.py +0 -0
  286. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/test_cli.py +0 -0
  287. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/test_decorators.py +0 -0
  288. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/test_types.py +0 -0
  289. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/test_utils.py +0 -0
  290. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/__init__.py +0 -0
  291. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/conftest.py +0 -0
  292. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/test_file_manager.py +0 -0
  293. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/test_image_manager.py +0 -0
  294. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/test_s3_file_manager.py +0 -0
  295. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/test_s3_image_manager.py +0 -0
  296. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/lang/__init__.py +0 -0
  297. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/lang/test_babel_cli.py +0 -0
  298. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/lang/test_babel_config.py +0 -0
  299. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/lang/test_lazy_text.py +0 -0
  300. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/__init__.py +0 -0
  301. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/__init__.py +0 -0
  302. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/conftest.py +0 -0
  303. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/__init__.py +0 -0
  304. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_builtin_role_service.py +0 -0
  305. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_entities.py +0 -0
  306. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_permission_service.py +0 -0
  307. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_results.py +0 -0
  308. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_role_service.py +0 -0
  309. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/test_apis.py +0 -0
  310. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/test_models.py +0 -0
  311. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/test_security_manager.py +0 -0
  312. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_caches.py +0 -0
  313. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_config.py +0 -0
  314. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_db.py +0 -0
  315. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_decorators.py +0 -0
  316. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_dependencies.py +0 -0
  317. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_exceptions.py +0 -0
  318. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_fastapi_react_toolkit.py +0 -0
  319. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_filters.py +0 -0
  320. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_globals.py +0 -0
  321. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_manager.py +0 -0
  322. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_middlewares.py +0 -0
  323. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_mixins.py +0 -0
  324. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_models.py +0 -0
  325. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_registry.py +0 -0
  326. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_routers.py +0 -0
  327. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_schemas.py +0 -0
  328. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_types.py +0 -0
  329. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_user_cache.py +0 -0
  330. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_version.py +0 -0
  331. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/__init__.py +0 -0
  332. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_async_task_runner.py +0 -0
  333. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_class_factory.py +0 -0
  334. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_csv_json_converter.py +0 -0
  335. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_deep_merge.py +0 -0
  336. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_extender_mixin.py +0 -0
  337. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_flask_appbuilder_utils.py +0 -0
  338. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_formatter.py +0 -0
  339. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_hooks.py +0 -0
  340. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_merge_schema.py +0 -0
  341. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_multiple_async_contexts.py +0 -0
  342. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_pydantic.py +0 -0
  343. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_run_utils.py +0 -0
  344. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_self_dependencies.py +0 -0
  345. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_smartdefaultdict.py +0 -0
  346. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_sqla.py +0 -0
  347. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_timezone.py +0 -0
  348. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_update_signature.py +0 -0
  349. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_use_default_when_none.py +0 -0
  350. {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: fastapi-rtk
3
- Version: 2.16.0
3
+ Version: 2.18.0
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
@@ -37,6 +37,19 @@ __all__ = [
37
37
  # .api
38
38
  "BaseApi",
39
39
  "ModelRestApi",
40
+ "Params",
41
+ "P_ID",
42
+ "P_IDS",
43
+ "P_Q",
44
+ "P_SESSION",
45
+ "P_BODY",
46
+ "P_ITEM",
47
+ "P_ITEMS",
48
+ "PARAM_Q",
49
+ "PARAM_IDS_Q_SESSION_ITEMS",
50
+ "PARAM_ID_SESSION",
51
+ "PARAM_ID_SESSION_ITEM",
52
+ "PARAM_BODY_SESSION",
40
53
  # .auth
41
54
  "FABPasswordHelper",
42
55
  "Authenticator",
@@ -0,0 +1 @@
1
+ __version__ = "2.18.0"
@@ -268,7 +268,7 @@ class ItemApi(ModelRestApi):
268
268
  async def post_delete(self, item: Item, params): ...
269
269
  ```
270
270
 
271
- To reject a request from a pre-hook, `raise fastapi.HTTPException(...)` (a bare `raise ValueError(...)` becomes HTTP 500; there is no auto-translation). To override the response without rejecting, return a non-`Model` value from the hook, and the dispatcher treats that value as the response and skips the rest of the pipeline (see `_add_mixin.py:75-81` and `_edit_mixin.py:100-106`).
271
+ To reject a request from a pre-hook, `raise fastapi.HTTPException(...)` (a bare `raise ValueError(...)` becomes HTTP 500; there is no auto-translation). To override the response without rejecting, return a non-`Model` value from the hook, and the dispatcher treats that value as the response and skips the rest of the pipeline (see `services/_add_service.py:66-72` and `services/_edit_service.py:90-96`).
272
272
 
273
273
  Use hooks for normalization, cross-field validation, audit logging, cache invalidation: anything policy, not wire format (use Pydantic for that at the schema level).
274
274
 
@@ -551,7 +551,7 @@ The task runs later, possibly after the loop has advanced or the enclosing funct
551
551
 
552
552
  ### Sizing the `/download` stream
553
553
 
554
- `/download` exports every row matching the query, so it ignores `page` and `page_size` from the request; they reach the handler and are overwritten. It reads the rows in chunks, and `download_page_size` on the Api decides how large a chunk is (since the first release after v2.15.0). The default is an async method that counts the matching rows and takes a tenth of them, floored at the `API_DOWNLOAD_MIN_PAGE_SIZE` config key (default `100`).
554
+ `/download` exports every row matching the query, so it ignores `page` and `page_size` from the request; they reach the handler and are overwritten. It reads the rows in chunks, and the `download_page_size` attribute on the Api decides how large a chunk is (since the first release after v2.15.0). It is either an int (a fixed chunk) or a resolver `(api, session, params) -> int`. It defaults to the `API_DOWNLOAD_PAGE_SIZE` config key, which is itself the built-in resolver: it counts the matching rows and takes a tenth of them, floored at the `API_DOWNLOAD_MIN_PAGE_SIZE` config key (default `100`) and capped at `API_DOWNLOAD_MAX_PAGE_SIZE` (default `10000`) so a large table cannot size the chunk into an out-of-memory read.
555
555
 
556
556
  Set it to an int for a fixed chunk, which also skips the count query the default runs:
557
557
 
@@ -561,16 +561,18 @@ class ReadingApi(ModelRestApi):
561
561
  download_page_size = 5000
562
562
  ```
563
563
 
564
- Override the method when the size depends on the query. It receives the session and the `DBQueryParams` the export runs with. Sync and async both work, resolved through `safe_call`, so a sync one runs inline rather than on a worker thread:
564
+ Set it to a resolver when the size depends on the query. It receives the Api, the session, and the `DBQueryParams` the export runs with. Sync and async both work, resolved through `safe_call`, so a sync one runs inline rather than on a worker thread:
565
565
 
566
566
  ```python
567
567
  class ReadingApi(ModelRestApi):
568
568
  datamodel = SQLAInterface(Reading)
569
569
 
570
- def download_page_size(self, session, params):
570
+ def download_page_size(api, session, params):
571
571
  return 1000 if params.get("filters") else 250
572
572
  ```
573
573
 
574
+ Set the `API_DOWNLOAD_PAGE_SIZE` config key (an int or a `(api, session, params)` resolver) to change the default for every Api at once.
575
+
574
576
  The chunk size is a read size, not a limit: every matching row is exported whatever it is set to.
575
577
 
576
578
  ## 14. Permissions, roles, and auth
@@ -634,7 +636,7 @@ Reach for the builtin-role inspectors only when the answer must be synchronous a
634
636
  | Every role's grants, or the role names | `sm.get_role_and_api_permission_tuples_from_builtin_roles()`, `sm.get_roles_from_builtin_roles()` |
635
637
  | The resolved roles dict | `sm.builtin_roles` (a caching `lazy` over `Setting.ROLES`) |
636
638
 
637
- Two properties to plan around. A role absent from `ROLES` reads as no access from every one of them, the admin role and any runtime-created role included, which is exactly the gap `check_user_access` closes by falling through to the DB. And `builtin_roles` is a caching `lazy` (`security_manager/__init__.py:84`; `cache=True` is the default, `utils/lazy.py`), so a mutation of the config dict after first access is not picked up: an override file loaded at startup is fine, and a test that varies the roles patches the resolved `sm.builtin_roles` attribute instead.
639
+ Two properties to plan around. A role absent from `ROLES` reads as no access from every one of them, the admin role and any runtime-created role included, which is exactly the gap `check_user_access` closes by falling through to the DB. And `builtin_roles` is a caching `lazy` (`security_manager/security_manager.py:84`; `cache=True` is the default, `utils/lazy.py`), so a mutation of the config dict after first access is not picked up: an override file loaded at startup is fine, and a test that varies the roles patches the resolved `sm.builtin_roles` attribute instead.
638
640
 
639
641
  `current_permissions(api)` (`dependencies.py:68`) answers a wider question: every permission name the CURRENT user holds on one Api, intersected with that Api's `base_permissions`. It is a dependency factory, so calling it directly is `await current_permissions(self)()` inside `async with db.session():` (it reads `db.current_session`, which that context manager sets). Use it to hand a whole permission set to a template or a response; use `check_user_access` for a single yes/no on a user you already hold.
640
642
 
@@ -5,5 +5,18 @@ from .model_rest_api import *
5
5
  __all__ = [
6
6
  "BaseApi",
7
7
  "ModelRestApi",
8
+ "Params",
9
+ "P_ID",
10
+ "P_IDS",
11
+ "P_Q",
12
+ "P_SESSION",
13
+ "P_BODY",
14
+ "P_ITEM",
15
+ "P_ITEMS",
16
+ "PARAM_Q",
17
+ "PARAM_IDS_Q_SESSION_ITEMS",
18
+ "PARAM_ID_SESSION",
19
+ "PARAM_ID_SESSION_ITEM",
20
+ "PARAM_BODY_SESSION",
8
21
  "SQLAInterface", # Just for backward compatibility, not recommended to use directly
9
22
  ]
@@ -74,13 +74,13 @@ class BaseApi:
74
74
  Example:
75
75
  base_permissions = ["can_get", "can_post"]
76
76
  """
77
- permissions: list[str] = lazy(lambda self: [])
77
+ permissions: list[str] = lazy(list[str], with_target=False)
78
78
  """
79
79
  List of permissions for the API.
80
80
 
81
81
  DO NOT MODIFY UNLESS YOU KNOW WHAT YOU ARE DOING.
82
82
  """
83
- messages: list[str] = lazy(lambda self: [])
83
+ messages: list[str] = lazy(list[str], with_target=False)
84
84
  """
85
85
  List of messages to log when the API is added to the toolkit.
86
86
 
@@ -93,7 +93,17 @@ class BaseApi:
93
93
  collections.abc.Callable,
94
94
  dict[str, typing.Any],
95
95
  ]
96
- ] = lazy(lambda self: [])
96
+ ] = lazy(
97
+ list[
98
+ tuple[
99
+ collections.abc.Callable,
100
+ dict[str, typing.Any],
101
+ collections.abc.Callable,
102
+ dict[str, typing.Any],
103
+ ]
104
+ ],
105
+ with_target=False,
106
+ )
97
107
  """
98
108
  List of routes to register. Each item is a tuple of (router_func, router_parameters, route_function, metadata). When the API Router is integrated into the FastAPI app, these routes will be registered.
99
109
 
@@ -103,7 +113,7 @@ class BaseApi:
103
113
  """
104
114
  The FastAPIReactToolkit object. Automatically set when the API is added to the toolkit.
105
115
  """
106
- cache: dict[str, typing.Any] = lazy(lambda self: dict())
116
+ cache: dict[str, typing.Any] = lazy(dict[str, typing.Any], with_target=False)
107
117
  """
108
118
  The cache for the API.
109
119
 
@@ -0,0 +1,19 @@
1
+ from .model_rest_api import ModelRestApi
2
+ from .params import *
3
+
4
+ __all__ = [
5
+ "ModelRestApi",
6
+ "Params",
7
+ "P_ID",
8
+ "P_IDS",
9
+ "P_Q",
10
+ "P_SESSION",
11
+ "P_BODY",
12
+ "P_ITEM",
13
+ "P_ITEMS",
14
+ "PARAM_Q",
15
+ "PARAM_IDS_Q_SESSION_ITEMS",
16
+ "PARAM_ID_SESSION",
17
+ "PARAM_ID_SESSION_ITEM",
18
+ "PARAM_BODY_SESSION",
19
+ ]