tigrbl-concrete 0.4.1.dev6__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.
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/PKG-INFO +50 -100
- tigrbl_concrete-0.4.2.dev3/README.md +76 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/pyproject.toml +1 -1
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_app.py +33 -4
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_router.py +2 -8
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/tigrbl_app.py +6 -10
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/tigrbl_router.py +6 -11
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/appspec/path_lowering.py +2 -2
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/__init__.py +0 -14
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/__init__.py +0 -14
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/lens.py +12 -1
- tigrbl_concrete-0.4.1.dev6/README.md +0 -126
- tigrbl_concrete-0.4.1.dev6/tigrbl_concrete/system/docs/asyncapi.py +0 -86
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/LICENSE +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_alias.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_allow_anon.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_background.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_binding.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_body.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_column.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_cors_middleware.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_engine.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_event_stream_response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_file_response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_headers.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_hook.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_html_response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_httpx.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_json_response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_middleware.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_op.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_op_registry.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_plain_text_response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_redirect_response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_request.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_request_adapters.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_route.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_rust_backend.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_schema.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/api_key.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/http_basic.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/http_bearer.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/mutual_tls.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/oauth2.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_security/openid_connect.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_session.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_storage.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_streaming_response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_table.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_table_registry.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_websocket.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/dependencies.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/engine_resolver.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/allow_anon.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/engine.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/eventful.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/hook.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/middlewares.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/op.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/response.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/rest.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/schema.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_decorators/session.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/appspec/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/appspec/docs_lowering.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/appspec/engine_lowering.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/column_mro_collect.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/core_resolver.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/model.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/model_helpers.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/op_resolver.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/common.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/include.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/resource_proxy.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/router/rpc.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_mapping/rpc.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/ddl/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/decorators.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/bind.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/builders.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/capabilities.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/collect.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/plugins.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/registry.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/engine/resolver.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/factories/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/factories/app.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/resolve/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/resolve/handlers.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/security/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/security/dependencies.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/shortcuts/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/shortcuts/app.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/shortcuts/rest.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/healthz.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/hookz.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/kernelz.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/methodz.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/router.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/diagnostics/utils.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/json_schema.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/helpers.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/metadata.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/mount.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openapi/schema.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/openrpc.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/runtime_ops.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/surface.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/swagger.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/favicon/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/favicon/assets/favicon.svg +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/static.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/uvicorn.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/jsonrpc/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/jsonrpc/helpers.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/jsonrpc/models.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/transport/rest/__init__.py +0 -0
- {tigrbl_concrete-0.4.1.dev6 → 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.
|
|
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
|
-
|
|
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
|
-
|
|
249
|
-
<a href="https://pepy.tech/project/tigrbl-concrete">
|
|
250
|
-
<img src="https://static.pepy.tech/badge/tigrbl-concrete" alt="Pepy 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/badge/python-3.10--3.14-blue" alt="Python 3.10 through 3.14"/></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
|
-
|
|
260
|
+
```bash
|
|
261
|
+
uv add tigrbl-concrete
|
|
262
|
+
```
|
|
278
263
|
|
|
279
|
-
|
|
264
|
+
```bash
|
|
265
|
+
pip install tigrbl-concrete
|
|
266
|
+
```
|
|
280
267
|
|
|
281
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
276
|
+
## Public Surface
|
|
332
277
|
|
|
333
|
-
|
|
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
|
-
##
|
|
280
|
+
## Internal Layout
|
|
338
281
|
|
|
339
|
-
|
|
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
|
-
|
|
287
|
+
## Dependency Surface
|
|
342
288
|
|
|
343
|
-
|
|
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
|
-
##
|
|
293
|
+
## Related Packages
|
|
346
294
|
|
|
347
|
-
|
|
348
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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:
|
{tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/_router.py
RENAMED
|
@@ -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 (
|
{tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/tigrbl_app.py
RENAMED
|
@@ -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
|
-
|
|
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,
|
{tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/_concrete/tigrbl_router.py
RENAMED
|
@@ -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
|
-
|
|
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
|
-
|
|
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:
|
{tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/__init__.py
RENAMED
|
@@ -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
|
]
|
{tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/__init__.py
RENAMED
|
@@ -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
|
]
|
{tigrbl_concrete-0.4.1.dev6 → tigrbl_concrete-0.4.2.dev3}/tigrbl_concrete/system/docs/lens.py
RENAMED
|
@@ -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
|
}}
|