fastapi-rtk 2.0.1__tar.gz → 2.0.2__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 (262) hide show
  1. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/PKG-INFO +1 -1
  2. fastapi_rtk-2.0.2/fastapi_rtk/_version.py +1 -0
  3. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/export.py +16 -27
  4. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/cli/test_commands.py +121 -0
  5. fastapi_rtk-2.0.1/fastapi_rtk/_version.py +0 -1
  6. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/.gitignore +0 -0
  7. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/LICENSE +0 -0
  8. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/README.md +0 -0
  9. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/__init__.py +0 -0
  10. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/api/__init__.py +0 -0
  11. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/api/base_api.py +0 -0
  12. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/api/model_rest_api.py +0 -0
  13. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/apis/__init__.py +0 -0
  14. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/apis/info.py +0 -0
  15. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/apis/license.py +0 -0
  16. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/__init__.py +0 -0
  17. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/auth.py +0 -0
  18. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/hashers/__init__.py +0 -0
  19. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/hashers/pbkdf2.py +0 -0
  20. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/hashers/scrypt.py +0 -0
  21. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/password_helpers/__init__.py +0 -0
  22. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/password_helpers/fab.py +0 -0
  23. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/strategies/__init__.py +0 -0
  24. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/strategies/config.py +0 -0
  25. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/strategies/db.py +0 -0
  26. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/auth/strategies/jwt.py +0 -0
  27. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/__init__.py +0 -0
  28. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/generic/__init__.py +0 -0
  29. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/generic/column.py +0 -0
  30. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/generic/db.py +0 -0
  31. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/generic/exceptions.py +0 -0
  32. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/generic/filters.py +0 -0
  33. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/generic/interface.py +0 -0
  34. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/generic/model.py +0 -0
  35. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/generic/session.py +0 -0
  36. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/__init__.py +0 -0
  37. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/column.py +0 -0
  38. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/db.py +0 -0
  39. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/exceptions.py +0 -0
  40. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/extensions/__init__.py +0 -0
  41. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/extensions/audit/__init__.py +0 -0
  42. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/extensions/audit/audit.py +0 -0
  43. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/extensions/audit/types.py +0 -0
  44. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/__init__.py +0 -0
  45. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/filters.py +0 -0
  46. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/geometry_converter.py +0 -0
  47. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/filters.py +0 -0
  48. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/interface.py +0 -0
  49. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/model.py +0 -0
  50. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/backends/sqla/session.py +0 -0
  51. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/bases/__init__.py +0 -0
  52. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/bases/db.py +0 -0
  53. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/bases/file_manager.py +0 -0
  54. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/bases/filter.py +0 -0
  55. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/bases/interface.py +0 -0
  56. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/bases/model.py +0 -0
  57. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/bases/session.py +0 -0
  58. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/__init__.py +0 -0
  59. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/cli.py +0 -0
  60. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/__init__.py +0 -0
  61. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/__init__.py +0 -0
  62. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/templates/fastapi/README +0 -0
  63. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/templates/fastapi/alembic.ini.mako +0 -0
  64. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/templates/fastapi/env.py +0 -0
  65. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/templates/fastapi/script.py.mako +0 -0
  66. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/README +0 -0
  67. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/alembic.ini.mako +0 -0
  68. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/env.py +0 -0
  69. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/script.py.mako +0 -0
  70. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/security.py +0 -0
  71. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/commands/translate.py +0 -0
  72. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/const.py +0 -0
  73. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/decorators.py +0 -0
  74. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/types.py +0 -0
  75. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/cli/utils.py +0 -0
  76. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/config.py +0 -0
  77. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/const.py +0 -0
  78. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/db.py +0 -0
  79. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/decorators.py +0 -0
  80. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/dependencies.py +0 -0
  81. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/exceptions.py +0 -0
  82. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/fastapi_react_toolkit.py +0 -0
  83. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/file_managers/__init__.py +0 -0
  84. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/file_managers/file_manager.py +0 -0
  85. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/file_managers/image_manager.py +0 -0
  86. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/file_managers/s3_file_manager.py +0 -0
  87. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/file_managers/s3_image_manager.py +0 -0
  88. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/filters.py +0 -0
  89. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/globals.py +0 -0
  90. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/__init__.py +0 -0
  91. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/babel/__init__.py +0 -0
  92. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/babel/cli.py +0 -0
  93. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/babel/config.py +0 -0
  94. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/babel.cfg +0 -0
  95. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/lazy_text.py +0 -0
  96. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/messages.pot +0 -0
  97. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.mo +0 -0
  98. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.po +0 -0
  99. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.mo +0 -0
  100. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.po +0 -0
  101. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/manager.py +0 -0
  102. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/middlewares.py +0 -0
  103. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/mixins.py +0 -0
  104. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/models.py +0 -0
  105. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/py.typed +0 -0
  106. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/registry.py +0 -0
  107. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/routers.py +0 -0
  108. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/schemas.py +0 -0
  109. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/security/__init__.py +0 -0
  110. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/security/sqla/__init__.py +0 -0
  111. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/security/sqla/apis.py +0 -0
  112. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/security/sqla/models.py +0 -0
  113. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/security/sqla/security_manager.py +0 -0
  114. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/setting.py +0 -0
  115. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/types.py +0 -0
  116. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/__init__.py +0 -0
  117. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/async_task_runner.py +0 -0
  118. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/class_factory.py +0 -0
  119. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/csv_json_converter.py +0 -0
  120. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/deep_merge.py +0 -0
  121. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/extender_mixin.py +0 -0
  122. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/flask_appbuilder_utils.py +0 -0
  123. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/formatter.py +0 -0
  124. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/hooks.py +0 -0
  125. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/lazy.py +0 -0
  126. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/merge_schema.py +0 -0
  127. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/multiple_async_contexts.py +0 -0
  128. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/pydantic.py +0 -0
  129. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/run_utils.py +0 -0
  130. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/self_dependencies.py +0 -0
  131. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/smartdefaultdict.py +0 -0
  132. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/sqla.py +0 -0
  133. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/timezone.py +0 -0
  134. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/update_signature.py +0 -0
  135. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/utils/use_default_when_none.py +0 -0
  136. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/fastapi_rtk/version.py +0 -0
  137. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/pyproject.toml +0 -0
  138. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/conftest.py +0 -0
  139. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/docker-compose.gis.yml +0 -0
  140. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/__init__.py +0 -0
  141. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/api/__init__.py +0 -0
  142. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/api/test_model_rest_api.py +0 -0
  143. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/apis/__init__.py +0 -0
  144. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/apis/test_info_contract.py +0 -0
  145. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/auth/__init__.py +0 -0
  146. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/auth/test_auth_flow.py +0 -0
  147. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/auth/test_oauth.py +0 -0
  148. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/conftest.py +0 -0
  149. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/file_managers/__init__.py +0 -0
  150. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/file_managers/test_file_routes.py +0 -0
  151. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/security/__init__.py +0 -0
  152. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/security/sqla/__init__.py +0 -0
  153. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/security/sqla/test_security_manager.py +0 -0
  154. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/integration/test_app_smoke.py +0 -0
  155. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/__init__.py +0 -0
  156. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/api/__init__.py +0 -0
  157. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/api/conftest.py +0 -0
  158. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/api/test_base_api.py +0 -0
  159. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/api/test_model_rest_api.py +0 -0
  160. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/apis/__init__.py +0 -0
  161. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/apis/test_info.py +0 -0
  162. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/apis/test_license.py +0 -0
  163. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/__init__.py +0 -0
  164. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/hashers/__init__.py +0 -0
  165. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/hashers/test_pbkdf2.py +0 -0
  166. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/hashers/test_scrypt.py +0 -0
  167. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/password_helpers/__init__.py +0 -0
  168. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/password_helpers/test_fab.py +0 -0
  169. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/strategies/__init__.py +0 -0
  170. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/strategies/test_config.py +0 -0
  171. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/strategies/test_db.py +0 -0
  172. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/strategies/test_jwt.py +0 -0
  173. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/auth/test_auth.py +0 -0
  174. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/__init__.py +0 -0
  175. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/generic/__init__.py +0 -0
  176. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/generic/test_column.py +0 -0
  177. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/generic/test_db.py +0 -0
  178. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/generic/test_exceptions.py +0 -0
  179. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/generic/test_filters.py +0 -0
  180. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/generic/test_interface.py +0 -0
  181. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/generic/test_model.py +0 -0
  182. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/generic/test_session.py +0 -0
  183. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/__init__.py +0 -0
  184. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/conftest.py +0 -0
  185. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_audit.py +0 -0
  186. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_audit_types.py +0 -0
  187. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_column.py +0 -0
  188. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_db.py +0 -0
  189. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_filters.py +0 -0
  190. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_geoalchemy2.py +0 -0
  191. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_interface.py +0 -0
  192. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_model.py +0 -0
  193. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/backends/sqla/test_session.py +0 -0
  194. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/bases/__init__.py +0 -0
  195. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/bases/test_db.py +0 -0
  196. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/bases/test_file_manager.py +0 -0
  197. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/bases/test_filter.py +0 -0
  198. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/bases/test_interface.py +0 -0
  199. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/bases/test_model.py +0 -0
  200. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/bases/test_session.py +0 -0
  201. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/cli/__init__.py +0 -0
  202. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/cli/conftest.py +0 -0
  203. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/cli/test_cli.py +0 -0
  204. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/cli/test_decorators.py +0 -0
  205. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/cli/test_types.py +0 -0
  206. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/cli/test_utils.py +0 -0
  207. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/file_managers/__init__.py +0 -0
  208. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/file_managers/conftest.py +0 -0
  209. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/file_managers/test_file_manager.py +0 -0
  210. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/file_managers/test_image_manager.py +0 -0
  211. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/file_managers/test_s3_file_manager.py +0 -0
  212. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/file_managers/test_s3_image_manager.py +0 -0
  213. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/lang/__init__.py +0 -0
  214. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/lang/test_babel_cli.py +0 -0
  215. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/lang/test_babel_config.py +0 -0
  216. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/lang/test_lazy_text.py +0 -0
  217. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/security/__init__.py +0 -0
  218. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/security/sqla/__init__.py +0 -0
  219. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/security/sqla/conftest.py +0 -0
  220. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/security/sqla/test_apis.py +0 -0
  221. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/security/sqla/test_models.py +0 -0
  222. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/security/sqla/test_security_manager.py +0 -0
  223. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_config.py +0 -0
  224. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_const.py +0 -0
  225. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_db.py +0 -0
  226. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_decorators.py +0 -0
  227. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_dependencies.py +0 -0
  228. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_exceptions.py +0 -0
  229. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_fastapi_react_toolkit.py +0 -0
  230. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_filters.py +0 -0
  231. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_globals.py +0 -0
  232. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_manager.py +0 -0
  233. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_middlewares.py +0 -0
  234. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_mixins.py +0 -0
  235. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_models.py +0 -0
  236. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_registry.py +0 -0
  237. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_routers.py +0 -0
  238. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_schemas.py +0 -0
  239. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_setting.py +0 -0
  240. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_types.py +0 -0
  241. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/test_version.py +0 -0
  242. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/__init__.py +0 -0
  243. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_async_task_runner.py +0 -0
  244. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_class_factory.py +0 -0
  245. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_csv_json_converter.py +0 -0
  246. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_deep_merge.py +0 -0
  247. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_extender_mixin.py +0 -0
  248. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_flask_appbuilder_utils.py +0 -0
  249. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_formatter.py +0 -0
  250. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_hooks.py +0 -0
  251. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_lazy.py +0 -0
  252. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_merge_schema.py +0 -0
  253. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_multiple_async_contexts.py +0 -0
  254. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_pydantic.py +0 -0
  255. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_run_utils.py +0 -0
  256. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_self_dependencies.py +0 -0
  257. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_smartdefaultdict.py +0 -0
  258. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_sqla.py +0 -0
  259. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_timezone.py +0 -0
  260. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_update_signature.py +0 -0
  261. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/tests/unit/utils/test_use_default_when_none.py +0 -0
  262. {fastapi_rtk-2.0.1 → fastapi_rtk-2.0.2}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-rtk
