fastapi-rtk 2.18.0__tar.gz → 2.18.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 (339) hide show
  1. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/PKG-INFO +1 -1
  2. fastapi_rtk-2.18.1/fastapi_rtk/_version.py +1 -0
  3. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/agent_docs/guide/backend.md +1 -1
  4. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/interface.py +8 -3
  5. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/const.py +1 -1
  6. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_interface.py +34 -10
  7. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_const.py +1 -1
  8. fastapi_rtk-2.18.0/fastapi_rtk/_version.py +0 -1
  9. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/.gitignore +0 -0
  10. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/LICENSE +0 -0
  11. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/README.md +0 -0
  12. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/__init__.py +0 -0
  13. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/agent_docs/adapters/agents-md/AGENTS.md +0 -0
  14. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/agent_docs/adapters/claude/skill.frontmatter +0 -0
  15. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/agent_docs/guide/frontend.md +0 -0
  16. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/agent_docs/guide/legacy.md +0 -0
  17. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/agent_docs/guide/overview.md +0 -0
  18. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/__init__.py +0 -0
  19. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/base_api.py +0 -0
  20. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/__init__.py +0 -0
  21. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/model_rest_api.py +0 -0
  22. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/params.py +0 -0
  23. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/__init__.py +0 -0
  24. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_add_service.py +0 -0
  25. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_bulk_service.py +0 -0
  26. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_delete_service.py +0 -0
  27. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_download_service.py +0 -0
  28. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_edit_service.py +0 -0
  29. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_file_service.py +0 -0
  30. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_info_service.py +0 -0
  31. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_list_service.py +0 -0
  32. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_schema_service.py +0 -0
  33. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/api/model_rest_api/services/_show_service.py +0 -0
  34. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/apis/__init__.py +0 -0
  35. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/apis/info.py +0 -0
  36. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/apis/license.py +0 -0
  37. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/__init__.py +0 -0
  38. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/auth.py +0 -0
  39. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/hashers/__init__.py +0 -0
  40. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/hashers/pbkdf2.py +0 -0
  41. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/hashers/scrypt.py +0 -0
  42. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/ldap.py +0 -0
  43. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/password_helpers/__init__.py +0 -0
  44. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/password_helpers/fab.py +0 -0
  45. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/strategies/__init__.py +0 -0
  46. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/strategies/config.py +0 -0
  47. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/strategies/db.py +0 -0
  48. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/auth/strategies/jwt.py +0 -0
  49. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/__init__.py +0 -0
  50. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/generic/__init__.py +0 -0
  51. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/generic/column.py +0 -0
  52. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/generic/db.py +0 -0
  53. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/generic/exceptions.py +0 -0
  54. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/generic/filters.py +0 -0
  55. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/generic/interface.py +0 -0
  56. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/generic/model.py +0 -0
  57. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/generic/session.py +0 -0
  58. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/__init__.py +0 -0
  59. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/column.py +0 -0
  60. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/db.py +0 -0
  61. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/exceptions.py +0 -0
  62. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/__init__.py +0 -0
  63. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/audit/__init__.py +0 -0
  64. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/audit/_decorators_service.py +0 -0
  65. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/audit/_lifecycle_service.py +0 -0
  66. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/audit/_logger.py +0 -0
  67. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/audit/_processing_service.py +0 -0
  68. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/audit/audit.py +0 -0
  69. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/audit/types.py +0 -0
  70. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/__init__.py +0 -0
  71. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/filters.py +0 -0
  72. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/geometry_converter.py +0 -0
  73. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/filters.py +0 -0
  74. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/model.py +0 -0
  75. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/backends/sqla/session.py +0 -0
  76. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/__init__.py +0 -0
  77. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/cache.py +0 -0
  78. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/db.py +0 -0
  79. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/file_manager.py +0 -0
  80. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/filter.py +0 -0
  81. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/interface.py +0 -0
  82. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/loop_manager.py +0 -0
  83. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/model.py +0 -0
  84. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/session.py +0 -0
  85. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/bases/user_cache.py +0 -0
  86. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/caches/__init__.py +0 -0
  87. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/caches/cache.py +0 -0
  88. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/caches/serializers.py +0 -0
  89. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/caches/storages.py +0 -0
  90. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/__init__.py +0 -0
  91. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/cli.py +0 -0
  92. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/__init__.py +0 -0
  93. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/_security_crypto.py +0 -0
  94. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/agent/__init__.py +0 -0
  95. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/agent/adapters/__init__.py +0 -0
  96. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/agent/adapters/agents_md.py +0 -0
  97. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/agent/adapters/claude.py +0 -0
  98. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/agent/base.py +0 -0
  99. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/agent/docs.py +0 -0
  100. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/__init__.py +0 -0
  101. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/templates/fastapi/README +0 -0
  102. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/templates/fastapi/alembic.ini.mako +0 -0
  103. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/templates/fastapi/env.py +0 -0
  104. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/templates/fastapi/script.py.mako +0 -0
  105. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/README +0 -0
  106. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/alembic.ini.mako +0 -0
  107. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/env.py +0 -0
  108. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/script.py.mako +0 -0
  109. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/export.py +0 -0
  110. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/security.py +0 -0
  111. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/commands/translate.py +0 -0
  112. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/const.py +0 -0
  113. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/decorators.py +0 -0
  114. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/types.py +0 -0
  115. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/cli/utils.py +0 -0
  116. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/config.py +0 -0
  117. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/db.py +0 -0
  118. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/decorators.py +0 -0
  119. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/dependencies.py +0 -0
  120. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/exceptions.py +0 -0
  121. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/fastapi_react_toolkit.py +0 -0
  122. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/file_managers/__init__.py +0 -0
  123. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/file_managers/file_manager.py +0 -0
  124. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/file_managers/image_manager.py +0 -0
  125. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/file_managers/s3_file_manager.py +0 -0
  126. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/file_managers/s3_image_manager.py +0 -0
  127. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/filters.py +0 -0
  128. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/globals.py +0 -0
  129. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/__init__.py +0 -0
  130. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/babel/__init__.py +0 -0
  131. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/babel/cli.py +0 -0
  132. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/babel/config.py +0 -0
  133. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/babel.cfg +0 -0
  134. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/lazy_text.py +0 -0
  135. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/messages.pot +0 -0
  136. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.mo +0 -0
  137. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.po +0 -0
  138. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.mo +0 -0
  139. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.po +0 -0
  140. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/loop_managers/__init__.py +0 -0
  141. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/loop_managers/loop_manager.py +0 -0
  142. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/manager.py +0 -0
  143. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/middlewares.py +0 -0
  144. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/mixins.py +0 -0
  145. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/models.py +0 -0
  146. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/py.typed +0 -0
  147. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/registry.py +0 -0
  148. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/routers.py +0 -0
  149. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/schemas.py +0 -0
  150. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/__init__.py +0 -0
  151. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/__init__.py +0 -0
  152. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/apis.py +0 -0
  153. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/models.py +0 -0
  154. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/__init__.py +0 -0
  155. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_builtin_role_service.py +0 -0
  156. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_entities.py +0 -0
  157. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_exception_filters.py +0 -0
  158. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_export.py +0 -0
  159. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_import.py +0 -0
  160. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_permission_service.py +0 -0
  161. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_results.py +0 -0
  162. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_role_service.py +0 -0
  163. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/_user_service.py +0 -0
  164. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/security_manager/security_manager.py +0 -0
  165. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/security/sqla/user_cache.py +0 -0
  166. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/setting.py +0 -0
  167. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/types.py +0 -0
  168. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/__init__.py +0 -0
  169. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/async_task_runner.py +0 -0
  170. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/class_factory.py +0 -0
  171. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/csv_json_converter.py +0 -0
  172. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/deep_merge.py +0 -0
  173. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/extender_mixin.py +0 -0
  174. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/flask_appbuilder_utils.py +0 -0
  175. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/formatter.py +0 -0
  176. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/hooks.py +0 -0
  177. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/lazy.py +0 -0
  178. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/merge_schema.py +0 -0
  179. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/multiple_async_contexts.py +0 -0
  180. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/pydantic.py +0 -0
  181. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/run_utils.py +0 -0
  182. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/self_dependencies.py +0 -0
  183. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/smartdefaultdict.py +0 -0
  184. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/sqla.py +0 -0
  185. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/timezone.py +0 -0
  186. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/update_signature.py +0 -0
  187. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/utils/use_default_when_none.py +0 -0
  188. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/fastapi_rtk/version.py +0 -0
  189. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/pyproject.toml +0 -0
  190. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/conftest.py +0 -0
  191. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/docker-compose.gis.yml +0 -0
  192. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/__init__.py +0 -0
  193. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/api/__init__.py +0 -0
  194. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/api/test_add_edit_relation_response.py +0 -0
  195. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/api/test_model_rest_api.py +0 -0
  196. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/apis/__init__.py +0 -0
  197. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/apis/test_info_callable_schema.py +0 -0
  198. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/apis/test_info_contract.py +0 -0
  199. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/auth/__init__.py +0 -0
  200. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/auth/test_auth_flow.py +0 -0
  201. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/auth/test_oauth.py +0 -0
  202. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/conftest.py +0 -0
  203. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/file_managers/__init__.py +0 -0
  204. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/file_managers/test_file_routes.py +0 -0
  205. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/security/__init__.py +0 -0
  206. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/security/sqla/__init__.py +0 -0
  207. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/security/sqla/conftest.py +0 -0
  208. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/security/sqla/test_permission_service.py +0 -0
  209. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/security/sqla/test_role_service.py +0 -0
  210. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/security/sqla/test_security_manager.py +0 -0
  211. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/security/sqla/test_user_service.py +0 -0
  212. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/integration/test_app_smoke.py +0 -0
  213. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/__init__.py +0 -0
  214. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/api/__init__.py +0 -0
  215. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/api/conftest.py +0 -0
  216. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/api/model_rest_api/__init__.py +0 -0
  217. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/api/model_rest_api/test_columns.py +0 -0
  218. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/api/model_rest_api/test_file_mixin.py +0 -0
  219. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/api/model_rest_api/test_init.py +0 -0
  220. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/api/model_rest_api/test_service_delegators.py +0 -0
  221. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/api/test_base_api.py +0 -0
  222. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/apis/__init__.py +0 -0
  223. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/apis/test_info.py +0 -0
  224. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/apis/test_license.py +0 -0
  225. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/__init__.py +0 -0
  226. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/hashers/__init__.py +0 -0
  227. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/hashers/test_pbkdf2.py +0 -0
  228. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/hashers/test_scrypt.py +0 -0
  229. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/password_helpers/__init__.py +0 -0
  230. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/password_helpers/test_fab.py +0 -0
  231. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/strategies/__init__.py +0 -0
  232. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/strategies/test_config.py +0 -0
  233. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/strategies/test_db.py +0 -0
  234. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/strategies/test_jwt.py +0 -0
  235. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/auth/test_auth.py +0 -0
  236. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/__init__.py +0 -0
  237. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/generic/__init__.py +0 -0
  238. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/generic/test_column.py +0 -0
  239. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/generic/test_db.py +0 -0
  240. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/generic/test_exceptions.py +0 -0
  241. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/generic/test_filters.py +0 -0
  242. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/generic/test_interface.py +0 -0
  243. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/generic/test_model.py +0 -0
  244. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/generic/test_session.py +0 -0
  245. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/__init__.py +0 -0
  246. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/conftest.py +0 -0
  247. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_audit.py +0 -0
  248. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_audit_service_delegators.py +0 -0
  249. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_audit_types.py +0 -0
  250. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_column.py +0 -0
  251. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_db.py +0 -0
  252. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_filters.py +0 -0
  253. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_geoalchemy2.py +0 -0
  254. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_model.py +0 -0
  255. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/backends/sqla/test_session.py +0 -0
  256. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/bases/__init__.py +0 -0
  257. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/bases/test_db.py +0 -0
  258. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/bases/test_file_manager.py +0 -0
  259. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/bases/test_filter.py +0 -0
  260. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/bases/test_interface.py +0 -0
  261. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/bases/test_model.py +0 -0
  262. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/bases/test_session.py +0 -0
  263. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/__init__.py +0 -0
  264. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/commands/__init__.py +0 -0
  265. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/commands/conftest.py +0 -0
  266. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/commands/test_db.py +0 -0
  267. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/commands/test_export.py +0 -0
  268. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/commands/test_security.py +0 -0
  269. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/commands/test_security_crypto.py +0 -0
  270. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/commands/test_translate.py +0 -0
  271. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/conftest.py +0 -0
  272. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/test_cli.py +0 -0
  273. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/test_decorators.py +0 -0
  274. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/test_types.py +0 -0
  275. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/cli/test_utils.py +0 -0
  276. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/file_managers/__init__.py +0 -0
  277. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/file_managers/conftest.py +0 -0
  278. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/file_managers/test_file_manager.py +0 -0
  279. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/file_managers/test_image_manager.py +0 -0
  280. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/file_managers/test_s3_file_manager.py +0 -0
  281. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/file_managers/test_s3_image_manager.py +0 -0
  282. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/lang/__init__.py +0 -0
  283. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/lang/test_babel_cli.py +0 -0
  284. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/lang/test_babel_config.py +0 -0
  285. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/lang/test_lazy_text.py +0 -0
  286. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/__init__.py +0 -0
  287. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/__init__.py +0 -0
  288. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/conftest.py +0 -0
  289. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/security_manager/__init__.py +0 -0
  290. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/security_manager/test_builtin_role_service.py +0 -0
  291. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/security_manager/test_entities.py +0 -0
  292. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/security_manager/test_permission_service.py +0 -0
  293. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/security_manager/test_results.py +0 -0
  294. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/security_manager/test_role_service.py +0 -0
  295. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/security_manager/test_user_service.py +0 -0
  296. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/test_apis.py +0 -0
  297. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/test_models.py +0 -0
  298. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/security/sqla/test_security_manager.py +0 -0
  299. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_caches.py +0 -0
  300. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_config.py +0 -0
  301. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_db.py +0 -0
  302. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_decorators.py +0 -0
  303. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_dependencies.py +0 -0
  304. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_exceptions.py +0 -0
  305. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_fastapi_react_toolkit.py +0 -0
  306. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_filters.py +0 -0
  307. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_globals.py +0 -0
  308. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_manager.py +0 -0
  309. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_middlewares.py +0 -0
  310. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_mixins.py +0 -0
  311. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_models.py +0 -0
  312. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_registry.py +0 -0
  313. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_routers.py +0 -0
  314. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_schemas.py +0 -0
  315. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_setting.py +0 -0
  316. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_types.py +0 -0
  317. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_user_cache.py +0 -0
  318. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/test_version.py +0 -0
  319. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/__init__.py +0 -0
  320. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_async_task_runner.py +0 -0
  321. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_class_factory.py +0 -0
  322. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_csv_json_converter.py +0 -0
  323. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_deep_merge.py +0 -0
  324. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_extender_mixin.py +0 -0
  325. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_flask_appbuilder_utils.py +0 -0
  326. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_formatter.py +0 -0
  327. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_hooks.py +0 -0
  328. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_lazy.py +0 -0
  329. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_merge_schema.py +0 -0
  330. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_multiple_async_contexts.py +0 -0
  331. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_pydantic.py +0 -0
  332. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_run_utils.py +0 -0
  333. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_self_dependencies.py +0 -0
  334. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_smartdefaultdict.py +0 -0
  335. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_sqla.py +0 -0
  336. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_timezone.py +0 -0
  337. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_update_signature.py +0 -0
  338. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/tests/unit/utils/test_use_default_when_none.py +0 -0
  339. {fastapi_rtk-2.18.0 → fastapi_rtk-2.18.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: fastapi-rtk
3
- Version: 2.18.0
3
+ Version: 2.18.1
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.18.1"
@@ -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 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.
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 `1000`) 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
 
