tigrbl-concrete 0.4.1.dev3__tar.gz → 0.4.2.dev3__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 (129) hide show
  1. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/PKG-INFO +50 -100
  2. tigrbl_concrete-0.4.2.dev3/README.md +76 -0
  3. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/pyproject.toml +1 -1
  4. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_app.py +33 -4
  5. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_router.py +2 -8
  6. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/tigrbl_app.py +6 -10
  7. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/tigrbl_router.py +6 -11
  8. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/appspec/path_lowering.py +2 -2
  9. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/__init__.py +0 -14
  10. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/__init__.py +0 -14
  11. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/lens.py +12 -1
  12. tigrbl_concrete-0.4.1.dev3/README.md +0 -126
  13. tigrbl_concrete-0.4.1.dev3/tigrbl_concrete/system/docs/asyncapi.py +0 -86
  14. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/LICENSE +0 -0
  15. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/__init__.py +0 -0
  16. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/__init__.py +0 -0
  17. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_alias.py +0 -0
  18. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_allow_anon.py +0 -0
  19. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_background.py +0 -0
  20. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_binding.py +0 -0
  21. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_body.py +0 -0
  22. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_column.py +0 -0
  23. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_cors_middleware.py +0 -0
  24. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_engine.py +0 -0
  25. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_event_stream_response.py +0 -0
  26. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_file_response.py +0 -0
  27. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_headers.py +0 -0
  28. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_hook.py +0 -0
  29. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_html_response.py +0 -0
  30. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_httpx.py +0 -0
  31. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_json_response.py +0 -0
  32. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_middleware.py +0 -0
  33. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_op.py +0 -0
  34. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_op_registry.py +0 -0
  35. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_plain_text_response.py +0 -0
  36. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_redirect_response.py +0 -0
  37. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_request.py +0 -0
  38. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_request_adapters.py +0 -0
  39. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_response.py +0 -0
  40. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_route.py +0 -0
  41. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_rust_backend.py +0 -0
  42. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_schema.py +0 -0
  43. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/__init__.py +0 -0
  44. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/api_key.py +0 -0
  45. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/http_basic.py +0 -0
  46. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/http_bearer.py +0 -0
  47. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/mutual_tls.py +0 -0
  48. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/oauth2.py +0 -0
  49. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/openid_connect.py +0 -0
  50. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_session.py +0 -0
  51. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_storage.py +0 -0
  52. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_streaming_response.py +0 -0
  53. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_table.py +0 -0
  54. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_table_registry.py +0 -0
  55. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_websocket.py +0 -0
  56. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/dependencies.py +0 -0
  57. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/engine_resolver.py +0 -0
  58. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/__init__.py +0 -0
  59. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/allow_anon.py +0 -0
  60. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/engine.py +0 -0
  61. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/eventful.py +0 -0
  62. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/hook.py +0 -0
  63. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/middlewares.py +0 -0
  64. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/op.py +0 -0
  65. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/response.py +0 -0
  66. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/rest.py +0 -0
  67. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/schema.py +0 -0
  68. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/session.py +0 -0
  69. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/__init__.py +0 -0
  70. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/appspec/__init__.py +0 -0
  71. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/appspec/docs_lowering.py +0 -0
  72. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/appspec/engine_lowering.py +0 -0
  73. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/column_mro_collect.py +0 -0
  74. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/core_resolver.py +0 -0
  75. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/model.py +0 -0
  76. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/model_helpers.py +0 -0
  77. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/op_resolver.py +0 -0
  78. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/__init__.py +0 -0
  79. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/common.py +0 -0
  80. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/include.py +0 -0
  81. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/resource_proxy.py +0 -0
  82. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/rpc.py +0 -0
  83. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/rpc.py +0 -0
  84. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/ddl/__init__.py +0 -0
  85. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/decorators.py +0 -0
  86. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/__init__.py +0 -0
  87. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/bind.py +0 -0
  88. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/builders.py +0 -0
  89. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/capabilities.py +0 -0
  90. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/collect.py +0 -0
  91. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/plugins.py +0 -0
  92. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/registry.py +0 -0
  93. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/resolver.py +0 -0
  94. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/factories/__init__.py +0 -0
  95. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/factories/app.py +0 -0
  96. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/resolve/__init__.py +0 -0
  97. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/resolve/handlers.py +0 -0
  98. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/security/__init__.py +0 -0
  99. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/security/dependencies.py +0 -0
  100. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/shortcuts/__init__.py +0 -0
  101. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/shortcuts/app.py +0 -0
  102. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/shortcuts/rest.py +0 -0
  103. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/__init__.py +0 -0
  104. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/healthz.py +0 -0
  105. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/hookz.py +0 -0
  106. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/kernelz.py +0 -0
  107. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/methodz.py +0 -0
  108. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/router.py +0 -0
  109. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/utils.py +0 -0
  110. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/json_schema.py +0 -0
  111. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/__init__.py +0 -0
  112. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/helpers.py +0 -0
  113. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/metadata.py +0 -0
  114. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/mount.py +0 -0
  115. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/schema.py +0 -0
  116. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openrpc.py +0 -0
  117. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/runtime_ops.py +0 -0
  118. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/surface.py +0 -0
  119. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/swagger.py +0 -0
  120. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/favicon/__init__.py +0 -0
  121. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/favicon/assets/favicon.svg +0 -0
  122. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/static.py +0 -0
  123. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/uvicorn.py +0 -0
  124. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/__init__.py +0 -0
  125. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/jsonrpc/__init__.py +0 -0
  126. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/jsonrpc/helpers.py +0 -0
  127. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/jsonrpc/models.py +0 -0
  128. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/rest/__init__.py +0 -0
  129. {tigrbl_concrete-0.4.1.dev3 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/rest/aggregator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrbl-concrete
3
- Version: 0.4.1.dev3
3
+ Version: 0.4.2.dev3
4
4
  Summary: Concrete Tigrbl implementations for reusable framework behavior, sessions, routes, responses, and base abstraction adapters.
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -243,113 +243,66 @@ Project-URL: Organization, https://github.com/tigrbl
243
243
  Project-URL: Repository, https://github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_concrete
244
244
  Description-Content-Type: text/markdown
245
245
 
246
- ![Tigrbl Logo](https://raw.githubusercontent.com/swarmauri/swarmauri-sdk/master/assets/tigrbl_full_logo.png)
246
+ <div align="center">
247
+ <h1>tigrbl-concrete</h1>
248
+ <img src="https://raw.githubusercontent.com/swarmauri/swarmauri-sdk/master/assets/tigrbl_full_logo.png" alt="Tigrbl logo" width="140"/>
249
+ <p><strong>Concrete Tigrbl implementations for reusable framework behavior, sessions, routes, responses, and base abstraction adapters.</strong></p>
250
+ <a href="https://pypi.org/project/tigrbl-concrete/"><img src="https://img.shields.io/pypi/v/tigrbl-concrete?label=PyPI" alt="PyPI version for tigrbl-concrete"/></a>
251
+ <a href="https://pypi.org/project/tigrbl-concrete/"><img src="https://static.pepy.tech/badge/tigrbl-concrete" alt="Downloads for tigrbl-concrete"/></a>
252
+ <a href="https://github.com/tigrbl/tigrbl/blob/master/pkgs/core/tigrbl_concrete/README.md"><img src="https://hits.sh/github.com/tigrbl/tigrbl/blob/master/pkgs/core/tigrbl_concrete/README.md.svg?label=hits" alt="Repository hits for tigrbl-concrete README"/></a>
253
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-525252" alt="Apache 2.0 license"/></a>
254
+ <a href="pyproject.toml"><img src="https://img.shields.io/badge/python-3.10%20to%203.15-3776ab" alt="Python requirement for tigrbl-concrete"/></a>
255
+ <a href="https://github.com/tigrbl/tigrbl/blob/master/docs/README.md"><img src="https://img.shields.io/badge/workspace-core-1f6feb" alt="Workspace group for tigrbl-concrete"/></a>
256
+ </div>
247
257
 
248
- <p align="center">
249
- <a href="https://pypi.org/project/tigrbl-concrete/">
250
- <img src="https://img.shields.io/pypi/dm/tigrbl-concrete" alt="PyPI downloads for tigrbl-concrete"/></a>
251
- <a href="https://hits.sh/github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_concrete/">
252
- <img src="https://hits.sh/github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_concrete.svg" alt="Repository views for tigrbl-concrete"/></a>
253
- <a href="https://pypi.org/project/tigrbl-concrete/">
254
- <img src="https://img.shields.io/pypi/pyversions/tigrbl-concrete" alt="Supported Python versions for tigrbl-concrete"/></a>
255
- <a href="https://pypi.org/project/tigrbl-concrete/">
256
- <img src="https://img.shields.io/pypi/l/tigrbl-concrete" alt="PyPI license metadata for tigrbl-concrete"/></a>
257
- <a href="https://pypi.org/project/tigrbl-concrete/">
258
- <img src="https://img.shields.io/pypi/v/tigrbl-concrete?label=tigrbl-concrete&color=green" alt="PyPI version for tigrbl-concrete"/></a>
259
- </p>
260
-
261
- ---
262
-
263
- <h1 align="center">Tigrbl concrete</h1>
264
-
265
- **Build concrete ASGI objects: [inspect `TigrblApp`, routers, transports, docs, and security objects](https://github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_concrete/tigrbl_concrete).**
266
-
267
- tigrbl-concrete is a concrete implementation package for concrete implementations of Tigrbl base abstractions for reusable framework behavior.
268
-
269
- `tigrbl-concrete` is part of the Tigrbl package graph. It documents package-resident classes, concepts, extension points, and execution responsibilities while cross-linking to the facade, core specs, canonical mapping, runtime phases, concrete objects, operation packages, engine plugins, OpenAPI/OpenRPC documentation surfaces, and PyPI distributions that complete the system.
270
-
271
- ## Resident concepts
272
-
273
- - `tigrbl_concrete` owns first-class native objects: concrete apps, routers, routes, tables, columns, requests, responses, middleware, security schemes, dependency wrappers, engine providers, REST transport aggregation, JSON-RPC helpers, docs builders, diagnostics, and shortcut factories.
274
- - Hooks, deps, and secdeps are documented here when they cross into concrete routing: model/router hook binding, REST dependencies, operation-level security requirements, allow-anonymous operation exceptions, authorization dependency injection, and docs metadata emission.
275
- - Use this package when you need the concrete objects that turn specs and canonical maps into ASGI routes, JSON-RPC methods, docs endpoints, security schemes, and execution-ready router state.
258
+ ## Install
276
259
 
277
- ## Package ecosystem cross-links
260
+ ```bash
261
+ uv add tigrbl-concrete
262
+ ```
278
263
 
279
- Every Tigrbl Python package links to its sibling distributions on PyPI so package indexes, search engines, answer engines, dependency scanners, and human readers can move through the installable package graph without falling back to source-tree paths.
264
+ ```bash
265
+ pip install tigrbl-concrete
266
+ ```
280
267
 
281
- Core packages:
282
- - [`tigrbl`](https://pypi.org/project/tigrbl/) - Schema-first ASGI API framework for REST, JSON-RPC, OpenAPI, OpenRPC, SQLAlchemy models, typed validation, lifecycle hooks, and engine plugins.
283
- - [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/) - Runtime atom utilities for Tigrbl planning, dispatch, transport ingress, egress, and high-throughput ASGI execution pipelines.
284
- - [`tigrbl-base`](https://pypi.org/project/tigrbl-base/) - Abstract base interfaces for Tigrbl APIs, engines, providers, sessions, transports, and reusable runtime components.
285
- - [`tigrbl-canon`](https://pypi.org/project/tigrbl-canon/) - Canonical mapping, routing, symbol resolution, and naming utilities for Tigrbl framework packages and generated API surfaces.
286
- - [`tigrbl_client`](https://pypi.org/project/tigrbl_client/) - Typed Python client helpers for calling Tigrbl REST, JSON-RPC, OpenAPI, and generated schema-first API surfaces.
287
- - [`tigrbl-concrete`](https://pypi.org/project/tigrbl-concrete/) (this package) - Concrete Tigrbl implementations for reusable framework behavior, sessions, routes, responses, and base abstraction adapters.
288
- - [`tigrbl-core`](https://pypi.org/project/tigrbl-core/) - Core Tigrbl framework specifications, decorators, schemas, hooks, operations, and primitives for schema-first APIs.
289
- - [`tigrbl-kernel`](https://pypi.org/project/tigrbl-kernel/) - Kernel orchestration for composing Tigrbl runtime plans, bindings, operation dispatch, and optimized ASGI execution.
290
- - [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/) - Analytical OLAP operation boundaries for Tigrbl workloads, query-oriented APIs, and engine integrations.
291
- - [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/) - Transactional OLTP operation handlers for Tigrbl CRUD, bulk, REST, JSON-RPC, and database-backed workloads.
292
- - [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/) - Realtime, streaming, datagram, websocket, and event operation handlers for Tigrbl ASGI runtimes.
293
- - [`tigrbl-orm`](https://pypi.org/project/tigrbl-orm/) - SQLAlchemy ORM tables, mixins, columns, model helpers, and persistence primitives for Tigrbl applications.
294
- - [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/) - Runtime pipeline helpers and execution bridge surfaces for Tigrbl ASGI applications, transports, and operation dispatch.
295
- - [`tigrbl_spec`](https://pypi.org/project/tigrbl_spec/) - Shared Tigrbl interfaces, protocol definitions, compatibility targets, and specification artifacts for framework integration.
296
- - [`tigrbl_tests`](https://pypi.org/project/tigrbl_tests/) - Reusable Tigrbl pytest fixtures, conformance assertions, integration helpers, and package test utilities.
297
- - [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/) - Typing protocols, aliases, generics, and shared type helpers for Tigrbl framework packages and extensions.
268
+ ## What It Owns
298
269
 
299
- Engine packages:
300
- - [`tigrbl_engine_bigquery`](https://pypi.org/project/tigrbl_engine_bigquery/) - BigQuery engine plugin for Google BigQuery warehouse sessions, analytics workloads, and Tigrbl engine registration.
301
- - [`tigrbl_engine_clickhouse`](https://pypi.org/project/tigrbl_engine_clickhouse/) - ClickHouse engine plugin for analytical database sessions, warehouse workloads, and Tigrbl engine registration.
302
- - [`tigrbl_engine_csv`](https://pypi.org/project/tigrbl_engine_csv/) - CSV engine plugin for file-backed tables, pandas DataFrames, and lightweight Tigrbl data workflows.
303
- - [`tigrbl_engine_dataframe`](https://pypi.org/project/tigrbl_engine_dataframe/) - DataFrame engine plugin for transactional pandas sessions and in-process Tigrbl analytics workloads.
304
- - [`tigrbl_engine_duckdb`](https://pypi.org/project/tigrbl_engine_duckdb/) - DuckDB engine plugin for embedded analytical database sessions, OLAP workloads, and Tigrbl engine registration.
305
- - [`tigrbl_engine_inmemcache`](https://pypi.org/project/tigrbl_engine_inmemcache/) - In-memory cache engine plugin for process-local TTL, LRU, and fast Tigrbl cache workflows.
306
- - [`tigrbl_engine_inmemory`](https://pypi.org/project/tigrbl_engine_inmemory/) - In-memory database engine plugin for process-local transactional storage, copy-on-write snapshots, and Tigrbl testing.
307
- - [`tigrbl_engine_membloom`](https://pypi.org/project/tigrbl_engine_membloom/) - In-memory Bloom filter engine plugin for membership checks, rotating TTL windows, and Tigrbl API workflows.
308
- - [`tigrbl_engine_memdedupe`](https://pypi.org/project/tigrbl_engine_memdedupe/) - In-memory dedupe engine plugin for idempotency tracking, duplicate suppression, and Tigrbl workflow coordination.
309
- - [`tigrbl_engine_memkv`](https://pypi.org/project/tigrbl_engine_memkv/) - In-memory key-value engine plugin for process-local KV storage, cache workflows, and lightweight Tigrbl services.
310
- - [`tigrbl_engine_memlru`](https://pypi.org/project/tigrbl_engine_memlru/) - In-memory LRU engine plugin for least-recently-used cache behavior and process-local Tigrbl data workflows.
311
- - [`tigrbl_engine_mempubsub`](https://pypi.org/project/tigrbl_engine_mempubsub/) - In-memory pub/sub engine plugin for process-local publish-subscribe channels, events, and Tigrbl realtime workflows.
312
- - [`tigrbl_engine_memqueue`](https://pypi.org/project/tigrbl_engine_memqueue/) - In-memory queue engine plugin for process-local tasks, message workflows, and Tigrbl runtime coordination.
313
- - [`tigrbl_engine_memrate`](https://pypi.org/project/tigrbl_engine_memrate/) - In-memory rate-limit engine plugin for API quotas, counters, windows, and Tigrbl governance workflows.
314
- - [`tigrbl_engine_numpy`](https://pypi.org/project/tigrbl_engine_numpy/) - NumPy engine plugin for array-to-table helpers, analytical workflows, and Tigrbl data integration.
315
- - [`tigrbl_engine_pandas`](https://pypi.org/project/tigrbl_engine_pandas/) - Pandas engine plugin for transactional DataFrame sessions, tabular workflows, and Tigrbl data integration.
316
- - [`tigrbl_engine_pgsqli_wal`](https://pypi.org/project/tigrbl_engine_pgsqli_wal/) - PostgreSQL and SQLite WAL engine plugin for transactional Tigrbl workflows and database-backed engine registration.
317
- - [`tigrbl_engine_postgres`](https://pypi.org/project/tigrbl_engine_postgres/) - PostgreSQL engine plugin for SQLAlchemy sessions, async database workflows, and Tigrbl application persistence.
318
- - [`tigrbl_engine_pyspark`](https://pypi.org/project/tigrbl_engine_pyspark/) - PySpark engine plugin for distributed DataFrame integration, analytics workloads, and Tigrbl data workflows.
319
- - [`tigrbl_engine_redis`](https://pypi.org/project/tigrbl_engine_redis/) - Redis engine plugin for cache, data structures, and Tigrbl engine workflows backed by Redis.
320
- - [`tigrbl_engine_rediscachethrough`](https://pypi.org/project/tigrbl_engine_rediscachethrough/) - Redis cache-through engine plugin for Redis, PostgreSQL, and Tigrbl data-access acceleration workflows.
321
- - [`tigrbl_engine_snowflake`](https://pypi.org/project/tigrbl_engine_snowflake/) - Snowflake engine plugin for warehouse sessions, analytical workloads, and Tigrbl engine registration.
322
- - [`tigrbl_engine_sqlite`](https://pypi.org/project/tigrbl_engine_sqlite/) - SQLite engine plugin for SQLAlchemy sessions, local transactional storage, and Tigrbl application persistence.
323
- - [`tigrbl_engine_xlsx`](https://pypi.org/project/tigrbl_engine_xlsx/) - XLSX engine plugin for Excel workbook-backed tables, worksheet data access, and Tigrbl tabular workflows.
270
+ `tigrbl-concrete` owns the concrete boundary inside the split Python workspace. Key implementation roots include `tigrbl_concrete` with `_concrete/, _decorators/, _mapping/, ddl/, decorators, engine/`.
324
271
 
325
- Application packages:
326
- - [`tigrbl_acme_ca`](https://pypi.org/project/tigrbl_acme_ca/) - ACME v2 certificate authority app for Tigrbl tables, certificate automation, TLS workflows, and API surfaces.
327
- - [`tigrbl_spiffe`](https://pypi.org/project/tigrbl_spiffe/) - SPIFFE and SPIRE identity app for Tigrbl with workload identity tables, UDS transport, and HTTP API surfaces.
272
+ ## Use It When
328
273
 
329
- Source-tree links remain available from each package identity section; this ecosystem section is intentionally PyPI-first for package discovery and installation routing.
274
+ Use `tigrbl-concrete` when you want this subsystem directly as a package boundary instead of consuming it only through the top-level `tigrbl` facade.
330
275
 
331
- ## Install
276
+ ## Public Surface
332
277
 
333
- ```bash
334
- pip install tigrbl-concrete
335
- ```
278
+ - `tigrbl_concrete` exposes `import_module, Any, build_handlers, build_hooks, build_schemas, build_rest_router`.
336
279
 
337
- ## Package discovery
280
+ ## Internal Layout
338
281
 
339
- `tigrbl-concrete` is described for package indexes, search engines, answer engines, and AI coding tools as: Concrete Tigrbl implementations for reusable framework behavior, sessions, routes, responses, and base abstraction adapters.
282
+ - Workspace path: `pkgs/core/tigrbl_concrete`.
283
+ - Package class: `core framework package`.
284
+ - Python requirement: `>=3.10,<3.15`.
285
+ - `tigrbl_concrete` modules: `_concrete/, _decorators/, _mapping/, ddl/, decorators, engine/, factories/, resolve/, security/, shortcuts/`.
340
286
 
341
- Use `tigrbl-concrete` when you need Tigrbl's schema-first ASGI package graph for REST APIs, JSON-RPC APIs, OpenAPI documentation, OpenRPC documentation, SQLAlchemy-backed models, Pydantic validation, typed operation specs, runtime dispatch, and installable engine or application extensions.
287
+ ## Dependency Surface
342
288
 
343
- Discovery terms: tigrbl, ASGI, schema-first API framework, REST API, JSON-RPC API, OpenAPI documentation, OpenRPC documentation, SQLAlchemy models, Pydantic validation, typed validation, operation dispatch, engine plugins, api, json-rpc, rest, sqlalchemy, pydantic, concrete, implementation, framework, openapi, openrpc, schema-first.
289
+ - Workspace package dependencies: [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/), [`tigrbl-base`](https://pypi.org/project/tigrbl-base/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
290
+ - External runtime dependencies: `orjson`, `pydantic>=2.0`, `sqlalchemy`, `uvicorn`.
291
+ - Optional extras: none declared.
344
292
 
345
- ## Package-local entry point
293
+ ## Related Packages
346
294
 
347
- This file is a package-local distribution entry point.
348
- It is not the authoritative location for repository governance, current target status, current state reporting, certification claims, or release evidence.
295
+ - [`tigrbl`](https://pypi.org/project/tigrbl/)
296
+ - [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/)
297
+ - [`tigrbl-base`](https://pypi.org/project/tigrbl-base/)
298
+ - [`tigrbl-core`](https://pypi.org/project/tigrbl-core/)
299
+ - [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/)
300
+ - [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/)
301
+ - [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/)
302
+ - [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/)
349
303
 
350
- ## Canonical repository docs
304
+ ## Canonical Repository Docs
351
305
 
352
- - `README.md`
353
306
  - `docs/README.md`
354
307
  - `docs/conformance/CURRENT_TARGET.md`
355
308
  - `docs/conformance/CURRENT_STATE.md`
@@ -358,15 +311,12 @@ It is not the authoritative location for repository governance, current target s
358
311
  - `docs/developer/PACKAGE_CATALOG.md`
359
312
  - `docs/developer/PACKAGE_LAYOUT.md`
360
313
 
361
- ## Package identity
314
+ ## Package-local Boundary
315
+
316
+ This file is a package-local distribution entry point.
317
+ Use this page for package installation and boundary orientation. Repository governance, conformance state, target status, and release evidence remain governed from `docs/` and `.ssot/`.
362
318
 
363
- - canonical repository: `https://github.com/tigrbl/tigrbl`
364
- - organization: `https://github.com/tigrbl`
365
- - social: `https://discord.gg/K4YTAPapjR`
366
- - package path: `https://github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_concrete`
367
- - workspace path: `pkgs/core/tigrbl_concrete`
368
- - workspace class: core Python package
369
- - implementation layout: `tigrbl_concrete/`
319
+ ## License
370
320
 
371
- Long-form repository documentation is governed from `docs/`.
321
+ Licensed under the Apache License, Version 2.0. See `LICENSE` and the official [Apache 2.0 license text](https://www.apache.org/licenses/LICENSE-2.0).
372
322
 
@@ -0,0 +1,76 @@
1
+ <div align="center">
2
+ <h1>tigrbl-concrete</h1>
3
+ <img src="https://raw.githubusercontent.com/swarmauri/swarmauri-sdk/master/assets/tigrbl_full_logo.png" alt="Tigrbl logo" width="140"/>
4
+ <p><strong>Concrete Tigrbl implementations for reusable framework behavior, sessions, routes, responses, and base abstraction adapters.</strong></p>
5
+ <a href="https://pypi.org/project/tigrbl-concrete/"><img src="https://img.shields.io/pypi/v/tigrbl-concrete?label=PyPI" alt="PyPI version for tigrbl-concrete"/></a>
6
+ <a href="https://pypi.org/project/tigrbl-concrete/"><img src="https://static.pepy.tech/badge/tigrbl-concrete" alt="Downloads for tigrbl-concrete"/></a>
7
+ <a href="https://github.com/tigrbl/tigrbl/blob/master/pkgs/core/tigrbl_concrete/README.md"><img src="https://hits.sh/github.com/tigrbl/tigrbl/blob/master/pkgs/core/tigrbl_concrete/README.md.svg?label=hits" alt="Repository hits for tigrbl-concrete README"/></a>
8
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-525252" alt="Apache 2.0 license"/></a>
9
+ <a href="pyproject.toml"><img src="https://img.shields.io/badge/python-3.10%20to%203.15-3776ab" alt="Python requirement for tigrbl-concrete"/></a>
10
+ <a href="https://github.com/tigrbl/tigrbl/blob/master/docs/README.md"><img src="https://img.shields.io/badge/workspace-core-1f6feb" alt="Workspace group for tigrbl-concrete"/></a>
11
+ </div>
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ uv add tigrbl-concrete
17
+ ```
18
+
19
+ ```bash
20
+ pip install tigrbl-concrete
21
+ ```
22
+
23
+ ## What It Owns
24
+
25
+ `tigrbl-concrete` owns the concrete boundary inside the split Python workspace. Key implementation roots include `tigrbl_concrete` with `_concrete/, _decorators/, _mapping/, ddl/, decorators, engine/`.
26
+
27
+ ## Use It When
28
+
29
+ Use `tigrbl-concrete` when you want this subsystem directly as a package boundary instead of consuming it only through the top-level `tigrbl` facade.
30
+
31
+ ## Public Surface
32
+
33
+ - `tigrbl_concrete` exposes `import_module, Any, build_handlers, build_hooks, build_schemas, build_rest_router`.
34
+
35
+ ## Internal Layout
36
+
37
+ - Workspace path: `pkgs/core/tigrbl_concrete`.
38
+ - Package class: `core framework package`.
39
+ - Python requirement: `>=3.10,<3.15`.
40
+ - `tigrbl_concrete` modules: `_concrete/, _decorators/, _mapping/, ddl/, decorators, engine/, factories/, resolve/, security/, shortcuts/`.
41
+
42
+ ## Dependency Surface
43
+
44
+ - Workspace package dependencies: [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/), [`tigrbl-base`](https://pypi.org/project/tigrbl-base/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
45
+ - External runtime dependencies: `orjson`, `pydantic>=2.0`, `sqlalchemy`, `uvicorn`.
46
+ - Optional extras: none declared.
47
+
48
+ ## Related Packages
49
+
50
+ - [`tigrbl`](https://pypi.org/project/tigrbl/)
51
+ - [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/)
52
+ - [`tigrbl-base`](https://pypi.org/project/tigrbl-base/)
53
+ - [`tigrbl-core`](https://pypi.org/project/tigrbl-core/)
54
+ - [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/)
55
+ - [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/)
56
+ - [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/)
57
+ - [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/)
58
+
59
+ ## Canonical Repository Docs
60
+
61
+ - `docs/README.md`
62
+ - `docs/conformance/CURRENT_TARGET.md`
63
+ - `docs/conformance/CURRENT_STATE.md`
64
+ - `docs/conformance/NEXT_STEPS.md`
65
+ - `docs/governance/DOC_POINTERS.md`
66
+ - `docs/developer/PACKAGE_CATALOG.md`
67
+ - `docs/developer/PACKAGE_LAYOUT.md`
68
+
69
+ ## Package-local Boundary
70
+
71
+ This file is a package-local distribution entry point.
72
+ Use this page for package installation and boundary orientation. Repository governance, conformance state, target status, and release evidence remain governed from `docs/` and `.ssot/`.
73
+
74
+ ## License
75
+
76
+ Licensed under the Apache License, Version 2.0. See `LICENSE` and the official [Apache 2.0 license text](https://www.apache.org/licenses/LICENSE-2.0).
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tigrbl-concrete"
3
- version = "0.4.1.dev3"
3
+ version = "0.4.2.dev3"
4
4
  description = "Concrete Tigrbl implementations for reusable framework behavior, sessions, routes, responses, and base abstraction adapters."
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -164,6 +164,7 @@ class App(AppBase):
164
164
  self._runtime_plan_revision = int(current) + 1
165
165
  except Exception:
166
166
  self._runtime_plan_revision = 1
167
+ self.openapi_schema = None
167
168
  kernels = []
168
169
  runtime = getattr(self, "_runtime_instance", None)
169
170
  kernel = getattr(runtime, "kernel", None)
@@ -216,10 +217,6 @@ class App(AppBase):
216
217
  from tigrbl_concrete.system.docs.json_schema import _mount_json_schema
217
218
  return _mount_json_schema(self, path=path)
218
219
 
219
- def mount_asyncapi(self, *, path: str = "/asyncapi.json") -> Any:
220
- from tigrbl_concrete.system.docs.asyncapi import _mount_asyncapi
221
- return _mount_asyncapi(self, path=path)
222
-
223
220
  def mount_static(self, *, directory: str | Path, path: str = "/static") -> Any:
224
221
  from tigrbl_concrete.system.static import _mount_static
225
222
  return _mount_static(self, directory=directory, path=path)
@@ -336,6 +333,9 @@ class App(AppBase):
336
333
  if scope_type == "lifespan":
337
334
  await self._handle_lifespan(scope, receive, send)
338
335
  return
336
+ if scope_type == "webtransport":
337
+ await self._handle_webtransport(scope, receive, send)
338
+ return
339
339
  if scope_type == "websocket":
340
340
  if not scope.get("scheme"):
341
341
  scope = dict(scope)
@@ -406,6 +406,35 @@ class App(AppBase):
406
406
  env = GwRawEnvelope(kind="asgi3", scope=scope, receive=receive, send=send)
407
407
  await self.invoke(env)
408
408
 
409
+ async def _handle_webtransport(
410
+ self, scope: dict[str, Any], receive: Any, send: Any
411
+ ) -> None:
412
+ if not scope.get("scheme"):
413
+ scope = dict(scope)
414
+ scope["scheme"] = "webtransport"
415
+ scope_state = scope.setdefault("state", {})
416
+ if not isinstance(scope_state, dict):
417
+ scope_state = {}
418
+ scope["state"] = scope_state
419
+ wt_state = scope_state.setdefault("tigrbl_webtransport", {})
420
+ if not isinstance(wt_state, dict):
421
+ wt_state = {}
422
+ scope_state["tigrbl_webtransport"] = wt_state
423
+
424
+ while wt_state.get("closed") is not True:
425
+ env = GwRawEnvelope(kind="asgi3", scope=scope, receive=receive, send=send)
426
+ await self.invoke(env)
427
+ trace = wt_state.get("trace")
428
+ if isinstance(trace, list):
429
+ self._webtransport_trace_latest = list(trace)
430
+ snapshots = getattr(self, "_webtransport_trace_snapshots", None)
431
+ if not isinstance(snapshots, list):
432
+ snapshots = []
433
+ self._webtransport_trace_snapshots = snapshots
434
+ snapshots.append(list(trace))
435
+ if wt_state.get("closed") is True or wt_state.get("disconnected") is True:
436
+ break
437
+
409
438
  async def _handle_lifespan(
410
439
  self, _scope: dict[str, Any], receive: Any, send: Any
411
440
  ) -> None:
@@ -98,6 +98,7 @@ class Router(RouterBase):
98
98
  self.docs_url = docs_url
99
99
  self.debug = debug
100
100
  self.swagger_ui_version = swagger_ui_version
101
+ self.openapi_schema = None
101
102
  class_prefix = getattr(self, "PREFIX", "")
102
103
  self.prefix = normalize_prefix(prefix or class_prefix)
103
104
  self.tags = list(_seqify(tags))
@@ -201,6 +202,7 @@ class Router(RouterBase):
201
202
  self._runtime_plan_revision = int(current) + 1
202
203
  except Exception:
203
204
  self._runtime_plan_revision = 1
205
+ self.openapi_schema = None
204
206
  kernels = []
205
207
  runtime = getattr(self, "_runtime_instance", None)
206
208
  kernel = getattr(runtime, "kernel", None)
@@ -255,10 +257,6 @@ class Router(RouterBase):
255
257
  from tigrbl_concrete.system.docs.json_schema import _mount_json_schema
256
258
  return _mount_json_schema(self, path=path)
257
259
 
258
- def mount_asyncapi(self, *, path: str = "/asyncapi.json") -> Any:
259
- from tigrbl_concrete.system.docs.asyncapi import _mount_asyncapi
260
- return _mount_asyncapi(self, path=path)
261
-
262
260
  def mount_static(self, *, directory: str | Path, path: str = "/static") -> Any:
263
261
  from tigrbl_concrete.system.static import _mount_static
264
262
  return _mount_static(self, directory=directory, path=path)
@@ -275,10 +273,6 @@ class Router(RouterBase):
275
273
  from tigrbl_concrete.system.docs.json_schema import _build_json_schema_bundle
276
274
  return _build_json_schema_bundle(self)
277
275
 
278
- def build_asyncapi_spec(self) -> dict[str, Any]:
279
- from tigrbl_concrete.system.docs.asyncapi import _build_asyncapi_spec
280
- return _build_asyncapi_spec(self)
281
-
282
276
  def websocket(self, path: str, **kwargs: Any) -> Callable[[Any], Any]:
283
277
  def _decorator(handler: Any) -> Any:
284
278
  from tigrbl_concrete.system.docs.runtime_ops import (
@@ -36,10 +36,8 @@ from tigrbl_concrete.system import mount_lens as _mount_lens
36
36
  from tigrbl_concrete.system import mount_openapi as _mount_openapi
37
37
  from tigrbl_concrete.system import mount_openrpc as _mount_openrpc
38
38
  from tigrbl_concrete.system import mount_swagger as _mount_swagger
39
- from tigrbl_concrete.system import mount_asyncapi as _mount_asyncapi
40
39
  from tigrbl_concrete.system import mount_json_schema as _mount_json_schema
41
40
  from tigrbl_concrete.system import mount_static as _mount_static
42
- from tigrbl_concrete.system import build_asyncapi_spec as _build_asyncapi_spec
43
41
  from tigrbl_concrete.system import build_json_schema_bundle as _build_json_schema_bundle
44
42
  from tigrbl_concrete.system import build_openrpc_spec as _build_openrpc_spec
45
43
  from tigrbl_concrete.system.docs import build_openapi as _build_openapi
@@ -278,7 +276,6 @@ class TigrblApp(_App):
278
276
  self.mount_openrpc(path="/openrpc.json")
279
277
  self.mount_lens(path="/lens", spec_path="/openrpc.json")
280
278
  self.mount_json_schema(path="/schemas.json")
281
- self.mount_asyncapi(path="/asyncapi.json")
282
279
  if routers:
283
280
  initial_routers.extend(list(routers))
284
281
  if initial_routers:
@@ -812,18 +809,12 @@ class TigrblApp(_App):
812
809
  def mount_json_schema(self, *, path: str = "/schemas.json") -> Any:
813
810
  return _mount_json_schema(self, path=path)
814
811
 
815
- def mount_asyncapi(self, *, path: str = "/asyncapi.json") -> Any:
816
- return _mount_asyncapi(self, path=path)
817
-
818
812
  def mount_static(self, *, directory: str | Path, path: str = "/static") -> Any:
819
813
  return _mount_static(self, directory=directory, path=path)
820
814
 
821
815
  def build_json_schema_bundle(self) -> Dict[str, Any]:
822
816
  return _build_json_schema_bundle(self)
823
817
 
824
- def build_asyncapi_spec(self) -> Dict[str, Any]:
825
- return _build_asyncapi_spec(self)
826
-
827
818
  def websocket(self, path: str, **kwargs: Any) -> Callable[[Any], Any]:
828
819
  def _decorator(handler: Any) -> Any:
829
820
  from tigrbl_concrete.system.docs.runtime_ops import (
@@ -893,7 +884,12 @@ class TigrblApp(_App):
893
884
 
894
885
  def openapi(self) -> Dict[str, Any]:
895
886
  """Build and return the OpenAPI document for this app."""
896
- return _build_openapi(self)
887
+ cached = getattr(self, "openapi_schema", None)
888
+ if isinstance(cached, dict):
889
+ return cached
890
+ document = _build_openapi(self)
891
+ self.openapi_schema = document
892
+ return document
897
893
 
898
894
  def mount_lens(
899
895
  self,
@@ -359,11 +359,6 @@ class TigrblRouter(_Router):
359
359
 
360
360
  return _mount_json_schema(self, path=path)
361
361
 
362
- def mount_asyncapi(self, *, path: str = "/asyncapi.json") -> Any:
363
- from tigrbl_concrete.system import mount_asyncapi as _mount_asyncapi
364
-
365
- return _mount_asyncapi(self, path=path)
366
-
367
362
  def mount_static(self, *, directory: str, path: str = "/static") -> Any:
368
363
  from tigrbl_concrete.system import mount_static as _mount_static
369
364
 
@@ -374,11 +369,6 @@ class TigrblRouter(_Router):
374
369
 
375
370
  return _build_json_schema_bundle(self)
376
371
 
377
- def build_asyncapi_spec(self) -> Dict[str, Any]:
378
- from tigrbl_concrete.system import build_asyncapi_spec as _build_asyncapi_spec
379
-
380
- return _build_asyncapi_spec(self)
381
-
382
372
  def websocket(self, path: str, **kwargs: Any) -> Callable[[Any], Any]:
383
373
  def _decorator(handler: Any) -> Any:
384
374
  from tigrbl_concrete.system.docs.runtime_ops import (
@@ -447,7 +437,12 @@ class TigrblRouter(_Router):
447
437
 
448
438
  def openapi(self) -> Dict[str, Any]:
449
439
  """Build and return the OpenAPI document for this router."""
450
- return _build_openapi(self)
440
+ cached = getattr(self, "openapi_schema", None)
441
+ if isinstance(cached, dict):
442
+ return cached
443
+ document = _build_openapi(self)
444
+ self.openapi_schema = document
445
+ return document
451
446
 
452
447
  # ------------------------- registry passthroughs -------------------------
453
448
 
@@ -124,8 +124,8 @@ def _mount_docs_payload(router: Any, path_spec: PathSpec) -> None:
124
124
  router.mount_openrpc(path=path_spec.path)
125
125
  elif payload.kind == "jsonschema":
126
126
  router.mount_json_schema(path=path_spec.path)
127
- elif payload.kind == "asyncapi":
128
- router.mount_asyncapi(path=path_spec.path)
127
+ elif str(payload.kind) == "asyncapi":
128
+ raise NotImplementedError("AsyncAPI docs payloads are not supported.")
129
129
 
130
130
 
131
131
  def _mount_docs_uix(router: Any, path_spec: PathSpec) -> None:
@@ -63,12 +63,6 @@ def mount_json_schema(*args: Any, **kwargs: Any) -> Any:
63
63
  return _mount_json_schema(*args, **kwargs)
64
64
 
65
65
 
66
- def mount_asyncapi(*args: Any, **kwargs: Any) -> Any:
67
- from .docs import mount_asyncapi as _mount_asyncapi
68
-
69
- return _mount_asyncapi(*args, **kwargs)
70
-
71
-
72
66
  def mount_static(*args: Any, **kwargs: Any) -> Any:
73
67
  from .static import _mount_static as _mount_static
74
68
 
@@ -111,12 +105,6 @@ def build_json_schema_bundle(*args: Any, **kwargs: Any) -> Any:
111
105
  return _build_json_schema_bundle(*args, **kwargs)
112
106
 
113
107
 
114
- def build_asyncapi_spec(*args: Any, **kwargs: Any) -> Any:
115
- from .docs import build_asyncapi_spec as _build_asyncapi_spec
116
-
117
- return _build_asyncapi_spec(*args, **kwargs)
118
-
119
-
120
108
  def stop_uvicorn_server(*args: Any, **kwargs: Any) -> Any:
121
109
  from .uvicorn import stop_uvicorn_server as _stop_uvicorn_server
122
110
 
@@ -133,7 +121,6 @@ __all__ = [
133
121
  'mount_openrpc',
134
122
  'mount_swagger',
135
123
  'mount_json_schema',
136
- 'mount_asyncapi',
137
124
  'mount_static',
138
125
  'build_favicon',
139
126
  'build_healthz_uix',
@@ -142,6 +129,5 @@ __all__ = [
142
129
  'build_openrpc_spec',
143
130
  'build_swagger',
144
131
  'build_json_schema_bundle',
145
- 'build_asyncapi_spec',
146
132
  'stop_uvicorn_server',
147
133
  ]
@@ -63,29 +63,15 @@ def mount_json_schema(*args: Any, **kwargs: Any) -> Any:
63
63
  return _mount_json_schema(*args, **kwargs)
64
64
 
65
65
 
66
- def build_asyncapi_spec(*args: Any, **kwargs: Any) -> Any:
67
- from .asyncapi import _build_asyncapi_spec as _build_asyncapi_spec
68
-
69
- return _build_asyncapi_spec(*args, **kwargs)
70
-
71
-
72
- def mount_asyncapi(*args: Any, **kwargs: Any) -> Any:
73
- from .asyncapi import _mount_asyncapi as _mount_asyncapi
74
-
75
- return _mount_asyncapi(*args, **kwargs)
76
-
77
-
78
66
  __all__ = [
79
67
  'build_lens',
80
68
  'build_openapi',
81
69
  'build_openrpc_spec',
82
70
  'build_swagger',
83
71
  'build_json_schema_bundle',
84
- 'build_asyncapi_spec',
85
72
  'mount_lens',
86
73
  'mount_openapi',
87
74
  'mount_openrpc',
88
75
  'mount_swagger',
89
76
  'mount_json_schema',
90
- 'mount_asyncapi',
91
77
  ]
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import json
3
4
  from typing import Any
4
5
  from urllib.parse import quote
5
6
 
@@ -14,11 +15,21 @@ def _with_leading_slash(path: str) -> str:
14
15
  return path if path.startswith("/") else f"/{path}"
15
16
 
16
17
 
18
+ def _build_docs_config(router: Any, *, spec_path: str) -> list[dict[str, Any]]:
19
+ openapi_path = _with_leading_slash(str(getattr(router, "openapi_url", "/openapi.json") or "/openapi.json"))
20
+ openrpc_path = _with_leading_slash(str(spec_path or getattr(router, "openrpc_path", "/openrpc.json") or "/openrpc.json"))
21
+ return [
22
+ {"id": "rest", "label": "REST", "kind": "openapi", "url": openapi_path, "rawSpecHref": openapi_path, "protocols": ["rest"]},
23
+ {"id": "jsonrpc", "label": "JSON-RPC", "kind": "openrpc", "url": openrpc_path, "rawSpecHref": openrpc_path, "protocols": ["jsonrpc"]},
24
+ ]
25
+
26
+
17
27
  def build_lens_html(router: Any, request: Any, *, spec_path: str) -> str:
18
28
  base = (getattr(request, "script_name", "") or "").rstrip("/")
19
29
  route_prefix = str(getattr(router, "_tigrbl_route_prefix", "") or "").rstrip("/")
20
30
  spec_url = f"{base}{route_prefix}{_with_leading_slash(spec_path)}"
21
31
  quoted_spec_url = quote(spec_url, safe="/:?=&%")
32
+ docs_config = json.dumps(_build_docs_config(router, spec_path=spec_path), separators=(",", ":"))
22
33
  return f"""<!doctype html>
23
34
  <html>
24
35
  <head>
@@ -62,7 +73,7 @@ def build_lens_html(router: Any, request: Any, *, spec_path: str) -> str:
62
73
  React.createElement(
63
74
  React.StrictMode,
64
75
  null,
65
- React.createElement(EmbeddedLens, {{ url: "{quoted_spec_url}" }}),
76
+ React.createElement(EmbeddedLens, {{ url: "{quoted_spec_url}", docs: {docs_config} }}),
66
77
  ),
67
78
  );
68
79
  }}