3
- Version: 2.0.1
3
+ Version: 2.0.2
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.0.2"
@@ -163,7 +163,9 @@ def api_docs(
163
163
  )
164
164
 
165
165
  # Load all schema into the docs
166
- for key, schema in openapi_docs["components"]["schemas"].items():
166
+ for key, schema in (
167
+ openapi_docs.get("components", {}).get("schemas", {}).items()
168
+ ):
167
169
  parsed_schema = parser.parse_schema(schema)
168
170
  parsed_schema[0] = parsed_schema[0].replace(key, f"Schemas-{key}")
169
171
  api_data_docs["Schemas"][key] = "".join(parsed_schema)
@@ -171,14 +173,15 @@ def api_docs(
171
173
 
172
174
  for path, data in openapi_docs["paths"].items():
173
175
  for method, method_data in data.items():
174
- for tag in method_data["tags"]:
176
+ for tag in method_data.get("tags", []):
175
177
  if tag not in api_data_docs["APIs"]:
176
178
  continue
177
179
 
178
180
  api_path_docs = APIPathDocs(
179
181
  path=path,
180
182
  method=method.upper(),
181
- description=method_data.get("summary", ""),
183
+ description=method_data.get("description")
184
+ or method_data.get("summary", ""),
182
185
  )
183
186
 
184
187
  # Add responses to the API data docs
@@ -219,29 +222,15 @@ def api_docs(
219
222
  Responses=responses,
220
223
  )
221
224
 
222
- # Add metadata to the API data docs
223
- api_data_docs["APIs"][tag]["Metadata"][path] = api_metadata_docs
225
+ # Add metadata to the API data docs, keyed by method + path so
226
+ # endpoints sharing a path (e.g. GET/PUT/DELETE on the same URL)
227
+ # do not overwrite each other.
228
+ api_data_docs["APIs"][tag]["Metadata"][
229
+ f"{method.upper()} {path}"
230
+ ] = api_metadata_docs
224
231
 
225
232
  api_data_docs["APIs"][tag]["Paths"].append(api_path_docs)
226
233
 
227
- # Add schema
228
- schemas_to_add = []
229
- for resp in responses:
230
- if resp["content"]:
231
- schemas_to_add.append(resp["content"])
232
-
233
- if body:
234
- schemas_to_add.append(body)
235
-
236
- for schema in schemas_to_add:
237
- key = schema.split("]")[0].replace("[", "")
238
- schema = openapi_docs["components"]["schemas"].get(key)
239
- if schema:
240
- parsed_schema = parser.parse_schema(schema)
241
- parsed_schema[0] = parsed_schema[0].replace(
242
- key, f"Schemas-{key}"
243
- )
244
-
245
234
  with open(filename, "w") as f:
246
235
  f.write(
247
236
  json_to_markdown(
@@ -492,14 +481,14 @@ def _generate_fastapi_rtk_tables_docs():
492
481
  # Permission API docs
493
482
  table_documentation[PERMISSION_API_TABLE]["description"] = (
494
483
  table_documentation[PERMISSION_API_TABLE]["description"]
495
- or "Stores which permissions are associated with which API."
484
+ or "Stores which permissions are associated with which APIs."
496
485
  )
497
486
  table_documentation[PERMISSION_API_TABLE]["columns"] = table_documentation[
498
487
  PERMISSION_API_TABLE
499
488
  ]["columns"] or {
500
489
  "id": "Primary key.",
501
- "view_menu_id": f"FK to `{PERMISSION_TABLE}.id`.",
502
- "api_id": f"FK to `{API_TABLE}.id`.",
490
+ "view_menu_id": f"FK to `{API_TABLE}.id`.",
491
+ "permission_id": f"FK to `{PERMISSION_TABLE}.id`.",
503
492
  }
504
493
 
505
494
  # Assoc Permission API Role docs
@@ -555,7 +544,7 @@ def _generate_fastapi_rtk_tables_docs():
555
544
  table_documentation[ACCESSTOKEN_TABLE]["columns"] = table_documentation[
556
545
  ACCESSTOKEN_TABLE
557
546
  ]["columns"] or {
558
- "token": "Access token string.",
547
+ "token": "Primary key. Access token string.",
559
548
  "created_at": "Timestamp when the token was created.",
560
549
  "user_id": f"FK to `{USER_TABLE}.id`. Identifies the user.",
561
550
  }
@@ -1053,6 +1053,127 @@ class TestApiDocsCommand:
1053
1053
  assert "WidgetIn" in body
1054
1054
 
1055
1055
 
1056
+ def test_api_docs_handles_route_without_tags(
1057
+ self, tmp_path, monkeypatch, global_setter
1058
+ ):
1059
+ """
1060
+ Regression: a route registered without ``tags=`` (e.g. a top-level
1061
+ health probe attached directly to FastAPI) used to raise
1062
+ ``KeyError: 'tags'`` while iterating ``method_data["tags"]``. The
1063
+ path walk must now treat ``tags`` as optional.
1064
+ """
1065
+ from unittest.mock import MagicMock
1066
+
1067
+ from fastapi import FastAPI
1068
+
1069
+ from fastapi_rtk.cli.commands import export as ex_mod
1070
+
1071
+ fastapi_app = FastAPI()
1072
+
1073
+ @fastapi_app.get("/healthz")
1074
+ def healthz():
1075
+ return {"ok": True}
1076
+
1077
+ app_obj = MagicMock()
1078
+ app_obj.app = fastapi_app
1079
+ app_obj.apis = []
1080
+ global_setter("current_app", app_obj)
1081
+
1082
+ target = tmp_path / "untagged.md"
1083
+ ex_mod.api_docs(filename=str(target))
1084
+ assert target.exists()
1085
+
1086
+ def test_api_docs_metadata_distinguishes_methods_on_same_path(
1087
+ self, tmp_path, monkeypatch, global_setter
1088
+ ):
1089
+ """
1090
+ Regression: metadata used to be keyed by path alone, so GET and
1091
+ DELETE on the same URL clobbered each other. The metadata key must
1092
+ now include the method.
1093
+ """
1094
+ from unittest.mock import MagicMock
1095
+
1096
+ from fastapi import FastAPI
1097
+
1098
+ from fastapi_rtk.api.model_rest_api import ModelRestApi
1099
+ from fastapi_rtk.cli.commands import export as ex_mod
1100
+
1101
+ fastapi_app = FastAPI()
1102
+
1103
+ @fastapi_app.get("/widgets/{id}", tags=["WidgetApi"], summary="Get widget")
1104
+ def get_widget(id: int):
1105
+ return {"id": id}
1106
+
1107
+ @fastapi_app.delete(
1108
+ "/widgets/{id}", tags=["WidgetApi"], summary="Delete widget"
1109
+ )
1110
+ def delete_widget(id: int):
1111
+ return {"id": id}
1112
+
1113
+ class WidgetApi(ModelRestApi):
1114
+ pass
1115
+
1116
+ widget = MagicMock(spec=WidgetApi)
1117
+ widget.__class__ = WidgetApi
1118
+ widget.description = ""
1119
+ widget.integrate_router = MagicMock()
1120
+
1121
+ app_obj = MagicMock()
1122
+ app_obj.app = fastapi_app
1123
+ app_obj.apis = [widget]
1124
+ global_setter("current_app", app_obj)
1125
+
1126
+ target = tmp_path / "two-methods.md"
1127
+ ex_mod.api_docs(apis="WidgetApi", filename=str(target))
1128
+ body = target.read_text()
1129
+ assert "GET /widgets/{id}" in body
1130
+ assert "DELETE /widgets/{id}" in body
1131
+
1132
+ def test_api_docs_prefers_route_description_over_summary(
1133
+ self, tmp_path, monkeypatch, global_setter
1134
+ ):
1135
+ """
1136
+ ``description`` (operation docstring) must win over ``summary``
1137
+ (humanized function name) when both are present on an OpenAPI
1138
+ operation.
1139
+ """
1140
+ from unittest.mock import MagicMock
1141
+
1142
+ from fastapi import FastAPI
1143
+
1144
+ from fastapi_rtk.api.model_rest_api import ModelRestApi
1145
+ from fastapi_rtk.cli.commands import export as ex_mod
1146
+
1147
+ fastapi_app = FastAPI()
1148
+
1149
+ @fastapi_app.get(
1150
+ "/widgets/",
1151
+ tags=["WidgetApi"],
1152
+ summary="Short summary",
1153
+ description="Detailed widget description goes here.",
1154
+ )
1155
+ def list_widgets():
1156
+ return []
1157
+
1158
+ class WidgetApi(ModelRestApi):
1159
+ pass
1160
+
1161
+ widget = MagicMock(spec=WidgetApi)
1162
+ widget.__class__ = WidgetApi
1163
+ widget.description = ""
1164
+ widget.integrate_router = MagicMock()
1165
+
1166
+ app_obj = MagicMock()
1167
+ app_obj.app = fastapi_app
1168
+ app_obj.apis = [widget]
1169
+ global_setter("current_app", app_obj)
1170
+
1171
+ target = tmp_path / "description-fallback.md"
1172
+ ex_mod.api_docs(apis="WidgetApi", filename=str(target))
1173
+ body = target.read_text()
1174
+ assert "Detailed widget description goes here." in body
1175
+
1176
+
1056
1177
  class TestApiDocsCommandFilteredWalk:
1057
1178
  """Hit the body of api_docs (lines 154-241): integrate_router + paths walk."""
1058
1179
 
@@ -1 +0,0 @@
1
- __version__ = "2.0.1"
File without changes
File without changes
File without changes
File without changes