tigrbl 0.3.3.dev2__tar.gz → 0.3.4.dev1__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 (268) hide show
  1. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/PKG-INFO +1 -1
  2. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/pyproject.toml +1 -1
  3. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/deps/__init__.py +2 -2
  4. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/deps/fastapi.py +0 -4
  5. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/executor/types.py +5 -11
  6. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/transport/__init__.py +2 -1
  7. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/transport/jsonrpc/__init__.py +5 -1
  8. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/transport/jsonrpc/dispatcher.py +14 -0
  9. tigrbl-0.3.4.dev1/tigrbl/transport/jsonrpc/openrpc.py +116 -0
  10. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/__init__.py +1 -2
  11. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/authn_abc.py +2 -1
  12. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/LICENSE +0 -0
  13. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/README.md +0 -0
  14. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/README.md +0 -0
  15. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/__init__.py +0 -0
  16. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/api/__init__.py +0 -0
  17. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/api/_api.py +0 -0
  18. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/api/api_spec.py +0 -0
  19. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/api/mro_collect.py +0 -0
  20. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/api/shortcuts.py +0 -0
  21. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/api/tigrbl_api.py +0 -0
  22. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/app/__init__.py +0 -0
  23. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/app/_app.py +0 -0
  24. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/app/_model_registry.py +0 -0
  25. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/app/app_spec.py +0 -0
  26. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/app/mro_collect.py +0 -0
  27. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/app/shortcuts.py +0 -0
  28. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/app/tigrbl_app.py +0 -0
  29. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/__init__.py +0 -0
  30. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/api/__init__.py +0 -0
  31. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/api/common.py +0 -0
  32. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/api/include.py +0 -0
  33. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/api/resource_proxy.py +0 -0
  34. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/api/rpc.py +0 -0
  35. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/columns.py +0 -0
  36. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/handlers/__init__.py +0 -0
  37. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/handlers/builder.py +0 -0
  38. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/handlers/ctx.py +0 -0
  39. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/handlers/identifiers.py +0 -0
  40. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/handlers/namespaces.py +0 -0
  41. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/handlers/steps.py +0 -0
  42. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/hooks.py +0 -0
  43. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/model.py +0 -0
  44. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/model_helpers.py +0 -0
  45. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/model_registry.py +0 -0
  46. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/__init__.py +0 -0
  47. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/attach.py +0 -0
  48. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/collection.py +0 -0
  49. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/common.py +0 -0
  50. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/fastapi.py +0 -0
  51. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/helpers.py +0 -0
  52. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/io.py +0 -0
  53. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/io_headers.py +0 -0
  54. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/member.py +0 -0
  55. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/router.py +0 -0
  56. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rest/routing.py +0 -0
  57. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/rpc.py +0 -0
  58. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/schemas/__init__.py +0 -0
  59. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/schemas/builder.py +0 -0
  60. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/schemas/defaults.py +0 -0
  61. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/bindings/schemas/utils.py +0 -0
  62. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/README.md +0 -0
  63. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/__init__.py +0 -0
  64. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/_column.py +0 -0
  65. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/column_spec.py +0 -0
  66. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/field_spec.py +0 -0
  67. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/infer/__init__.py +0 -0
  68. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/infer/core.py +0 -0
  69. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/infer/jsonhints.py +0 -0
  70. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/infer/planning.py +0 -0
  71. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/infer/types.py +0 -0
  72. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/infer/utils.py +0 -0
  73. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/io_spec.py +0 -0
  74. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/mro_collect.py +0 -0
  75. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/shortcuts.py +0 -0
  76. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/column/storage_spec.py +0 -0
  77. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/config/__init__.py +0 -0
  78. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/config/constants.py +0 -0
  79. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/config/defaults.py +0 -0
  80. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/config/resolver.py +0 -0
  81. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/__init__.py +0 -0
  82. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/__init__.py +0 -0
  83. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/bulk.py +0 -0
  84. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/helpers/__init__.py +0 -0
  85. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/helpers/db.py +0 -0
  86. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/helpers/enum.py +0 -0
  87. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/helpers/filters.py +0 -0
  88. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/helpers/model.py +0 -0
  89. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/helpers/normalize.py +0 -0
  90. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/core/crud/ops.py +0 -0
  91. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/ddl/__init__.py +0 -0
  92. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/decorators.py +0 -0
  93. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/deps/favicon.svg +0 -0
  94. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/deps/jinja.py +0 -0
  95. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/deps/pydantic.py +0 -0
  96. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/deps/sqlalchemy.py +0 -0
  97. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/deps/starlette.py +0 -0
  98. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/docs/verbosity.md +0 -0
  99. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/__init__.py +0 -0
  100. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/_engine.py +0 -0
  101. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/bind.py +0 -0
  102. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/builders.py +0 -0
  103. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/capabilities.py +0 -0
  104. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/collect.py +0 -0
  105. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/decorators.py +0 -0
  106. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/docs/PLUGINS.md +0 -0
  107. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/engine_spec.py +0 -0
  108. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/plugins.py +0 -0
  109. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/registry.py +0 -0
  110. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/resolver.py +0 -0
  111. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/engine/shortcuts.py +0 -0
  112. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/hook/__init__.py +0 -0
  113. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/hook/_hook.py +0 -0
  114. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/hook/decorators.py +0 -0
  115. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/hook/hook_spec.py +0 -0
  116. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/hook/mro_collect.py +0 -0
  117. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/hook/shortcuts.py +0 -0
  118. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/hook/types.py +0 -0
  119. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/__init__.py +0 -0
  120. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/_op.py +0 -0
  121. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/canonical.py +0 -0
  122. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/collect.py +0 -0
  123. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/decorators.py +0 -0
  124. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/model_registry.py +0 -0
  125. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/mro_collect.py +0 -0
  126. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/resolver.py +0 -0
  127. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/op/types.py +0 -0
  128. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/__init__.py +0 -0
  129. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/_RowBound.py +0 -0
  130. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/__init__.py +0 -0
  131. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/bootstrappable.py +0 -0
  132. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/bound.py +0 -0
  133. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/edges.py +0 -0
  134. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/fields.py +0 -0
  135. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/hierarchy.py +0 -0
  136. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/key_digest.py +0 -0
  137. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/lifecycle.py +0 -0
  138. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/locks.py +0 -0
  139. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/markers.py +0 -0
  140. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/operations.py +0 -0
  141. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/ownable.py +0 -0
  142. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/principals.py +0 -0
  143. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/tenant_bound.py +0 -0
  144. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/upsertable.py +0 -0
  145. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/mixins/utils.py +0 -0
  146. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/__init__.py +0 -0
  147. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/_base.py +0 -0
  148. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/audit.py +0 -0
  149. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/client.py +0 -0
  150. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/group.py +0 -0
  151. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/org.py +0 -0
  152. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/rbac.py +0 -0
  153. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/status.py +0 -0
  154. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/tenant.py +0 -0
  155. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/orm/tables/user.py +0 -0
  156. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/response/README.md +0 -0
  157. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/response/__init__.py +0 -0
  158. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/response/bind.py +0 -0
  159. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/response/decorators.py +0 -0
  160. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/response/resolver.py +0 -0
  161. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/response/shortcuts.py +0 -0
  162. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/response/types.py +0 -0
  163. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/rest/__init__.py +0 -0
  164. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/README.md +0 -0
  165. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/__init__.py +0 -0
  166. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/__init__.py +0 -0
  167. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/emit/__init__.py +0 -0
  168. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/emit/paired_post.py +0 -0
  169. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/emit/paired_pre.py +0 -0
  170. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -0
  171. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/out/__init__.py +0 -0
  172. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/out/masking.py +0 -0
  173. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/refresh/__init__.py +0 -0
  174. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/refresh/demand.py +0 -0
  175. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/resolve/__init__.py +0 -0
  176. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/resolve/assemble.py +0 -0
  177. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/resolve/paired_gen.py +0 -0
  178. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/response/__init__.py +0 -0
  179. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/response/headers_from_payload.py +0 -0
  180. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/response/negotiate.py +0 -0
  181. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/response/negotiation.py +0 -0
  182. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/response/render.py +0 -0
  183. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/response/renderer.py +0 -0
  184. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/response/template.py +0 -0
  185. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/response/templates.py +0 -0
  186. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/schema/__init__.py +0 -0
  187. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/schema/collect_in.py +0 -0
  188. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/schema/collect_out.py +0 -0
  189. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/storage/__init__.py +0 -0
  190. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/storage/to_stored.py +0 -0
  191. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/wire/__init__.py +0 -0
  192. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/wire/build_in.py +0 -0
  193. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/wire/build_out.py +0 -0
  194. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/wire/dump.py +0 -0
  195. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/atoms/wire/validate_in.py +0 -0
  196. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/context.py +0 -0
  197. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/errors/__init__.py +0 -0
  198. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/errors/converters.py +0 -0
  199. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/errors/exceptions.py +0 -0
  200. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/errors/mappings.py +0 -0
  201. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/errors/utils.py +0 -0
  202. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/events.py +0 -0
  203. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/executor/__init__.py +0 -0
  204. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/executor/guards.py +0 -0
  205. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/executor/helpers.py +0 -0
  206. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/executor/invoke.py +0 -0
  207. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/kernel.py +0 -0
  208. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/labels.py +0 -0
  209. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/opview.py +0 -0
  210. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/ordering.py +0 -0
  211. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/system.py +0 -0
  212. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/runtime/trace.py +0 -0
  213. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/__init__.py +0 -0
  214. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/_schema.py +0 -0
  215. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/builder/__init__.py +0 -0
  216. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/builder/build_schema.py +0 -0
  217. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/builder/cache.py +0 -0
  218. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/builder/compat.py +0 -0
  219. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/builder/extras.py +0 -0
  220. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/builder/helpers.py +0 -0
  221. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/builder/list_params.py +0 -0
  222. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/builder/strip_parent_fields.py +0 -0
  223. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/collect.py +0 -0
  224. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/decorators.py +0 -0
  225. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/get_schema.py +0 -0
  226. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/schema_spec.py +0 -0
  227. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/shortcuts.py +0 -0
  228. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/types.py +0 -0
  229. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/schema/utils.py +0 -0
  230. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/session/README.md +0 -0
  231. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/session/__init__.py +0 -0
  232. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/session/abc.py +0 -0
  233. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/session/base.py +0 -0
  234. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/session/decorators.py +0 -0
  235. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/session/default.py +0 -0
  236. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/session/shortcuts.py +0 -0
  237. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/session/spec.py +0 -0
  238. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/shortcuts.py +0 -0
  239. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/specs.py +0 -0
  240. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/__init__.py +0 -0
  241. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/diagnostics/__init__.py +0 -0
  242. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/diagnostics/compat.py +0 -0
  243. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/diagnostics/healthz.py +0 -0
  244. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/diagnostics/hookz.py +0 -0
  245. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/diagnostics/kernelz.py +0 -0
  246. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/diagnostics/methodz.py +0 -0
  247. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/diagnostics/router.py +0 -0
  248. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/diagnostics/utils.py +0 -0
  249. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/system/uvicorn.py +0 -0
  250. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/table/__init__.py +0 -0
  251. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/table/_base.py +0 -0
  252. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/table/_table.py +0 -0
  253. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/table/mro_collect.py +0 -0
  254. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/table/shortcuts.py +0 -0
  255. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/table/table_spec.py +0 -0
  256. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/transport/jsonrpc/helpers.py +0 -0
  257. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/transport/jsonrpc/models.py +0 -0
  258. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/transport/rest/__init__.py +0 -0
  259. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/transport/rest/aggregator.py +0 -0
  260. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/allow_anon_provider.py +0 -0
  261. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/nested_path_provider.py +0 -0
  262. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/op.py +0 -0
  263. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/op_config_provider.py +0 -0
  264. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/op_verb_alias_provider.py +0 -0
  265. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/request_extras_provider.py +0 -0
  266. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/response_extras_provider.py +0 -0
  267. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/table_config_provider.py +0 -0
  268. {tigrbl-0.3.3.dev2 → tigrbl-0.3.4.dev1}/tigrbl/types/uuid.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrbl
3
- Version: 0.3.3.dev2
3
+ Version: 0.3.4.dev1
4
4
  Summary: Automatic API generation tools by Swarmauri.
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tigrbl"
3
- version = "0.3.3.dev2"
3
+ version = "0.3.4.dev1"
4
4
  description = "Automatic API generation tools by Swarmauri."
5
5
  license = "Apache-2.0"
6
6
  readme = "README.md"
@@ -16,5 +16,5 @@ from .pydantic import * # noqa: F403, F401
16
16
  # Re-export all FastAPI dependencies
17
17
  from .fastapi import * # noqa: F403, F401
18
18
 
19
- # Note: starlette.py is reserved for future Starlette-specific imports
20
- # if we need to import directly from Starlette rather than through FastAPI
19
+ # Re-export Starlette dependencies (Request/Response live here)
20
+ from .starlette import * # noqa: F403, F401
@@ -4,8 +4,6 @@ from fastapi import (
4
4
  FastAPI,
5
5
  Security,
6
6
  Depends,
7
- Request,
8
- Response,
9
7
  Path as FastAPIPath,
10
8
  Body,
11
9
  HTTPException,
@@ -36,8 +34,6 @@ __all__ = [
36
34
  "FastAPI",
37
35
  "Security",
38
36
  "Depends",
39
- "Request",
40
- "Response",
41
37
  "Path",
42
38
  "Body",
43
39
  "HTTPException",
@@ -8,23 +8,17 @@ from typing import (
8
8
  Mapping,
9
9
  MutableMapping,
10
10
  Optional,
11
+ Protocol,
11
12
  Sequence,
12
13
  Union,
13
- Protocol,
14
14
  runtime_checkable,
15
15
  )
16
16
 
17
- try:
18
- from fastapi import Request # type: ignore
19
- except Exception: # pragma: no cover
20
- Request = Any # type: ignore
17
+ from ...deps.starlette import Request as StarletteRequest
18
+ from sqlalchemy.ext.asyncio import AsyncSession
19
+ from sqlalchemy.orm import Session
21
20
 
22
- try:
23
- from sqlalchemy.orm import Session # type: ignore
24
- from sqlalchemy.ext.asyncio import AsyncSession # type: ignore
25
- except Exception: # pragma: no cover
26
- Session = Any # type: ignore
27
- AsyncSession = Any # type: ignore
21
+ Request = StarletteRequest if StarletteRequest is not None else Any # type: ignore
28
22
 
29
23
 
30
24
  @runtime_checkable
@@ -27,7 +27,7 @@ from __future__ import annotations
27
27
  from typing import Any, Callable, Optional, Sequence
28
28
 
29
29
  # JSON-RPC transport
30
- from .jsonrpc import build_jsonrpc_router
30
+ from .jsonrpc import build_jsonrpc_router, build_openrpc_spec
31
31
 
32
32
  # REST transport (aggregator over per-model routers)
33
33
  from .rest import build_rest_router, mount_rest
@@ -67,6 +67,7 @@ def mount_jsonrpc(
67
67
  __all__ = [
68
68
  # JSON-RPC
69
69
  "build_jsonrpc_router",
70
+ "build_openrpc_spec",
70
71
  "mount_jsonrpc",
71
72
  # REST
72
73
  "build_rest_router",
@@ -6,14 +6,18 @@ Public helper:
6
6
  - build_jsonrpc_router(
7
7
  api, *, get_db=None, tags=("rpc",)
8
8
  ) -> Router
9
+ - build_openrpc_spec(api) -> dict
9
10
 
10
11
  Usage:
11
12
  from tigrbl.transport.jsonrpc import build_jsonrpc_router
12
13
  app.include_router(build_jsonrpc_router(api), prefix="/rpc")
14
+ # OpenRPC schema (JSON-RPC equivalent of OpenAPI)
15
+ build_openrpc_spec(api)
13
16
  """
14
17
 
15
18
  from __future__ import annotations
16
19
 
17
20
  from .dispatcher import build_jsonrpc_router
21
+ from .openrpc import build_openrpc_spec
18
22
 
19
- __all__ = ["build_jsonrpc_router"]
23
+ __all__ = ["build_jsonrpc_router", "build_openrpc_spec"]
@@ -78,6 +78,7 @@ except Exception: # pragma: no cover
78
78
  from ...runtime.errors import ERROR_MESSAGES, http_exc_to_rpc
79
79
  from ...config.constants import TIGRBL_AUTH_CONTEXT_ATTR
80
80
  from .models import RPCRequest, RPCResponse
81
+ from .openrpc import build_openrpc_spec
81
82
  from .helpers import (
82
83
  _authorize,
83
84
  _err,
@@ -337,6 +338,19 @@ def build_jsonrpc_router(
337
338
  # extra router deps already applied via Router(dependencies=...)
338
339
  )
339
340
 
341
+ def _openrpc_endpoint():
342
+ return build_openrpc_spec(api)
343
+
344
+ router.add_api_route(
345
+ path="/openrpc.json",
346
+ endpoint=_openrpc_endpoint,
347
+ methods=["GET"],
348
+ name="openrpc_json",
349
+ tags=list(tags) if tags else None,
350
+ summary="OpenRPC",
351
+ description="OpenRPC 1.2.6 schema for JSON-RPC methods.",
352
+ )
353
+
340
354
  # Compatibility: serve same endpoint without trailing slash
341
355
  router.add_api_route(
342
356
  path="/",
@@ -0,0 +1,116 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict, Iterable, List, Mapping, Sequence
4
+
5
+ from pydantic import BaseModel
6
+
7
+ from ...op import OpSpec
8
+
9
+ JsonObject = Dict[str, Any]
10
+
11
+
12
+ def _iter_models(api: Any) -> List[type]:
13
+ seen: set[type] = set()
14
+ models: List[type] = []
15
+
16
+ def _add_from(container: Any) -> None:
17
+ if isinstance(container, Mapping):
18
+ items: Iterable[Any] = container.values()
19
+ elif isinstance(container, Sequence):
20
+ items = container
21
+ else:
22
+ return
23
+ for model in items:
24
+ if isinstance(model, type) and model not in seen:
25
+ seen.add(model)
26
+ models.append(model)
27
+
28
+ _add_from(getattr(api, "models", None) or {})
29
+ for child in getattr(api, "apis", ()) or ():
30
+ _add_from(getattr(child, "models", None) or {})
31
+
32
+ return models
33
+
34
+
35
+ def _iter_ops(model: type) -> Sequence[OpSpec]:
36
+ ops = getattr(model, "ops", None)
37
+ if ops is not None:
38
+ all_ops = getattr(ops, "all", None)
39
+ if all_ops is not None:
40
+ return all_ops
41
+ opspecs = getattr(model, "opspecs", None)
42
+ if opspecs is not None:
43
+ all_ops = getattr(opspecs, "all", None)
44
+ if all_ops is not None:
45
+ return all_ops
46
+ return ()
47
+
48
+
49
+ def _schema_with_defs(schema: type[BaseModel]) -> tuple[JsonObject, JsonObject]:
50
+ raw = schema.model_json_schema(ref_template="#/components/schemas/{model}")
51
+ defs = raw.pop("$defs", {})
52
+ return raw, defs
53
+
54
+
55
+ def _describe_method(model: type, spec: OpSpec) -> str | None:
56
+ rpc_ns = getattr(model, "rpc", None)
57
+ rpc_call = getattr(rpc_ns, spec.alias, None)
58
+ if rpc_call is None:
59
+ return None
60
+ doc = getattr(rpc_call, "__doc__", None)
61
+ if doc:
62
+ return doc.strip()
63
+ return None
64
+
65
+
66
+ def build_openrpc_spec(api: Any) -> JsonObject:
67
+ info_title = getattr(api, "title", None) or getattr(api, "name", None) or "API"
68
+ info_version = getattr(api, "version", None) or "0.1.0"
69
+ spec: JsonObject = {
70
+ "openrpc": "1.2.6",
71
+ "info": {"title": f"{info_title} JSON-RPC API", "version": info_version},
72
+ "methods": [],
73
+ "components": {"schemas": {}},
74
+ }
75
+
76
+ components = spec["components"]["schemas"]
77
+ methods: List[JsonObject] = []
78
+
79
+ for model in _iter_models(api):
80
+ for op in _iter_ops(model):
81
+ if not getattr(op, "expose_rpc", True):
82
+ continue
83
+
84
+ method: JsonObject = {"name": f"{model.__name__}.{op.alias}"}
85
+ description = _describe_method(model, op)
86
+ if description:
87
+ method["description"] = description
88
+
89
+ alias_ns = getattr(getattr(model, "schemas", None), op.alias, None)
90
+ in_schema = getattr(alias_ns, "in_", None)
91
+ out_schema = getattr(alias_ns, "out", None)
92
+
93
+ if in_schema is not None:
94
+ in_json, defs = _schema_with_defs(in_schema)
95
+ for key, value in defs.items():
96
+ components.setdefault(key, value)
97
+ method["params"] = [
98
+ {"name": "params", "schema": in_json, "required": True}
99
+ ]
100
+ method["paramStructure"] = "by-name"
101
+ else:
102
+ method["params"] = []
103
+
104
+ if out_schema is not None:
105
+ out_json, defs = _schema_with_defs(out_schema)
106
+ for key, value in defs.items():
107
+ components.setdefault(key, value)
108
+ method["result"] = {"name": "result", "schema": out_json}
109
+
110
+ methods.append(method)
111
+
112
+ spec["methods"] = sorted(methods, key=lambda item: item["name"])
113
+ return spec
114
+
115
+
116
+ __all__ = ["build_openrpc_spec"]
@@ -57,13 +57,12 @@ from ..deps.fastapi import (
57
57
  Router,
58
58
  Security,
59
59
  Depends,
60
- Request,
61
- Response,
62
60
  Path,
63
61
  Body,
64
62
  HTTPException,
65
63
  App,
66
64
  )
65
+ from ..deps.starlette import Request, Response
67
66
 
68
67
  # ── Local Package ─────────────────────────────────────────────────────────
69
68
  from .op import _Op, _SchemaVerb
@@ -1,7 +1,8 @@
1
1
  # tigrbl/v3/types/authn_abc.py
2
2
  from __future__ import annotations
3
3
  from abc import ABC, abstractmethod
4
- from fastapi import Request
4
+
5
+ from ..deps.starlette import Request
5
6
 
6
7
 
7
8
  class AuthNProvider(ABC):
File without changes
File without changes