@@ -157,9 +157,14 @@ class SQLAInterface(
157
157
  if not chunk:
158
158
  break
159
159
  yield chunk
160
- # Drop the consumed chunk from the identity map so a large export
161
- # does not retain every fetched row and exhaust memory.
162
- await smart_run(session.expunge_all)
160
+
161
+ # Expunge consumed rows one by one; expunge_all() swaps the identity
162
+ # map the streaming result still holds, killing mid-stream fetches.
163
+ def expunge_chunk() -> None:
164
+ for item in chunk:
165
+ session.expunge(item)
166
+
167
+ await smart_run(expunge_chunk)
163
168
  await safe_call(self.close(session))
164
169
 
165
170
  async def add(self, session, item, *, flush=True, commit=True, refresh=True):
@@ -73,7 +73,7 @@ DEFAULT_PUBLIC_ROLE = "Public"
73
73
  DEFAULT_API_PAGE_SIZE = 25
74
74
  DEFAULT_API_MAX_PAGE_SIZE = 25
75
75
  DEFAULT_API_DOWNLOAD_MIN_PAGE_SIZE = 100
76
- DEFAULT_API_DOWNLOAD_MAX_PAGE_SIZE = 10000
76
+ DEFAULT_API_DOWNLOAD_MAX_PAGE_SIZE = 1000
77
77
  DEFAULT_TOKEN_URL = "/api/v1/auth/jwt/login"
78
78
  DEFAULT_SECRET = "SUPERSECRET"
79
79
  DEFAULT_COOKIE_NAME = "dataTactics"
@@ -4,6 +4,7 @@ import enum
4
4
 
5
5
  import pytest
6
6
  import sqlalchemy
7
+ import sqlalchemy.ext.asyncio
7
8
  import sqlalchemy.orm
8
9
 
9
10
  from fastapi_rtk import (
@@ -35,6 +36,12 @@ class _RichModel(Model):
35
36
  score: Mapped[float | None] = mapped_column(sqlalchemy.Float)
36
37
 
37
38
 
39
+ class _StreamRow(Model):
40
+ __tablename__ = "tier8_stream"
41
+ id: Mapped[int] = mapped_column(primary_key=True)
42
+ name: Mapped[str | None] = mapped_column(sqlalchemy.String(50))
43
+
44
+
38
45
  @pytest.fixture
39
46
  def rich_iface():
40
47
  return SQLAInterface(_RichModel)
@@ -372,20 +379,37 @@ class TestCRUD:
372
379
  total = sum(len(c) for c in chunks)
373
380
  assert total == 3
374
381
 
375
- async def test_yield_per_expunges_each_chunk(self, session, iface, monkeypatch):
376
- expunge_calls = 0
377
- original = session.expunge_all
382
+ async def test_yield_per_expunges_consumed_rows(self, session, iface, monkeypatch):
383
+ expunged = []
384
+ original = session.expunge
378
385
 
379
- def expunge_all():
380
- nonlocal expunge_calls
381
- expunge_calls += 1
382
- original()
386
+ def expunge(item):
387
+ expunged.append(item)
388
+ original(item)
383
389
 
384
- monkeypatch.setattr(session, "expunge_all", expunge_all)
390
+ monkeypatch.setattr(session, "expunge", expunge)
385
391
  async for _chunk in iface.yield_per(session, {"page_size": 2}):
386
392
  pass
387
- assert expunge_calls >= 1
388
- assert len(session.identity_map) == 0
393
+ assert len(expunged) == 3
394
+
395
+ async def test_yield_per_async_survives_chunk_boundary(self):
396
+ engine = sqlalchemy.ext.asyncio.create_async_engine("sqlite+aiosqlite://")
397
+ try:
398
+ async with engine.begin() as conn:
399
+ await conn.run_sync(_StreamRow.__table__.create)
400
+ interface = SQLAInterface(_StreamRow)
401
+ async with sqlalchemy.ext.asyncio.AsyncSession(engine) as write_session:
402
+ write_session.add_all(
403
+ [_StreamRow(id=i, name=f"n{i}") for i in range(1, 7)]
404
+ )
405
+ await write_session.commit()
406
+ async with sqlalchemy.ext.asyncio.AsyncSession(engine) as read_session:
407
+ total = 0
408
+ async for chunk in interface.yield_per(read_session, {"page_size": 2}):
409
+ total += len(chunk)
410
+ assert total == 6
411
+ finally:
412
+ await engine.dispose()
389
413
 
390
414
  async def test_add(self, session, iface, Person_cls):
391
415
  new = Person_cls(id=99, name="Dave", age=50, country_id=1)
@@ -59,7 +59,7 @@ class TestDefaults:
59
59
  assert const.DEFAULT_API_PAGE_SIZE == 25
60
60
  assert const.DEFAULT_API_MAX_PAGE_SIZE == 25
61
61
  assert const.DEFAULT_API_DOWNLOAD_MIN_PAGE_SIZE == 100
62
- assert const.DEFAULT_API_DOWNLOAD_MAX_PAGE_SIZE == 10000
62
+ assert const.DEFAULT_API_DOWNLOAD_MAX_PAGE_SIZE == 1000
63
63
 
64
64
  def test_default_token_url(self):
65
65
  assert const.DEFAULT_TOKEN_URL.startswith("/")
@@ -1 +0,0 @@
1
- __version__ = "2.18.0"
File without changes
File without changes
File without changes