tigrbl 0.3.16.dev4__tar.gz → 0.3.17.dev2__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-0.3.16.dev4 → tigrbl-0.3.17.dev2}/PKG-INFO +27 -22
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/README.md +26 -21
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/pyproject.toml +3 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/README.md +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/__init__.py +102 -36
- tigrbl-0.3.17.dev2/tigrbl/_base/__init__.py +24 -0
- tigrbl-0.3.17.dev2/tigrbl/_base/_hook_base.py +25 -0
- tigrbl-0.3.16.dev4/tigrbl/middlewares/base.py → tigrbl-0.3.17.dev2/tigrbl/_base/_middleware_base.py +7 -8
- tigrbl-0.3.17.dev2/tigrbl/_base/_op_base.py +12 -0
- tigrbl-0.3.17.dev2/tigrbl/_base/_request_base.py +32 -0
- tigrbl-0.3.16.dev4/tigrbl/responses/_response.py → tigrbl-0.3.17.dev2/tigrbl/_base/_response_base.py +67 -114
- tigrbl-0.3.17.dev2/tigrbl/_base/_schema_base.py +14 -0
- tigrbl-0.3.17.dev2/tigrbl/_base/_session_abc.py +47 -0
- tigrbl-0.3.16.dev4/tigrbl/session/base.py → tigrbl-0.3.17.dev2/tigrbl/_base/_session_base.py +15 -34
- tigrbl-0.3.17.dev2/tigrbl/_base/_storage.py +13 -0
- tigrbl-0.3.16.dev4/tigrbl/table/_base.py → tigrbl-0.3.17.dev2/tigrbl/_base/_table_base.py +14 -10
- tigrbl-0.3.17.dev2/tigrbl/_base/_table_registry_base.py +55 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/__init__.py +44 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_alias.py +42 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_app.py +180 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_body.py +27 -0
- {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_column.py +4 -4
- tigrbl-0.3.16.dev4/tigrbl/middlewares/cors.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_cors_middleware.py +1 -65
- {tigrbl-0.3.16.dev4/tigrbl/engine → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_engine.py +44 -1
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_file_response.py +26 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_hook.py +12 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_html_response.py +18 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_json_response.py +24 -0
- tigrbl-0.3.16.dev4/tigrbl/middlewares/middleware.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_middleware.py +12 -4
- {tigrbl-0.3.16.dev4/tigrbl/op → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_op.py +5 -5
- tigrbl-0.3.16.dev4/tigrbl/op/model_registry.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_op_registry.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_plain_text_response.py +18 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_redirect_response.py +19 -0
- {tigrbl-0.3.16.dev4/tigrbl/requests → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_request.py +21 -2
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_response.py +35 -0
- {tigrbl-0.3.16.dev4/tigrbl/api → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_route.py +3 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_router.py +207 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_routing.py +139 -0
- {tigrbl-0.3.16.dev4/tigrbl/schema → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_schema.py +3 -2
- {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/api_key.py +1 -1
- {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/http_bearer.py +1 -1
- {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/mutual_tls.py +1 -1
- {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/oauth2.py +1 -1
- {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/openid_connect.py +1 -1
- tigrbl-0.3.16.dev4/tigrbl/session/default.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_session.py +6 -12
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_storage.py +13 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_streaming_response.py +35 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_table.py +103 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_table_registry.py +10 -0
- tigrbl-0.3.17.dev2/tigrbl/_concrete/tigrbl_app.py +893 -0
- tigrbl-0.3.16.dev4/tigrbl/api/tigrbl_api.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/tigrbl_router.py +180 -123
- tigrbl-0.3.17.dev2/tigrbl/_spec/__init__.py +67 -0
- tigrbl-0.3.17.dev2/tigrbl/_spec/alias_spec.py +35 -0
- tigrbl-0.3.17.dev2/tigrbl/_spec/app_spec.py +137 -0
- tigrbl-0.3.17.dev2/tigrbl/_spec/binding_spec.py +78 -0
- {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/column_spec.py +3 -3
- {tigrbl-0.3.16.dev4/tigrbl/engine → tigrbl-0.3.17.dev2/tigrbl/_spec}/engine_spec.py +8 -7
- {tigrbl-0.3.16.dev4/tigrbl/hook → tigrbl-0.3.17.dev2/tigrbl/_spec}/hook_spec.py +1 -1
- {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/io_spec.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/_spec/op_spec.py +110 -0
- tigrbl-0.3.17.dev2/tigrbl/_spec/request_spec.py +19 -0
- tigrbl-0.3.16.dev4/tigrbl/responses/types.py → tigrbl-0.3.17.dev2/tigrbl/_spec/response_spec.py +2 -17
- tigrbl-0.3.17.dev2/tigrbl/_spec/response_types.py +12 -0
- tigrbl-0.3.16.dev4/tigrbl/api/api_spec.py → tigrbl-0.3.17.dev2/tigrbl/_spec/router_spec.py +8 -13
- {tigrbl-0.3.16.dev4/tigrbl/schema → tigrbl-0.3.17.dev2/tigrbl/_spec}/schema_spec.py +2 -2
- tigrbl-0.3.16.dev4/tigrbl/session/spec.py → tigrbl-0.3.17.dev2/tigrbl/_spec/session_spec.py +49 -1
- tigrbl-0.3.17.dev2/tigrbl/_spec/shortcuts_spec.py +8 -0
- {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/storage_spec.py +0 -6
- tigrbl-0.3.17.dev2/tigrbl/_spec/table_registry_spec.py +14 -0
- tigrbl-0.3.17.dev2/tigrbl/_spec/table_spec.py +73 -0
- tigrbl-0.3.17.dev2/tigrbl/column/__init__.py +23 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/config/__init__.py +4 -4
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/config/constants.py +3 -3
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/config/defaults.py +3 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/__init__.py +7 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/model.py +7 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/ops.py +65 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/params.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/ddl/__init__.py +107 -81
- tigrbl-0.3.17.dev2/tigrbl/decorators/__init__.py +48 -0
- tigrbl-0.3.16.dev4/tigrbl/engine/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/engine.py +3 -3
- tigrbl-0.3.16.dev4/tigrbl/hook/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/hook.py +4 -4
- tigrbl-0.3.16.dev4/tigrbl/op/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/op.py +39 -23
- tigrbl-0.3.16.dev4/tigrbl/responses/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/response.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/decorators/router.py +115 -0
- tigrbl-0.3.16.dev4/tigrbl/session/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/session.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/docs/column_specs.md +62 -0
- tigrbl-0.3.17.dev2/tigrbl/docs/session.md +11 -0
- tigrbl-0.3.17.dev2/tigrbl/engine/__init__.py +108 -0
- tigrbl-0.3.17.dev2/tigrbl/engine/bind.py +53 -0
- tigrbl-0.3.17.dev2/tigrbl/engine/collect.py +10 -0
- tigrbl-0.3.17.dev2/tigrbl/engine/resolver.py +8 -0
- tigrbl-0.3.17.dev2/tigrbl/hook/exceptions.py +3 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/hook/types.py +2 -18
- tigrbl-0.3.17.dev2/tigrbl/mapping/__init__.py +60 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/app_mro_collect.py +14 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/apply.py +98 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/collect.py +60 -0
- tigrbl-0.3.16.dev4/tigrbl/schema/collect.py → tigrbl-0.3.17.dev2/tigrbl/mapping/collect_decorated_schemas.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/mapping/column_mro_collect.py +124 -0
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/columns.py +2 -2
- tigrbl-0.3.16.dev4/tigrbl/config/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/config_resolver.py +8 -4
- tigrbl-0.3.17.dev2/tigrbl/mapping/context.py +48 -0
- tigrbl-0.3.16.dev4/tigrbl/core/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/core_resolver.py +32 -11
- tigrbl-0.3.17.dev2/tigrbl/mapping/diagnostics.py +20 -0
- tigrbl-0.3.16.dev4/tigrbl/engine/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/engine_resolver.py +51 -28
- {tigrbl-0.3.16.dev4/tigrbl/bindings/schemas → tigrbl-0.3.17.dev2/tigrbl/mapping/handlers}/__init__.py +2 -2
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/builder.py +4 -4
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/ctx.py +14 -2
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/identifiers.py +2 -2
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/namespaces.py +2 -2
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/steps.py +6 -5
- tigrbl-0.3.16.dev4/tigrbl/hook/mro_collect.py → tigrbl-0.3.17.dev2/tigrbl/mapping/hook_mro_collect.py +29 -6
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/hooks.py +36 -22
- tigrbl-0.3.17.dev2/tigrbl/mapping/mapping_resolver.py +5 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/model.py +33 -0
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/model_helpers.py +19 -7
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/model_registry.py +14 -6
- tigrbl-0.3.17.dev2/tigrbl/mapping/op_mro_collect.py +136 -0
- tigrbl-0.3.16.dev4/tigrbl/op/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/op_resolver.py +4 -4
- tigrbl-0.3.17.dev2/tigrbl/mapping/passes.py +74 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/plan.py +54 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/precedence.py +45 -0
- tigrbl-0.3.16.dev4/tigrbl/responses/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/responses_resolver.py +1 -1
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/__init__.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/mapping/rest/attach.py +25 -0
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/collection.py +28 -98
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/common.py +36 -49
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/helpers.py +3 -14
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/io.py +24 -9
- tigrbl-0.3.17.dev2/tigrbl/mapping/rest/member.py +200 -0
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/router.py +10 -33
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/routing.py +15 -40
- {tigrbl-0.3.16.dev4/tigrbl/bindings/api → tigrbl-0.3.17.dev2/tigrbl/mapping/router}/common.py +22 -30
- tigrbl-0.3.17.dev2/tigrbl/mapping/router/include.py +466 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/router/resource_proxy.py +104 -0
- {tigrbl-0.3.16.dev4/tigrbl/bindings/api → tigrbl-0.3.17.dev2/tigrbl/mapping/router}/rpc.py +60 -17
- tigrbl-0.3.16.dev4/tigrbl/api/mro_collect.py → tigrbl-0.3.17.dev2/tigrbl/mapping/router_mro_collect.py +10 -8
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rpc.py +113 -65
- tigrbl-0.3.17.dev2/tigrbl/mapping/runtime_routes.py +293 -0
- {tigrbl-0.3.16.dev4/tigrbl/bindings/handlers → tigrbl-0.3.17.dev2/tigrbl/mapping/schemas}/__init__.py +2 -2
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/schemas/builder.py +5 -5
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/schemas/defaults.py +3 -3
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/schemas/utils.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/mapping/spec_normalization.py +110 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/table.py +5 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/table_mro_collect.py +14 -0
- tigrbl-0.3.17.dev2/tigrbl/mapping/traversal.py +196 -0
- tigrbl-0.3.17.dev2/tigrbl/op/__init__.py +39 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/op/canonical.py +13 -11
- tigrbl-0.3.17.dev2/tigrbl/op/collect.py +20 -0
- tigrbl-0.3.17.dev2/tigrbl/op/types.py +55 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/bound.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/hierarchy.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/key_digest.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/lifecycle.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/locks.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/ownable.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/principals.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/tenant_bound.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/__init__.py +3 -2
- tigrbl-0.3.17.dev2/tigrbl/orm/tables/_base.py +7 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/audit.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/client.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/group.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/org.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/rbac.py +5 -5
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/status.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/tenant.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/user.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/requests.py +5 -0
- tigrbl-0.3.17.dev2/tigrbl/rest/__init__.py +15 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/README.md +52 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/__init__.py +10 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/dep/__init__.py +15 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/dep/extra.py +104 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/dep/security.py +114 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/__init__.py +43 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/asgi_send.py +228 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/envelope_apply.py +101 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/headers_apply.py +58 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/http_finalize.py +43 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/out_dump.py +33 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/result_normalize.py +35 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/to_transport_response.py +125 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/__init__.py +58 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/attach_compiled.py +32 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/body_peek.py +29 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/body_read.py +66 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/ctx_init.py +27 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/headers_parse.py +67 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/method_extract.py +45 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/metrics_start.py +27 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/path_extract.py +46 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/query_parse.py +101 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/raw_from_scope.py +124 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/request_body_apply.py +26 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/request_from_scope.py +33 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/paired_gen.py +5 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/headers_from_payload.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/negotiate.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/response/render.py +82 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/renderer.py +4 -4
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/template.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/templates.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/__init__.py +42 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/binding_match.py +155 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/binding_policy_apply.py +82 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/ctx_finalize.py +142 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/op_resolve.py +67 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/params_normalize.py +22 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/path_params_extract.py +21 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/payload_select.py +196 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/plan_select.py +31 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/protocol_detect.py +51 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/rpc_envelope_parse.py +135 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/rpc_method_match.py +39 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/sys/__init__.py +26 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/sys/commit_tx.py +16 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/sys/handler_persistence.py +38 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/sys/start_tx.py +16 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/build_in.py +123 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/build_out.py +12 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/dump.py +66 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/validate_in.py +32 -1
- tigrbl-0.3.17.dev2/tigrbl/runtime/events.py +435 -0
- {tigrbl-0.3.16.dev4/tigrbl/hook → tigrbl-0.3.17.dev2/tigrbl/runtime}/exceptions.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/runtime/executor/helpers.py +194 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/invoke.py +104 -12
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/types.py +55 -3
- tigrbl-0.3.17.dev2/tigrbl/runtime/gw/__init__.py +4 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/gw/invoke.py +339 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/gw/raw.py +26 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/hook_types.py +60 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/__init__.py +49 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/atoms.py +234 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/cache.py +85 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/core.py +483 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/models.py +124 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/opview_compiler.py +99 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/payload.py +64 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/kernel.py +77 -54
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/labels.py +17 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/opview.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/ordering.py +75 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/converters.py +9 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/utils.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/system.py +59 -0
- tigrbl-0.3.17.dev2/tigrbl/schema/__init__.py +27 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/build_schema.py +97 -4
- tigrbl-0.3.17.dev2/tigrbl/schema/builder/helpers.py +87 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/list_params.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/strip_parent_fields.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/security/__init__.py +5 -0
- tigrbl-0.3.17.dev2/tigrbl/security/dependencies.py +5 -0
- tigrbl-0.3.17.dev2/tigrbl/shortcuts/__init__.py +31 -0
- tigrbl-0.3.16.dev4/tigrbl/app/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/app.py +9 -9
- tigrbl-0.3.16.dev4/tigrbl/column/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/column.py +5 -5
- tigrbl-0.3.16.dev4/tigrbl/engine/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/engine.py +2 -2
- tigrbl-0.3.16.dev4/tigrbl/hook/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/hook.py +3 -3
- tigrbl-0.3.17.dev2/tigrbl/shortcuts/op.py +14 -0
- tigrbl-0.3.16.dev4/tigrbl/responses/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/responses.py +7 -9
- tigrbl-0.3.17.dev2/tigrbl/shortcuts/router.py +42 -0
- tigrbl-0.3.16.dev4/tigrbl/schema/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/schema.py +3 -3
- tigrbl-0.3.16.dev4/tigrbl/table/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/table.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/specs.py +30 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/__init__.py +2 -0
- tigrbl-0.3.17.dev2/tigrbl/system/diagnostics/healthz.py +63 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/hookz.py +3 -3
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/kernelz.py +3 -3
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/methodz.py +3 -3
- tigrbl-0.3.17.dev2/tigrbl/system/diagnostics/router.py +208 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/utils.py +27 -15
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/lens.py +2 -2
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/helpers.py +3 -3
- tigrbl-0.3.17.dev2/tigrbl/system/docs/openapi/mount.py +85 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/schema.py +21 -3
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openrpc.py +83 -23
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/swagger.py +15 -9
- tigrbl-0.3.17.dev2/tigrbl/system/favicon/__init__.py +138 -0
- tigrbl-0.3.17.dev2/tigrbl/transport/__init__.py +3 -0
- tigrbl-0.3.17.dev2/tigrbl/transport/jsonrpc/__init__.py +0 -0
- tigrbl-0.3.17.dev2/tigrbl/transport/jsonrpc/helpers.py +55 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/transport/rest/__init__.py +7 -11
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/transport/rest/aggregator.py +18 -32
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/__init__.py +35 -15
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/authn_abc.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/op_config_provider.py +1 -1
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/uuid.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/utils/__init__.py +3 -0
- tigrbl-0.3.16.dev4/tigrbl/schema/get_schema.py → tigrbl-0.3.17.dev2/tigrbl/utils/schema.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/vendor/__init__.py +21 -0
- tigrbl-0.3.17.dev2/tigrbl/vendor/jinja.py +34 -0
- tigrbl-0.3.16.dev4/tigrbl/api/__init__.py +0 -19
- tigrbl-0.3.16.dev4/tigrbl/api/_api.py +0 -150
- tigrbl-0.3.16.dev4/tigrbl/api/_router.py +0 -490
- tigrbl-0.3.16.dev4/tigrbl/api/_routing.py +0 -143
- tigrbl-0.3.16.dev4/tigrbl/api/resolve.py +0 -151
- tigrbl-0.3.16.dev4/tigrbl/api/shortcuts.py +0 -56
- tigrbl-0.3.16.dev4/tigrbl/app/_app.py +0 -119
- tigrbl-0.3.16.dev4/tigrbl/app/_model_registry.py +0 -41
- tigrbl-0.3.16.dev4/tigrbl/app/app_spec.py +0 -42
- tigrbl-0.3.16.dev4/tigrbl/app/mro_collect.py +0 -106
- tigrbl-0.3.16.dev4/tigrbl/app/tigrbl_app.py +0 -594
- tigrbl-0.3.16.dev4/tigrbl/app/transport.py +0 -154
- tigrbl-0.3.16.dev4/tigrbl/bindings/__init__.py +0 -73
- tigrbl-0.3.16.dev4/tigrbl/bindings/api/__init__.py +0 -11
- tigrbl-0.3.16.dev4/tigrbl/bindings/api/include.py +0 -273
- tigrbl-0.3.16.dev4/tigrbl/bindings/api/resource_proxy.py +0 -148
- tigrbl-0.3.16.dev4/tigrbl/bindings/model.py +0 -194
- tigrbl-0.3.16.dev4/tigrbl/bindings/rest/attach.py +0 -34
- tigrbl-0.3.16.dev4/tigrbl/bindings/rest/fastapi.py +0 -52
- tigrbl-0.3.16.dev4/tigrbl/bindings/rest/member.py +0 -386
- tigrbl-0.3.16.dev4/tigrbl/column/__init__.py +0 -75
- tigrbl-0.3.16.dev4/tigrbl/column/mro_collect.py +0 -59
- tigrbl-0.3.16.dev4/tigrbl/decorators.py +0 -17
- tigrbl-0.3.16.dev4/tigrbl/deps/__init__.py +0 -25
- tigrbl-0.3.16.dev4/tigrbl/deps/jinja.py +0 -27
- tigrbl-0.3.16.dev4/tigrbl/engine/__init__.py +0 -47
- tigrbl-0.3.16.dev4/tigrbl/engine/bind.py +0 -33
- tigrbl-0.3.16.dev4/tigrbl/engine/collect.py +0 -111
- tigrbl-0.3.16.dev4/tigrbl/headers/__init__.py +0 -3
- tigrbl-0.3.16.dev4/tigrbl/hook/__init__.py +0 -23
- tigrbl-0.3.16.dev4/tigrbl/hook/_hook.py +0 -22
- tigrbl-0.3.16.dev4/tigrbl/middlewares/__init__.py +0 -37
- tigrbl-0.3.16.dev4/tigrbl/op/__init__.py +0 -50
- tigrbl-0.3.16.dev4/tigrbl/op/collect.py +0 -11
- tigrbl-0.3.16.dev4/tigrbl/op/mro_collect.py +0 -99
- tigrbl-0.3.16.dev4/tigrbl/op/types.py +0 -136
- tigrbl-0.3.16.dev4/tigrbl/orm/tables/_base.py +0 -8
- tigrbl-0.3.16.dev4/tigrbl/requests/__init__.py +0 -5
- tigrbl-0.3.16.dev4/tigrbl/responses/README.md +0 -34
- tigrbl-0.3.16.dev4/tigrbl/responses/__init__.py +0 -52
- tigrbl-0.3.16.dev4/tigrbl/responses/_transport.py +0 -32
- tigrbl-0.3.16.dev4/tigrbl/responses/bind.py +0 -12
- tigrbl-0.3.16.dev4/tigrbl/rest/__init__.py +0 -27
- tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/render.py +0 -36
- tigrbl-0.3.16.dev4/tigrbl/runtime/events.py +0 -209
- tigrbl-0.3.16.dev4/tigrbl/runtime/executor/helpers.py +0 -88
- tigrbl-0.3.16.dev4/tigrbl/schema/__init__.py +0 -38
- tigrbl-0.3.16.dev4/tigrbl/schema/builder/compat.py +0 -16
- tigrbl-0.3.16.dev4/tigrbl/schema/builder/helpers.py +0 -51
- tigrbl-0.3.16.dev4/tigrbl/security/__init__.py +0 -63
- tigrbl-0.3.16.dev4/tigrbl/security/schemes/__init__.py +0 -19
- tigrbl-0.3.16.dev4/tigrbl/session/README.md +0 -14
- tigrbl-0.3.16.dev4/tigrbl/session/__init__.py +0 -28
- tigrbl-0.3.16.dev4/tigrbl/session/abc.py +0 -76
- tigrbl-0.3.16.dev4/tigrbl/session/shortcuts.py +0 -50
- tigrbl-0.3.16.dev4/tigrbl/shortcuts.py +0 -22
- tigrbl-0.3.16.dev4/tigrbl/specs.py +0 -44
- tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/compat.py +0 -31
- tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/healthz.py +0 -41
- tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/router.py +0 -73
- tigrbl-0.3.16.dev4/tigrbl/system/docs/openapi/mount.py +0 -30
- tigrbl-0.3.16.dev4/tigrbl/system/favicon/__init__.py +0 -102
- tigrbl-0.3.16.dev4/tigrbl/table/__init__.py +0 -9
- tigrbl-0.3.16.dev4/tigrbl/table/_table.py +0 -54
- tigrbl-0.3.16.dev4/tigrbl/table/mro_collect.py +0 -86
- tigrbl-0.3.16.dev4/tigrbl/table/table_spec.py +0 -28
- tigrbl-0.3.16.dev4/tigrbl/transport/__init__.py +0 -93
- tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/__init__.py +0 -23
- tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/dispatcher.py +0 -460
- tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/helpers.py +0 -119
- tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/openrpc.py +0 -3
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/LICENSE +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/security/schemes/_base.py → /tigrbl-0.3.17.dev2/tigrbl/_base/_security_base.py +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/transport/background.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_background.py +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/headers/_header.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_headers.py +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/transport/httpx.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_httpx.py +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/requests/adapters.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_request_adapters.py +0 -0
- {tigrbl-0.3.16.dev4/tigrbl/security → tigrbl-0.3.17.dev2/tigrbl/_concrete}/dependencies.py +0 -0
- {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/field_spec.py +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/middlewares/spec.py → /tigrbl-0.3.17.dev2/tigrbl/_spec/middleware_spec.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/README.md +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/core.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/jsonhints.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/planning.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/types.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/utils.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/bulk.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/db.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/enum.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/filters.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/normalize.py +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/middlewares/decorators.py → /tigrbl-0.3.17.dev2/tigrbl/decorators/middlewares.py +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/transport/rest/decorators.py → /tigrbl-0.3.17.dev2/tigrbl/decorators/rest.py +0 -0
- /tigrbl-0.3.16.dev4/tigrbl/schema/decorators.py → /tigrbl-0.3.17.dev2/tigrbl/decorators/schema.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/docs/verbosity.md +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/builders.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/capabilities.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/docs/PLUGINS.md +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/plugins.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/registry.py +0 -0
- {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/io_headers.py +0 -0
- {tigrbl-0.3.16.dev4/tigrbl/app → tigrbl-0.3.17.dev2/tigrbl/middlewares}/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/middlewares/compose.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/_RowBound.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/bootstrappable.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/edges.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/fields.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/markers.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/operations.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/upsertable.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/utils.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/paired_post.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/paired_pre.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/out/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/out/masking.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/refresh/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/refresh/demand.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/assemble.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/negotiation.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/collect_in.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/collect_out.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/storage/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/storage/to_stored.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/context.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/guards.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/exceptions.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/mappings.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/trace.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/cache.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/extras.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/types.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/utils.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/__init__.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/metadata.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/favicon/assets/favicon.svg +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/uvicorn.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/transport/jsonrpc/models.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/allow_anon_provider.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/nested_path_provider.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/op.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/op_verb_alias_provider.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/request_extras_provider.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/response_extras_provider.py +0 -0
- {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/table_config_provider.py +0 -0
- {tigrbl-0.3.16.dev4/tigrbl/deps → tigrbl-0.3.17.dev2/tigrbl/vendor}/pydantic.py +0 -0
- {tigrbl-0.3.16.dev4/tigrbl/deps → tigrbl-0.3.17.dev2/tigrbl/vendor}/sqlalchemy.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tigrbl
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.17.dev2
|
|
4
4
|
Summary: A modern pure ASGI/WSGI Python framework for building schema-first REST and JSON-RPC APIs with SQLAlchemy models, typed validation, lifecycle hooks, and engine extension support.
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -59,11 +59,16 @@ A high-leverage ASGI meta-framework that turns plain SQLAlchemy models into a fu
|
|
|
59
59
|
- 🧩 Pluggable engine and provider abstractions
|
|
60
60
|
- 🚀 Built as an ASGI-native framework with Pydantic-powered schema generation
|
|
61
61
|
|
|
62
|
+
## Runtime-owned Routing Contract
|
|
63
|
+
|
|
64
|
+
For the kernel-first flow that avoids pre-runtime REST/RPC dispatching, see
|
|
65
|
+
[`RUNTIME_OWNED_ROUTING.md`](./RUNTIME_OWNED_ROUTING.md).
|
|
66
|
+
|
|
62
67
|
## Terminology 📚
|
|
63
68
|
|
|
64
69
|
- **Tenant** 🏢 – a namespace used to group related resources.
|
|
65
70
|
- **Principal** 👤 – an owner of resources, such as an individual user or an organization.
|
|
66
|
-
- **Resource** 📦 – a logical collection of data or functionality exposed by the
|
|
71
|
+
- **Resource** 📦 – a logical collection of data or functionality exposed by the router.
|
|
67
72
|
- **Engine** ⚙️ – the database connection and transaction manager backing a resource.
|
|
68
73
|
- **Model / Table** 🧱 – the ORM or database representation of a resource's records.
|
|
69
74
|
- **Column** 📏 – a field on a model that maps to a table column.
|
|
@@ -310,7 +315,7 @@ increasing order of precedence:
|
|
|
310
315
|
|
|
311
316
|
1. defaults
|
|
312
317
|
2. app config
|
|
313
|
-
3.
|
|
318
|
+
3. router config
|
|
314
319
|
4. table config
|
|
315
320
|
5. column config
|
|
316
321
|
6. operation spec
|
|
@@ -318,7 +323,7 @@ increasing order of precedence:
|
|
|
318
323
|
|
|
319
324
|
Later entries override earlier ones, so request overrides win over all other
|
|
320
325
|
sources. This can be summarized as
|
|
321
|
-
`overrides > opspec > colspecs > tabspec >
|
|
326
|
+
`overrides > opspec > colspecs > tabspec > routerspec > appspec > defaults`.
|
|
322
327
|
|
|
323
328
|
### Schema Config Precedence 🧬
|
|
324
329
|
|
|
@@ -327,7 +332,7 @@ Later layers override earlier ones, with the precedence order:
|
|
|
327
332
|
|
|
328
333
|
1. defaults (lowest)
|
|
329
334
|
2. app configuration
|
|
330
|
-
3.
|
|
335
|
+
3. router configuration
|
|
331
336
|
4. table configuration
|
|
332
337
|
5. column-level `cfg` values
|
|
333
338
|
6. op-specific `cfg`
|
|
@@ -367,7 +372,7 @@ This hierarchy ensures that the most specific settings always win. 🥇
|
|
|
367
372
|
When assembling values for persistence, defaults are resolved in this order:
|
|
368
373
|
|
|
369
374
|
1. Client-supplied value
|
|
370
|
-
2.
|
|
375
|
+
2. router `default_factory`
|
|
371
376
|
3. ORM default
|
|
372
377
|
4. Database `server_default`
|
|
373
378
|
5. HTTP 422 if the field is required and still missing
|
|
@@ -408,15 +413,15 @@ approved usage. These are not optional—adhering to them keeps the runtime
|
|
|
408
413
|
predictable, preserves hook lifecycle guarantees, and ensures schema
|
|
409
414
|
consistency across REST and RPC surfaces.
|
|
410
415
|
|
|
411
|
-
### 1) Never import SQLAlchemy directly or bypass Tigrbl
|
|
416
|
+
### 1) Never import SQLAlchemy directly or bypass Tigrbl routers
|
|
412
417
|
|
|
413
418
|
**Why:** Direct imports bypass Tigrbl's compatibility layer and make it
|
|
414
419
|
harder to evolve internal dependencies. Use the Tigrbl exports so your
|
|
415
|
-
code stays aligned with the framework’s versioned ASGI
|
|
420
|
+
code stays aligned with the framework’s versioned ASGI router.
|
|
416
421
|
|
|
417
422
|
✅ **Preferred:**
|
|
418
423
|
```python
|
|
419
|
-
from tigrbl import Base, TigrblApp,
|
|
424
|
+
from tigrbl import Base, TigrblApp, TigrblRouter
|
|
420
425
|
from tigrbl.types import Integer, String, Mapped
|
|
421
426
|
from tigrbl.types import Depends, HTTPException, Request
|
|
422
427
|
```
|
|
@@ -452,12 +457,12 @@ item_id = UUID(str(payload["id"]))
|
|
|
452
457
|
### 3) Use engine specs for persistence, not ad-hoc engines
|
|
453
458
|
|
|
454
459
|
**Why:** Engine specs make persistence declarative, testable, and
|
|
455
|
-
compatible with engine resolution across app,
|
|
460
|
+
compatible with engine resolution across app, router, table, and op scopes.
|
|
456
461
|
|
|
457
462
|
✅ **Preferred:**
|
|
458
463
|
```python
|
|
459
464
|
from tigrbl.engine.shortcuts import engine_spec
|
|
460
|
-
from tigrbl.engine
|
|
465
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
461
466
|
|
|
462
467
|
spec = engine_spec(kind="postgres", async_=True, host="db", name="app_db")
|
|
463
468
|
|
|
@@ -588,9 +593,9 @@ async def rotate_keys(payload, *, ctx):
|
|
|
588
593
|
|
|
589
594
|
🚫 **Avoid:**
|
|
590
595
|
```python
|
|
591
|
-
from some_framework import
|
|
596
|
+
from some_framework import routerRouter
|
|
592
597
|
|
|
593
|
-
router =
|
|
598
|
+
router = routerRouter()
|
|
594
599
|
|
|
595
600
|
@router.post("/keys/rotate")
|
|
596
601
|
async def rotate_keys(payload):
|
|
@@ -606,7 +611,7 @@ resolved deterministically by the runtime.
|
|
|
606
611
|
✅ **Preferred:**
|
|
607
612
|
```python
|
|
608
613
|
from tigrbl import hook_ctx, op_ctx, schema_ctx
|
|
609
|
-
from tigrbl.engine
|
|
614
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
610
615
|
|
|
611
616
|
@engine_ctx(kind="sqlite", mode="memory")
|
|
612
617
|
class Item(Table):
|
|
@@ -629,7 +634,7 @@ async def validate(ctx):
|
|
|
629
634
|
|
|
630
635
|
```python
|
|
631
636
|
from tigrbl.engine.shortcuts import engine_spec, prov
|
|
632
|
-
from tigrbl.
|
|
637
|
+
from tigrbl._concrete._engine import Engine, Provider
|
|
633
638
|
|
|
634
639
|
# Build an EngineSpec from a DSN string
|
|
635
640
|
spec = engine_spec("sqlite://:memory:")
|
|
@@ -656,7 +661,7 @@ provider_pg = Provider(spec_pg)
|
|
|
656
661
|
`engine_ctx` binds database configuration to different layers. It accepts a
|
|
657
662
|
DSN string, a mapping, an `EngineSpec`, a `Provider`, or an `Engine`. The
|
|
658
663
|
resolver chooses the most specific binding in the order
|
|
659
|
-
`op > table >
|
|
664
|
+
`op > table > router > app`.
|
|
660
665
|
|
|
661
666
|
#### Engine precedence 🥇
|
|
662
667
|
|
|
@@ -664,8 +669,8 @@ When engine contexts are declared at multiple scopes, Tigrbl resolves them
|
|
|
664
669
|
with strict precedence:
|
|
665
670
|
|
|
666
671
|
1. **Op level** – bindings attached directly to an operation take highest priority.
|
|
667
|
-
2. **Table/Model level** – definitions on a model or table override
|
|
668
|
-
3. **
|
|
672
|
+
2. **Table/Model level** – definitions on a model or table override router and app defaults.
|
|
673
|
+
3. **router level** – bindings on the router class apply when no model-specific context exists.
|
|
669
674
|
4. **App level** – the default engine supplied to the application is used last.
|
|
670
675
|
|
|
671
676
|
This ordering ensures that the most specific engine context always wins.
|
|
@@ -679,7 +684,7 @@ from tigrbl.engine.shortcuts import prov, engine
|
|
|
679
684
|
app = SimpleNamespace(db=prov(kind="sqlite", mode="memory"))
|
|
680
685
|
alt = SimpleNamespace(db=engine(kind="sqlite", mode="memory"))
|
|
681
686
|
|
|
682
|
-
class
|
|
687
|
+
class router:
|
|
683
688
|
db = {"kind": "sqlite", "memory": True}
|
|
684
689
|
|
|
685
690
|
class Item:
|
|
@@ -700,7 +705,7 @@ create.__tigrbl_engine_ctx__ = {
|
|
|
700
705
|
#### Decorative bindings 🎛️
|
|
701
706
|
|
|
702
707
|
```python
|
|
703
|
-
from tigrbl.engine
|
|
708
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
704
709
|
from tigrbl.engine.shortcuts import prov, engine
|
|
705
710
|
|
|
706
711
|
@engine_ctx(prov(kind="sqlite", mode="memory"))
|
|
@@ -708,7 +713,7 @@ class App:
|
|
|
708
713
|
pass
|
|
709
714
|
|
|
710
715
|
@engine_ctx(engine(kind="sqlite", mode="memory"))
|
|
711
|
-
class
|
|
716
|
+
class Decoratedrouter:
|
|
712
717
|
pass
|
|
713
718
|
|
|
714
719
|
@engine_ctx(kind="sqlite", mode="memory")
|
|
@@ -735,7 +740,7 @@ The bridge examples cover two integration styles:
|
|
|
735
740
|
* A Swarmauri `Factory` invocation during `PRE_HANDLER` via `hook_ctx`.
|
|
736
741
|
* Tigrbl default verbs (`create`, `get`, `list`, `update`, `delete`) plus a custom op.
|
|
737
742
|
* `engine_ctx` at model and operation scope.
|
|
738
|
-
* Generated
|
|
743
|
+
* Generated Openrouter and OpenRPC documents mounted from the same model bindings.
|
|
739
744
|
|
|
740
745
|
* **Smoother direct-model flow** (`swarmauri_tigrbl_bridge_smooth.py`)
|
|
741
746
|
* Uses hooks + default `create` persistence to normalize Swarmauri payloads.
|
|
@@ -26,11 +26,16 @@ A high-leverage ASGI meta-framework that turns plain SQLAlchemy models into a fu
|
|
|
26
26
|
- 🧩 Pluggable engine and provider abstractions
|
|
27
27
|
- 🚀 Built as an ASGI-native framework with Pydantic-powered schema generation
|
|
28
28
|
|
|
29
|
+
## Runtime-owned Routing Contract
|
|
30
|
+
|
|
31
|
+
For the kernel-first flow that avoids pre-runtime REST/RPC dispatching, see
|
|
32
|
+
[`RUNTIME_OWNED_ROUTING.md`](./RUNTIME_OWNED_ROUTING.md).
|
|
33
|
+
|
|
29
34
|
## Terminology 📚
|
|
30
35
|
|
|
31
36
|
- **Tenant** 🏢 – a namespace used to group related resources.
|
|
32
37
|
- **Principal** 👤 – an owner of resources, such as an individual user or an organization.
|
|
33
|
-
- **Resource** 📦 – a logical collection of data or functionality exposed by the
|
|
38
|
+
- **Resource** 📦 – a logical collection of data or functionality exposed by the router.
|
|
34
39
|
- **Engine** ⚙️ – the database connection and transaction manager backing a resource.
|
|
35
40
|
- **Model / Table** 🧱 – the ORM or database representation of a resource's records.
|
|
36
41
|
- **Column** 📏 – a field on a model that maps to a table column.
|
|
@@ -277,7 +282,7 @@ increasing order of precedence:
|
|
|
277
282
|
|
|
278
283
|
1. defaults
|
|
279
284
|
2. app config
|
|
280
|
-
3.
|
|
285
|
+
3. router config
|
|
281
286
|
4. table config
|
|
282
287
|
5. column config
|
|
283
288
|
6. operation spec
|
|
@@ -285,7 +290,7 @@ increasing order of precedence:
|
|
|
285
290
|
|
|
286
291
|
Later entries override earlier ones, so request overrides win over all other
|
|
287
292
|
sources. This can be summarized as
|
|
288
|
-
`overrides > opspec > colspecs > tabspec >
|
|
293
|
+
`overrides > opspec > colspecs > tabspec > routerspec > appspec > defaults`.
|
|
289
294
|
|
|
290
295
|
### Schema Config Precedence 🧬
|
|
291
296
|
|
|
@@ -294,7 +299,7 @@ Later layers override earlier ones, with the precedence order:
|
|
|
294
299
|
|
|
295
300
|
1. defaults (lowest)
|
|
296
301
|
2. app configuration
|
|
297
|
-
3.
|
|
302
|
+
3. router configuration
|
|
298
303
|
4. table configuration
|
|
299
304
|
5. column-level `cfg` values
|
|
300
305
|
6. op-specific `cfg`
|
|
@@ -334,7 +339,7 @@ This hierarchy ensures that the most specific settings always win. 🥇
|
|
|
334
339
|
When assembling values for persistence, defaults are resolved in this order:
|
|
335
340
|
|
|
336
341
|
1. Client-supplied value
|
|
337
|
-
2.
|
|
342
|
+
2. router `default_factory`
|
|
338
343
|
3. ORM default
|
|
339
344
|
4. Database `server_default`
|
|
340
345
|
5. HTTP 422 if the field is required and still missing
|
|
@@ -375,15 +380,15 @@ approved usage. These are not optional—adhering to them keeps the runtime
|
|
|
375
380
|
predictable, preserves hook lifecycle guarantees, and ensures schema
|
|
376
381
|
consistency across REST and RPC surfaces.
|
|
377
382
|
|
|
378
|
-
### 1) Never import SQLAlchemy directly or bypass Tigrbl
|
|
383
|
+
### 1) Never import SQLAlchemy directly or bypass Tigrbl routers
|
|
379
384
|
|
|
380
385
|
**Why:** Direct imports bypass Tigrbl's compatibility layer and make it
|
|
381
386
|
harder to evolve internal dependencies. Use the Tigrbl exports so your
|
|
382
|
-
code stays aligned with the framework’s versioned ASGI
|
|
387
|
+
code stays aligned with the framework’s versioned ASGI router.
|
|
383
388
|
|
|
384
389
|
✅ **Preferred:**
|
|
385
390
|
```python
|
|
386
|
-
from tigrbl import Base, TigrblApp,
|
|
391
|
+
from tigrbl import Base, TigrblApp, TigrblRouter
|
|
387
392
|
from tigrbl.types import Integer, String, Mapped
|
|
388
393
|
from tigrbl.types import Depends, HTTPException, Request
|
|
389
394
|
```
|
|
@@ -419,12 +424,12 @@ item_id = UUID(str(payload["id"]))
|
|
|
419
424
|
### 3) Use engine specs for persistence, not ad-hoc engines
|
|
420
425
|
|
|
421
426
|
**Why:** Engine specs make persistence declarative, testable, and
|
|
422
|
-
compatible with engine resolution across app,
|
|
427
|
+
compatible with engine resolution across app, router, table, and op scopes.
|
|
423
428
|
|
|
424
429
|
✅ **Preferred:**
|
|
425
430
|
```python
|
|
426
431
|
from tigrbl.engine.shortcuts import engine_spec
|
|
427
|
-
from tigrbl.engine
|
|
432
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
428
433
|
|
|
429
434
|
spec = engine_spec(kind="postgres", async_=True, host="db", name="app_db")
|
|
430
435
|
|
|
@@ -555,9 +560,9 @@ async def rotate_keys(payload, *, ctx):
|
|
|
555
560
|
|
|
556
561
|
🚫 **Avoid:**
|
|
557
562
|
```python
|
|
558
|
-
from some_framework import
|
|
563
|
+
from some_framework import routerRouter
|
|
559
564
|
|
|
560
|
-
router =
|
|
565
|
+
router = routerRouter()
|
|
561
566
|
|
|
562
567
|
@router.post("/keys/rotate")
|
|
563
568
|
async def rotate_keys(payload):
|
|
@@ -573,7 +578,7 @@ resolved deterministically by the runtime.
|
|
|
573
578
|
✅ **Preferred:**
|
|
574
579
|
```python
|
|
575
580
|
from tigrbl import hook_ctx, op_ctx, schema_ctx
|
|
576
|
-
from tigrbl.engine
|
|
581
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
577
582
|
|
|
578
583
|
@engine_ctx(kind="sqlite", mode="memory")
|
|
579
584
|
class Item(Table):
|
|
@@ -596,7 +601,7 @@ async def validate(ctx):
|
|
|
596
601
|
|
|
597
602
|
```python
|
|
598
603
|
from tigrbl.engine.shortcuts import engine_spec, prov
|
|
599
|
-
from tigrbl.
|
|
604
|
+
from tigrbl._concrete._engine import Engine, Provider
|
|
600
605
|
|
|
601
606
|
# Build an EngineSpec from a DSN string
|
|
602
607
|
spec = engine_spec("sqlite://:memory:")
|
|
@@ -623,7 +628,7 @@ provider_pg = Provider(spec_pg)
|
|
|
623
628
|
`engine_ctx` binds database configuration to different layers. It accepts a
|
|
624
629
|
DSN string, a mapping, an `EngineSpec`, a `Provider`, or an `Engine`. The
|
|
625
630
|
resolver chooses the most specific binding in the order
|
|
626
|
-
`op > table >
|
|
631
|
+
`op > table > router > app`.
|
|
627
632
|
|
|
628
633
|
#### Engine precedence 🥇
|
|
629
634
|
|
|
@@ -631,8 +636,8 @@ When engine contexts are declared at multiple scopes, Tigrbl resolves them
|
|
|
631
636
|
with strict precedence:
|
|
632
637
|
|
|
633
638
|
1. **Op level** – bindings attached directly to an operation take highest priority.
|
|
634
|
-
2. **Table/Model level** – definitions on a model or table override
|
|
635
|
-
3. **
|
|
639
|
+
2. **Table/Model level** – definitions on a model or table override router and app defaults.
|
|
640
|
+
3. **router level** – bindings on the router class apply when no model-specific context exists.
|
|
636
641
|
4. **App level** – the default engine supplied to the application is used last.
|
|
637
642
|
|
|
638
643
|
This ordering ensures that the most specific engine context always wins.
|
|
@@ -646,7 +651,7 @@ from tigrbl.engine.shortcuts import prov, engine
|
|
|
646
651
|
app = SimpleNamespace(db=prov(kind="sqlite", mode="memory"))
|
|
647
652
|
alt = SimpleNamespace(db=engine(kind="sqlite", mode="memory"))
|
|
648
653
|
|
|
649
|
-
class
|
|
654
|
+
class router:
|
|
650
655
|
db = {"kind": "sqlite", "memory": True}
|
|
651
656
|
|
|
652
657
|
class Item:
|
|
@@ -667,7 +672,7 @@ create.__tigrbl_engine_ctx__ = {
|
|
|
667
672
|
#### Decorative bindings 🎛️
|
|
668
673
|
|
|
669
674
|
```python
|
|
670
|
-
from tigrbl.engine
|
|
675
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
671
676
|
from tigrbl.engine.shortcuts import prov, engine
|
|
672
677
|
|
|
673
678
|
@engine_ctx(prov(kind="sqlite", mode="memory"))
|
|
@@ -675,7 +680,7 @@ class App:
|
|
|
675
680
|
pass
|
|
676
681
|
|
|
677
682
|
@engine_ctx(engine(kind="sqlite", mode="memory"))
|
|
678
|
-
class
|
|
683
|
+
class Decoratedrouter:
|
|
679
684
|
pass
|
|
680
685
|
|
|
681
686
|
@engine_ctx(kind="sqlite", mode="memory")
|
|
@@ -702,7 +707,7 @@ The bridge examples cover two integration styles:
|
|
|
702
707
|
* A Swarmauri `Factory` invocation during `PRE_HANDLER` via `hook_ctx`.
|
|
703
708
|
* Tigrbl default verbs (`create`, `get`, `list`, `update`, `delete`) plus a custom op.
|
|
704
709
|
* `engine_ctx` at model and operation scope.
|
|
705
|
-
* Generated
|
|
710
|
+
* Generated Openrouter and OpenRPC documents mounted from the same model bindings.
|
|
706
711
|
|
|
707
712
|
* **Smoother direct-model flow** (`swarmauri_tigrbl_bridge_smooth.py`)
|
|
708
713
|
* Uses hooks + default `create` persistence to normalize Swarmauri payloads.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tigrbl"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.17.dev2"
|
|
4
4
|
description = "A modern pure ASGI/WSGI Python framework for building schema-first REST and JSON-RPC APIs with SQLAlchemy models, typed validation, lifecycle hooks, and engine extension support."
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
readme = "README.md"
|
|
@@ -48,6 +48,7 @@ tests = [
|
|
|
48
48
|
|
|
49
49
|
[tool.uv.sources]
|
|
50
50
|
tigrbl-tests = { workspace = true }
|
|
51
|
+
tigrbl_client = { workspace = true }
|
|
51
52
|
|
|
52
53
|
[tool.pytest.ini_options]
|
|
53
54
|
norecursedirs = ["combined", "scripts"]
|
|
@@ -81,6 +82,7 @@ packages = [
|
|
|
81
82
|
|
|
82
83
|
[dependency-groups]
|
|
83
84
|
dev = [
|
|
85
|
+
"tigrbl_client",
|
|
84
86
|
"pytest>=8.0",
|
|
85
87
|
"pytest-asyncio>=0.24.0",
|
|
86
88
|
"pytest-xdist>=3.6.1",
|
|
@@ -86,7 +86,7 @@ Some objects also expose optional helpers:
|
|
|
86
86
|
| Column | `column_spec.py` | `_column.py` | — | `shortcuts.py` | `collect.py` | — | — |
|
|
87
87
|
| Engine | `engine_spec.py` | `_engine.py` | `decorators.py` | `shortcuts.py` | `collect.py` | `resolver.py` | `builders.py` |
|
|
88
88
|
| Op | `types.py` | `_op.py` | `decorators.py` | — | `collect.py` | — | — |
|
|
89
|
-
| API | `
|
|
89
|
+
| API | `router_spec.py` | `_api.py` | — | `shortcuts.py` | — | — | — |
|
|
90
90
|
| App | `app_spec.py` | `_app.py` | — | `shortcuts.py` | — | — | — |
|
|
91
91
|
| Table | `table_spec.py` | `_table.py` | — | `shortcuts.py` | — | — | — |
|
|
92
92
|
|
|
@@ -5,24 +5,12 @@ Tigrbl – public API
|
|
|
5
5
|
OpSpec-centric building blocks to bind models, wire schemas/handlers/hooks,
|
|
6
6
|
register RPC & REST, and (optionally) mount JSON-RPC and diagnostics.
|
|
7
7
|
|
|
8
|
-
Quick start:
|
|
9
|
-
from tigrbl import include_model, build_jsonrpc_router, mount_diagnostics
|
|
10
|
-
from tigrbl import OpSpec, hook_ctx, op_ctx, alias_ctx, schema_ctx, SchemaRef
|
|
11
|
-
|
|
12
|
-
include_model(api, User, app=asgi_app)
|
|
13
|
-
app.include_router(build_jsonrpc_router(api), prefix="/rpc")
|
|
14
|
-
app.include_router(mount_diagnostics(api), prefix="/system")
|
|
15
|
-
|
|
16
|
-
# Example: custom op using an existing schema
|
|
17
|
-
@op_ctx(alias="search", target="custom", arity="collection",
|
|
18
|
-
request_schema=SchemaRef("Search", "in"),
|
|
19
|
-
response_schema=SchemaRef("Search", "out"))
|
|
20
|
-
def search(cls, ctx):
|
|
21
|
-
...
|
|
22
8
|
"""
|
|
23
9
|
|
|
24
10
|
from __future__ import annotations
|
|
25
11
|
|
|
12
|
+
from ._concrete import Router
|
|
13
|
+
|
|
26
14
|
# ── OpSpec (source of truth) ───────────────────────────────────────────────────
|
|
27
15
|
from .op import (
|
|
28
16
|
OpSpec,
|
|
@@ -40,14 +28,13 @@ from .schema.types import SchemaRef, SchemaArg
|
|
|
40
28
|
# ── Ctx-only decorators (new surface; replaces legacy ops.decorators) ─────────
|
|
41
29
|
|
|
42
30
|
from .op import alias_ctx, op_ctx, alias, op_alias
|
|
43
|
-
from .hook import hook_ctx
|
|
44
|
-
from .engine
|
|
45
|
-
from .schema
|
|
46
|
-
from .
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
from .bindings import (
|
|
31
|
+
from .decorators.hook import hook_ctx
|
|
32
|
+
from .decorators.engine import engine_ctx
|
|
33
|
+
from .decorators.schema import schema_ctx
|
|
34
|
+
from .decorators.response import response_ctx
|
|
35
|
+
|
|
36
|
+
# ── Bindings (model + Router orchestration) ───────────────────────────────────────
|
|
37
|
+
from .mapping import (
|
|
51
38
|
bind,
|
|
52
39
|
rebind,
|
|
53
40
|
build_schemas,
|
|
@@ -55,8 +42,8 @@ from .bindings import (
|
|
|
55
42
|
build_handlers,
|
|
56
43
|
register_rpc,
|
|
57
44
|
build_rest,
|
|
58
|
-
|
|
59
|
-
|
|
45
|
+
include_table,
|
|
46
|
+
include_tables,
|
|
60
47
|
rpc_call,
|
|
61
48
|
)
|
|
62
49
|
|
|
@@ -67,7 +54,10 @@ from .runtime.executor import _invoke
|
|
|
67
54
|
from .schema import _build_schema, _build_list_params, get_schema
|
|
68
55
|
|
|
69
56
|
# ── Transport & Diagnostics (optional) ─────────────────────────────────────────
|
|
70
|
-
from .
|
|
57
|
+
from ._concrete._request import Request
|
|
58
|
+
from .security import Depends
|
|
59
|
+
from ._concrete._json_response import JSONResponse
|
|
60
|
+
from ._concrete._response import Response
|
|
71
61
|
from .system import mount_diagnostics
|
|
72
62
|
|
|
73
63
|
# ── DB/bootstrap helpers (infra; optional) ─────────────────────────────────────
|
|
@@ -75,22 +65,62 @@ from .ddl import ensure_schemas, register_sqlite_attach, bootstrap_dbschema
|
|
|
75
65
|
|
|
76
66
|
# ── Config constants (defaults used by REST) ───────────────────────────────────
|
|
77
67
|
from .config.constants import DEFAULT_HTTP_METHODS
|
|
78
|
-
from .
|
|
79
|
-
from .
|
|
80
|
-
|
|
81
|
-
from .
|
|
68
|
+
from ._concrete.tigrbl_app import TigrblApp
|
|
69
|
+
from ._concrete.tigrbl_router import TigrblRouter
|
|
70
|
+
from .decorators.router import route_ctx
|
|
71
|
+
from .orm.tables import TableBase
|
|
82
72
|
from .op import Op
|
|
83
|
-
from .
|
|
73
|
+
from .shortcuts.op import op
|
|
74
|
+
from .engine import resolver
|
|
75
|
+
from ._concrete._security.api_key import APIKey
|
|
76
|
+
from ._concrete._security.http_bearer import HTTPBearer
|
|
77
|
+
from ._concrete._security.mutual_tls import MutualTLS
|
|
78
|
+
from ._concrete._security.oauth2 import OAuth2
|
|
79
|
+
from ._concrete._security.openid_connect import OpenIdConnect
|
|
80
|
+
from .runtime.status.exceptions import HTTPException
|
|
81
|
+
from ._spec import (
|
|
82
|
+
AppSpec,
|
|
83
|
+
ColumnSpec,
|
|
84
|
+
EngineSpec,
|
|
85
|
+
FieldSpec,
|
|
86
|
+
ForeignKeySpec,
|
|
87
|
+
IOSpec,
|
|
88
|
+
RequestSpec,
|
|
89
|
+
ResponseSpec,
|
|
90
|
+
RouterSpec,
|
|
91
|
+
SchemaSpec,
|
|
92
|
+
SessionSpec,
|
|
93
|
+
StorageSpec,
|
|
94
|
+
StorageTransform,
|
|
95
|
+
TableRegistrySpec,
|
|
96
|
+
TableSpec,
|
|
97
|
+
TemplateSpec,
|
|
98
|
+
)
|
|
99
|
+
from ._base import ForeignKeyBase, HookBase, TableRegistryBase
|
|
100
|
+
from ._concrete import (
|
|
101
|
+
App,
|
|
102
|
+
Column,
|
|
103
|
+
ForeignKey,
|
|
104
|
+
Hook,
|
|
105
|
+
Route,
|
|
106
|
+
Schema,
|
|
107
|
+
Table,
|
|
108
|
+
TableRegistry,
|
|
109
|
+
)
|
|
110
|
+
from .decorators import HOOK_DECLS_ATTR, middleware, middlewares
|
|
84
111
|
|
|
85
112
|
|
|
86
113
|
__all__: list[str] = []
|
|
87
114
|
|
|
88
115
|
__all__ += [
|
|
89
116
|
"TigrblApp",
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
117
|
+
"TigrblRouter",
|
|
118
|
+
"Router",
|
|
119
|
+
"Depends",
|
|
120
|
+
"HTTPException",
|
|
121
|
+
"TableBase",
|
|
93
122
|
"Op",
|
|
123
|
+
"op",
|
|
94
124
|
"HTTPBearer",
|
|
95
125
|
"APIKey",
|
|
96
126
|
"OAuth2",
|
|
@@ -114,6 +144,7 @@ __all__ += [
|
|
|
114
144
|
# Ctx-only decorators
|
|
115
145
|
"alias_ctx",
|
|
116
146
|
"op_ctx",
|
|
147
|
+
"route_ctx",
|
|
117
148
|
"hook_ctx",
|
|
118
149
|
"schema_ctx",
|
|
119
150
|
"response_ctx",
|
|
@@ -129,8 +160,8 @@ __all__ += [
|
|
|
129
160
|
"build_handlers",
|
|
130
161
|
"register_rpc",
|
|
131
162
|
"build_rest",
|
|
132
|
-
"
|
|
133
|
-
"
|
|
163
|
+
"include_table",
|
|
164
|
+
"include_tables",
|
|
134
165
|
"rpc_call",
|
|
135
166
|
# Runtime
|
|
136
167
|
"_invoke",
|
|
@@ -139,7 +170,6 @@ __all__ += [
|
|
|
139
170
|
"_build_list_params",
|
|
140
171
|
"get_schema",
|
|
141
172
|
# Transport / Diagnostics
|
|
142
|
-
"build_jsonrpc_router",
|
|
143
173
|
"mount_diagnostics",
|
|
144
174
|
# DB/infra
|
|
145
175
|
"ensure_schemas",
|
|
@@ -147,4 +177,40 @@ __all__ += [
|
|
|
147
177
|
"bootstrap_dbschema",
|
|
148
178
|
# Config
|
|
149
179
|
"DEFAULT_HTTP_METHODS",
|
|
180
|
+
"Request",
|
|
181
|
+
"Depends",
|
|
182
|
+
"Response",
|
|
183
|
+
"JSONResponse",
|
|
184
|
+
"resolver",
|
|
185
|
+
]
|
|
186
|
+
__all__ += [
|
|
187
|
+
"AppSpec",
|
|
188
|
+
"RouterSpec",
|
|
189
|
+
"TableSpec",
|
|
190
|
+
"TableRegistrySpec",
|
|
191
|
+
"ColumnSpec",
|
|
192
|
+
"FieldSpec",
|
|
193
|
+
"IOSpec",
|
|
194
|
+
"StorageSpec",
|
|
195
|
+
"StorageTransform",
|
|
196
|
+
"ForeignKeySpec",
|
|
197
|
+
"RequestSpec",
|
|
198
|
+
"SchemaSpec",
|
|
199
|
+
"SessionSpec",
|
|
200
|
+
"EngineSpec",
|
|
201
|
+
"TemplateSpec",
|
|
202
|
+
"ForeignKeyBase",
|
|
203
|
+
"HookBase",
|
|
204
|
+
"TableRegistryBase",
|
|
205
|
+
"App",
|
|
206
|
+
"Table",
|
|
207
|
+
"Column",
|
|
208
|
+
"Route",
|
|
209
|
+
"Schema",
|
|
210
|
+
"Hook",
|
|
211
|
+
"ForeignKey",
|
|
212
|
+
"TableRegistry",
|
|
213
|
+
"HOOK_DECLS_ATTR",
|
|
214
|
+
"middleware",
|
|
215
|
+
"middlewares",
|
|
150
216
|
]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Base class implementations for tigrbl internals."""
|
|
2
|
+
|
|
3
|
+
from ._hook_base import HookBase
|
|
4
|
+
from ._storage import ForeignKeyBase
|
|
5
|
+
from ._op_base import OpBase
|
|
6
|
+
from ._request_base import RequestBase
|
|
7
|
+
from ._schema_base import SchemaBase
|
|
8
|
+
from ._session_abc import SessionABC
|
|
9
|
+
from ._session_base import TigrblSessionBase
|
|
10
|
+
from ._table_base import TableBase
|
|
11
|
+
from ._table_registry_base import TableRegistryBase
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"HookBase",
|
|
16
|
+
"ForeignKeyBase",
|
|
17
|
+
"OpBase",
|
|
18
|
+
"RequestBase",
|
|
19
|
+
"SchemaBase",
|
|
20
|
+
"SessionABC",
|
|
21
|
+
"TigrblSessionBase",
|
|
22
|
+
"TableBase",
|
|
23
|
+
"TableRegistryBase",
|
|
24
|
+
]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Base runtime hook wrapper for Tigrbl v3."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Iterable, Optional, Union
|
|
7
|
+
|
|
8
|
+
from ..hook.types import HookPhase, StepFn
|
|
9
|
+
from .._spec.hook_spec import HookSpec
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True, slots=True)
|
|
13
|
+
class HookBase(HookSpec):
|
|
14
|
+
"""Base hook bound to a phase and one or more ops."""
|
|
15
|
+
|
|
16
|
+
phase: HookPhase
|
|
17
|
+
fn: StepFn
|
|
18
|
+
ops: Union[str, Iterable[str]] = "*"
|
|
19
|
+
order: int = 0
|
|
20
|
+
when: Optional[object] = None
|
|
21
|
+
name: Optional[str] = None
|
|
22
|
+
description: Optional[str] = None
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
__all__ = ["HookBase"]
|
tigrbl-0.3.16.dev4/tigrbl/middlewares/base.py → tigrbl-0.3.17.dev2/tigrbl/_base/_middleware_base.py
RENAMED
|
@@ -5,16 +5,15 @@ from __future__ import annotations
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
from urllib.parse import urlencode
|
|
7
7
|
|
|
8
|
-
from tigrbl.
|
|
9
|
-
from tigrbl.
|
|
10
|
-
from tigrbl.
|
|
11
|
-
from tigrbl.
|
|
8
|
+
from tigrbl._concrete._request import Request
|
|
9
|
+
from tigrbl._concrete._request_adapters import request_from_asgi
|
|
10
|
+
from tigrbl._concrete._response import Response
|
|
11
|
+
from tigrbl.runtime.atoms.egress.asgi_send import finalize_transport_response
|
|
12
12
|
|
|
13
|
-
from .
|
|
14
|
-
from .spec import ASGIReceive, ASGISend, Message
|
|
13
|
+
from .._spec.middleware_spec import MiddlewareSpec, ASGIReceive, ASGISend, Message
|
|
15
14
|
|
|
16
15
|
|
|
17
|
-
class
|
|
16
|
+
class MiddlewareBase(MiddlewareSpec):
|
|
18
17
|
"""Base middleware for intercepting HTTP requests in ASGI mode."""
|
|
19
18
|
|
|
20
19
|
async def dispatch(
|
|
@@ -139,4 +138,4 @@ class BaseHTTPMiddleware(Middleware):
|
|
|
139
138
|
)
|
|
140
139
|
|
|
141
140
|
|
|
142
|
-
__all__ = ["
|
|
141
|
+
__all__ = ["MiddlewareBase"]
|