tigrbl 0.3.16.dev5__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.dev5 → tigrbl-0.3.17.dev2}/PKG-INFO +11 -6
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/README.md +10 -5
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/pyproject.toml +3 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/README.md +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/__init__.py +94 -15
- 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.dev5/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.dev5/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.dev5/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.dev5/tigrbl/table/_base.py → tigrbl-0.3.17.dev2/tigrbl/_base/_table_base.py +13 -9
- 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.16.dev5/tigrbl/op/alias.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_alias.py +1 -1
- 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.dev5/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_column.py +4 -4
- tigrbl-0.3.16.dev5/tigrbl/middlewares/cors.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_cors_middleware.py +1 -65
- {tigrbl-0.3.16.dev5/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.dev5/tigrbl/middlewares/middleware.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_middleware.py +12 -4
- {tigrbl-0.3.16.dev5/tigrbl/op → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_op.py +4 -4
- tigrbl-0.3.16.dev5/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.dev5/tigrbl/requests → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_request.py +22 -3
- tigrbl-0.3.17.dev2/tigrbl/_concrete/_response.py +35 -0
- {tigrbl-0.3.16.dev5/tigrbl/router → 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.dev5/tigrbl/schema → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_schema.py +3 -2
- {tigrbl-0.3.16.dev5/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/api_key.py +1 -1
- {tigrbl-0.3.16.dev5/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/http_bearer.py +1 -1
- {tigrbl-0.3.16.dev5/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/mutual_tls.py +1 -1
- {tigrbl-0.3.16.dev5/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/oauth2.py +1 -1
- {tigrbl-0.3.16.dev5/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/openid_connect.py +1 -1
- tigrbl-0.3.16.dev5/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.16.dev5/tigrbl/app → tigrbl-0.3.17.dev2/tigrbl/_concrete}/tigrbl_app.py +317 -118
- {tigrbl-0.3.16.dev5/tigrbl/router → tigrbl-0.3.17.dev2/tigrbl/_concrete}/tigrbl_router.py +162 -106
- tigrbl-0.3.17.dev2/tigrbl/_spec/__init__.py +67 -0
- {tigrbl-0.3.16.dev5/tigrbl/op → tigrbl-0.3.17.dev2/tigrbl/_spec}/alias_spec.py +1 -1
- 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.dev5/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/column_spec.py +3 -3
- {tigrbl-0.3.16.dev5/tigrbl/engine → tigrbl-0.3.17.dev2/tigrbl/_spec}/engine_spec.py +8 -7
- {tigrbl-0.3.16.dev5/tigrbl/hook → tigrbl-0.3.17.dev2/tigrbl/_spec}/hook_spec.py +1 -1
- {tigrbl-0.3.16.dev5/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/io_spec.py +1 -1
- {tigrbl-0.3.16.dev5/tigrbl/op → tigrbl-0.3.17.dev2/tigrbl/_spec}/op_spec.py +23 -3
- tigrbl-0.3.17.dev2/tigrbl/_spec/request_spec.py +19 -0
- tigrbl-0.3.16.dev5/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.dev5/tigrbl/router → tigrbl-0.3.17.dev2/tigrbl/_spec}/router_spec.py +7 -12
- {tigrbl-0.3.16.dev5/tigrbl/schema → tigrbl-0.3.17.dev2/tigrbl/_spec}/schema_spec.py +2 -2
- tigrbl-0.3.16.dev5/tigrbl/session/spec.py → tigrbl-0.3.17.dev2/tigrbl/_spec/session_spec.py +48 -0
- tigrbl-0.3.17.dev2/tigrbl/_spec/shortcuts_spec.py +8 -0
- {tigrbl-0.3.16.dev5/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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/config/__init__.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/config/constants.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/model.py +7 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/ops.py +65 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/ddl/__init__.py +106 -80
- tigrbl-0.3.17.dev2/tigrbl/decorators/__init__.py +48 -0
- tigrbl-0.3.16.dev5/tigrbl/engine/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/engine.py +4 -4
- tigrbl-0.3.16.dev5/tigrbl/hook/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/hook.py +4 -4
- tigrbl-0.3.16.dev5/tigrbl/middlewares/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/middlewares.py +1 -1
- tigrbl-0.3.16.dev5/tigrbl/op/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/op.py +51 -20
- tigrbl-0.3.16.dev5/tigrbl/responses/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/response.py +1 -1
- tigrbl-0.3.17.dev2/tigrbl/decorators/rest.py +30 -0
- tigrbl-0.3.16.dev5/tigrbl/router/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/router.py +3 -3
- tigrbl-0.3.16.dev5/tigrbl/session/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/session.py +1 -1
- 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.dev5 → 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.dev5/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.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/columns.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/mapping/context.py +48 -0
- tigrbl-0.3.16.dev5/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.dev5/tigrbl/engine/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/engine_resolver.py +23 -2
- {tigrbl-0.3.16.dev5/tigrbl/bindings/schemas → tigrbl-0.3.17.dev2/tigrbl/mapping/handlers}/__init__.py +2 -2
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/builder.py +4 -4
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/ctx.py +14 -2
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/identifiers.py +2 -2
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/namespaces.py +2 -2
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/steps.py +5 -6
- tigrbl-0.3.16.dev5/tigrbl/hook/mro_collect.py → tigrbl-0.3.17.dev2/tigrbl/mapping/hook_mro_collect.py +29 -6
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/hooks.py +20 -6
- 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.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/model_helpers.py +19 -7
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/model_registry.py +4 -4
- tigrbl-0.3.17.dev2/tigrbl/mapping/op_mro_collect.py +136 -0
- tigrbl-0.3.16.dev5/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.dev5/tigrbl/responses/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/responses_resolver.py +1 -1
- {tigrbl-0.3.16.dev5/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.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/collection.py +27 -82
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/common.py +35 -48
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/helpers.py +3 -14
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/io.py +6 -4
- tigrbl-0.3.17.dev2/tigrbl/mapping/rest/member.py +200 -0
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/router.py +6 -29
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/routing.py +15 -40
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/router/common.py +13 -21
- tigrbl-0.3.17.dev2/tigrbl/mapping/router/include.py +466 -0
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/router/resource_proxy.py +37 -55
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/router/rpc.py +53 -12
- tigrbl-0.3.16.dev5/tigrbl/router/mro_collect.py → tigrbl-0.3.17.dev2/tigrbl/mapping/router_mro_collect.py +3 -3
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rpc.py +143 -33
- tigrbl-0.3.17.dev2/tigrbl/mapping/runtime_routes.py +293 -0
- {tigrbl-0.3.16.dev5/tigrbl/bindings/handlers → tigrbl-0.3.17.dev2/tigrbl/mapping/schemas}/__init__.py +2 -2
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/schemas/builder.py +5 -5
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/schemas/defaults.py +3 -3
- {tigrbl-0.3.16.dev5/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.dev5 → 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.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/op/types.py +4 -20
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/bound.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/hierarchy.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/key_digest.py +2 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/lifecycle.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/locks.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/ownable.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/principals.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/tenant_bound.py +1 -1
- {tigrbl-0.3.16.dev5 → 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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/audit.py +2 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/client.py +2 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/group.py +2 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/org.py +2 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/rbac.py +5 -5
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/status.py +2 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/tenant.py +2 -2
- {tigrbl-0.3.16.dev5 → 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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/README.md +52 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/__init__.py +8 -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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/paired_gen.py +5 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/headers_from_payload.py +2 -2
- {tigrbl-0.3.16.dev5 → 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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/renderer.py +4 -4
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/template.py +1 -1
- {tigrbl-0.3.16.dev5 → 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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/build_in.py +123 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/build_out.py +12 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/dump.py +66 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/validate_in.py +32 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/events.py +214 -30
- {tigrbl-0.3.16.dev5/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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/invoke.py +102 -10
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/types.py +54 -2
- 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.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/kernel/__init__.py +8 -3
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/kernel/atoms.py +64 -19
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/kernel/cache.py +1 -1
- 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.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/kernel/opview_compiler.py +6 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/payload.py +64 -0
- tigrbl-0.3.17.dev2/tigrbl/runtime/kernel.py +667 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/labels.py +17 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/ordering.py +73 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/converters.py +9 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/utils.py +1 -1
- {tigrbl-0.3.16.dev5 → 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.dev5 → 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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/list_params.py +1 -1
- {tigrbl-0.3.16.dev5 → 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.dev5/tigrbl/app/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/app.py +7 -7
- tigrbl-0.3.16.dev5/tigrbl/column/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/column.py +5 -5
- tigrbl-0.3.16.dev5/tigrbl/engine/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/engine.py +2 -2
- tigrbl-0.3.16.dev5/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.dev5/tigrbl/responses/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/responses.py +8 -10
- tigrbl-0.3.16.dev5/tigrbl/router/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/router.py +3 -17
- tigrbl-0.3.16.dev5/tigrbl/schema/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/schema.py +3 -3
- tigrbl-0.3.16.dev5/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.dev5 → 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.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/hookz.py +2 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/kernelz.py +3 -3
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/methodz.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/system/diagnostics/router.py +208 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/utils.py +27 -15
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/lens.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/helpers.py +2 -2
- tigrbl-0.3.17.dev2/tigrbl/system/docs/openapi/mount.py +85 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/schema.py +20 -2
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openrpc.py +29 -3
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/swagger.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/favicon/__init__.py +28 -18
- 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.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/transport/jsonrpc/helpers.py +1 -44
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/transport/rest/aggregator.py +8 -8
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/__init__.py +42 -25
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/authn_abc.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/op_config_provider.py +1 -1
- {tigrbl-0.3.16.dev5 → 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.dev5/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.dev5/tigrbl/app/_app.py +0 -133
- tigrbl-0.3.16.dev5/tigrbl/app/_model_registry.py +0 -67
- tigrbl-0.3.16.dev5/tigrbl/app/app_spec.py +0 -44
- tigrbl-0.3.16.dev5/tigrbl/app/mro_collect.py +0 -106
- tigrbl-0.3.16.dev5/tigrbl/app/transport.py +0 -154
- tigrbl-0.3.16.dev5/tigrbl/bindings/__init__.py +0 -73
- tigrbl-0.3.16.dev5/tigrbl/bindings/model.py +0 -205
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/attach.py +0 -34
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/member.py +0 -337
- tigrbl-0.3.16.dev5/tigrbl/bindings/router/__init__.py +0 -15
- tigrbl-0.3.16.dev5/tigrbl/bindings/router/include.py +0 -277
- tigrbl-0.3.16.dev5/tigrbl/column/__init__.py +0 -75
- tigrbl-0.3.16.dev5/tigrbl/column/mro_collect.py +0 -59
- tigrbl-0.3.16.dev5/tigrbl/decorators.py +0 -17
- tigrbl-0.3.16.dev5/tigrbl/deps/__init__.py +0 -23
- tigrbl-0.3.16.dev5/tigrbl/deps/jinja.py +0 -27
- tigrbl-0.3.16.dev5/tigrbl/engine/__init__.py +0 -47
- tigrbl-0.3.16.dev5/tigrbl/engine/bind.py +0 -38
- tigrbl-0.3.16.dev5/tigrbl/engine/collect.py +0 -116
- tigrbl-0.3.16.dev5/tigrbl/headers/__init__.py +0 -3
- tigrbl-0.3.16.dev5/tigrbl/hook/__init__.py +0 -23
- tigrbl-0.3.16.dev5/tigrbl/hook/_hook.py +0 -22
- tigrbl-0.3.16.dev5/tigrbl/middlewares/__init__.py +0 -37
- tigrbl-0.3.16.dev5/tigrbl/op/__init__.py +0 -54
- tigrbl-0.3.16.dev5/tigrbl/op/collect.py +0 -11
- tigrbl-0.3.16.dev5/tigrbl/op/mro_collect.py +0 -97
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/_base.py +0 -8
- tigrbl-0.3.16.dev5/tigrbl/requests/__init__.py +0 -5
- tigrbl-0.3.16.dev5/tigrbl/responses/README.md +0 -34
- tigrbl-0.3.16.dev5/tigrbl/responses/__init__.py +0 -52
- tigrbl-0.3.16.dev5/tigrbl/responses/_transport.py +0 -32
- tigrbl-0.3.16.dev5/tigrbl/responses/bind.py +0 -12
- tigrbl-0.3.16.dev5/tigrbl/rest/__init__.py +0 -27
- tigrbl-0.3.16.dev5/tigrbl/router/__init__.py +0 -23
- tigrbl-0.3.16.dev5/tigrbl/router/_router.py +0 -422
- tigrbl-0.3.16.dev5/tigrbl/router/_routing.py +0 -143
- tigrbl-0.3.16.dev5/tigrbl/router/resolve.py +0 -151
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/dep/extra.py +0 -21
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/dep/security.py +0 -21
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/render.py +0 -36
- tigrbl-0.3.16.dev5/tigrbl/runtime/executor/helpers.py +0 -88
- tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/core.py +0 -226
- tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/models.py +0 -27
- tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/payload.py +0 -74
- tigrbl-0.3.16.dev5/tigrbl/schema/__init__.py +0 -38
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/compat.py +0 -16
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/helpers.py +0 -51
- tigrbl-0.3.16.dev5/tigrbl/security/__init__.py +0 -63
- tigrbl-0.3.16.dev5/tigrbl/security/schemes/__init__.py +0 -19
- tigrbl-0.3.16.dev5/tigrbl/session/README.md +0 -14
- tigrbl-0.3.16.dev5/tigrbl/session/__init__.py +0 -28
- tigrbl-0.3.16.dev5/tigrbl/session/abc.py +0 -76
- tigrbl-0.3.16.dev5/tigrbl/session/shortcuts.py +0 -50
- tigrbl-0.3.16.dev5/tigrbl/shortcuts.py +0 -22
- tigrbl-0.3.16.dev5/tigrbl/specs.py +0 -44
- tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/compat.py +0 -8
- tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/healthz.py +0 -41
- tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/router.py +0 -74
- tigrbl-0.3.16.dev5/tigrbl/system/docs/openapi/mount.py +0 -30
- tigrbl-0.3.16.dev5/tigrbl/table/__init__.py +0 -9
- tigrbl-0.3.16.dev5/tigrbl/table/_table.py +0 -54
- tigrbl-0.3.16.dev5/tigrbl/table/mro_collect.py +0 -86
- tigrbl-0.3.16.dev5/tigrbl/table/table_spec.py +0 -37
- tigrbl-0.3.16.dev5/tigrbl/transport/__init__.py +0 -93
- tigrbl-0.3.16.dev5/tigrbl/transport/dispatch.py +0 -175
- tigrbl-0.3.16.dev5/tigrbl/transport/jsonrpc/__init__.py +0 -20
- tigrbl-0.3.16.dev5/tigrbl/transport/jsonrpc/dispatcher.py +0 -466
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/LICENSE +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/security/schemes/_base.py → /tigrbl-0.3.17.dev2/tigrbl/_base/_security_base.py +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/transport/background.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_background.py +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/headers/_header.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_headers.py +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/transport/httpx.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_httpx.py +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/requests/adapters.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_request_adapters.py +0 -0
- {tigrbl-0.3.16.dev5/tigrbl/security → tigrbl-0.3.17.dev2/tigrbl/_concrete}/dependencies.py +0 -0
- {tigrbl-0.3.16.dev5/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/field_spec.py +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/middlewares/spec.py → /tigrbl-0.3.17.dev2/tigrbl/_spec/middleware_spec.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/column/README.md +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/core.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/jsonhints.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/planning.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/types.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/utils.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/config/defaults.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/bulk.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/db.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/enum.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/filters.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/normalize.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/params.py +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/schema/decorators.py → /tigrbl-0.3.17.dev2/tigrbl/decorators/schema.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/docs/verbosity.md +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/engine/builders.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/engine/capabilities.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/engine/docs/PLUGINS.md +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/engine/plugins.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/engine/registry.py +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/config/resolver.py → /tigrbl-0.3.17.dev2/tigrbl/mapping/config_resolver.py +0 -0
- {tigrbl-0.3.16.dev5/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/io_headers.py +0 -0
- {tigrbl-0.3.16.dev5/tigrbl/app → tigrbl-0.3.17.dev2/tigrbl/middlewares}/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/middlewares/compose.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/_RowBound.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/bootstrappable.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/edges.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/fields.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/markers.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/operations.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/upsertable.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/utils.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/dep/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/paired_post.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/paired_pre.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/out/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/out/masking.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/refresh/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/refresh/demand.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/assemble.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/negotiation.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/collect_in.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/collect_out.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/storage/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/storage/to_stored.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/context.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/guards.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/opview.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/exceptions.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/mappings.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/runtime/trace.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/cache.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/extras.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/schema/types.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/schema/utils.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/metadata.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/favicon/assets/favicon.svg +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/system/uvicorn.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/transport/jsonrpc/models.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/transport/rest/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/allow_anon_provider.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/nested_path_provider.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/op.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/op_verb_alias_provider.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/request_extras_provider.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/response_extras_provider.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17.dev2}/tigrbl/types/table_config_provider.py +0 -0
- {tigrbl-0.3.16.dev5/tigrbl/deps → tigrbl-0.3.17.dev2/tigrbl/vendor}/pydantic.py +0 -0
- {tigrbl-0.3.16.dev5/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,6 +59,11 @@ 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.
|
|
@@ -457,7 +462,7 @@ compatible with engine resolution across app, router, table, and op scopes.
|
|
|
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
|
|
|
@@ -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
|
|
|
@@ -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"))
|
|
@@ -26,6 +26,11 @@ 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.
|
|
@@ -424,7 +429,7 @@ compatible with engine resolution across app, router, table, and op scopes.
|
|
|
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
|
|
|
@@ -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
|
|
|
@@ -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"))
|
|
@@ -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
|
-
|
|
|
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
|
|
|
@@ -9,6 +9,8 @@ register RPC & REST, and (optionally) mount JSON-RPC and diagnostics.
|
|
|
9
9
|
|
|
10
10
|
from __future__ import annotations
|
|
11
11
|
|
|
12
|
+
from ._concrete import Router
|
|
13
|
+
|
|
12
14
|
# ── OpSpec (source of truth) ───────────────────────────────────────────────────
|
|
13
15
|
from .op import (
|
|
14
16
|
OpSpec,
|
|
@@ -26,14 +28,13 @@ from .schema.types import SchemaRef, SchemaArg
|
|
|
26
28
|
# ── Ctx-only decorators (new surface; replaces legacy ops.decorators) ─────────
|
|
27
29
|
|
|
28
30
|
from .op import alias_ctx, op_ctx, alias, op_alias
|
|
29
|
-
from .hook import hook_ctx
|
|
30
|
-
from .engine
|
|
31
|
-
from .schema
|
|
32
|
-
from .
|
|
33
|
-
from .responses.types import ResponseSpec
|
|
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
|
|
34
35
|
|
|
35
36
|
# ── Bindings (model + Router orchestration) ───────────────────────────────────────
|
|
36
|
-
from .
|
|
37
|
+
from .mapping import (
|
|
37
38
|
bind,
|
|
38
39
|
rebind,
|
|
39
40
|
build_schemas,
|
|
@@ -53,7 +54,10 @@ from .runtime.executor import _invoke
|
|
|
53
54
|
from .schema import _build_schema, _build_list_params, get_schema
|
|
54
55
|
|
|
55
56
|
# ── Transport & Diagnostics (optional) ─────────────────────────────────────────
|
|
56
|
-
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
|
|
57
61
|
from .system import mount_diagnostics
|
|
58
62
|
|
|
59
63
|
# ── DB/bootstrap helpers (infra; optional) ─────────────────────────────────────
|
|
@@ -61,13 +65,50 @@ from .ddl import ensure_schemas, register_sqlite_attach, bootstrap_dbschema
|
|
|
61
65
|
|
|
62
66
|
# ── Config constants (defaults used by REST) ───────────────────────────────────
|
|
63
67
|
from .config.constants import DEFAULT_HTTP_METHODS
|
|
64
|
-
from .
|
|
65
|
-
from .
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
from .table import Base
|
|
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
|
|
69
72
|
from .op import Op
|
|
70
|
-
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
|
|
111
|
+
|
|
71
112
|
|
|
72
113
|
__all__: list[str] = []
|
|
73
114
|
|
|
@@ -75,8 +116,11 @@ __all__ += [
|
|
|
75
116
|
"TigrblApp",
|
|
76
117
|
"TigrblRouter",
|
|
77
118
|
"Router",
|
|
78
|
-
"
|
|
119
|
+
"Depends",
|
|
120
|
+
"HTTPException",
|
|
121
|
+
"TableBase",
|
|
79
122
|
"Op",
|
|
123
|
+
"op",
|
|
80
124
|
"HTTPBearer",
|
|
81
125
|
"APIKey",
|
|
82
126
|
"OAuth2",
|
|
@@ -126,7 +170,6 @@ __all__ += [
|
|
|
126
170
|
"_build_list_params",
|
|
127
171
|
"get_schema",
|
|
128
172
|
# Transport / Diagnostics
|
|
129
|
-
"build_jsonrpc_router",
|
|
130
173
|
"mount_diagnostics",
|
|
131
174
|
# DB/infra
|
|
132
175
|
"ensure_schemas",
|
|
@@ -134,4 +177,40 @@ __all__ += [
|
|
|
134
177
|
"bootstrap_dbschema",
|
|
135
178
|
# Config
|
|
136
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",
|
|
137
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.dev5/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"]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from .._spec.request_spec import RequestSpec
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class RequestBase(RequestSpec):
|
|
9
|
+
"""Base request model behavior shared by concrete request implementations."""
|
|
10
|
+
|
|
11
|
+
@classmethod
|
|
12
|
+
def from_scope(
|
|
13
|
+
cls,
|
|
14
|
+
scope: dict[str, Any],
|
|
15
|
+
receive: Any | None = None,
|
|
16
|
+
*,
|
|
17
|
+
app: Any | None = None,
|
|
18
|
+
state: Any | None = None,
|
|
19
|
+
) -> "RequestBase":
|
|
20
|
+
"""Construct a request from an ASGI scope.
|
|
21
|
+
|
|
22
|
+
Middleware/tests may resolve ``Request`` through base/spec surfaces during
|
|
23
|
+
import cycles. Delegate to the concrete request model to keep
|
|
24
|
+
``Request.from_scope(...)`` consistently available.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from tigrbl._concrete._request import Request
|
|
28
|
+
|
|
29
|
+
return Request.from_scope(scope, receive, app=app, state=state)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
__all__ = ["RequestBase"]
|
tigrbl-0.3.16.dev5/tigrbl/responses/_response.py → tigrbl-0.3.17.dev2/tigrbl/_base/_response_base.py
RENAMED
|
@@ -1,26 +1,28 @@
|
|
|
1
|
-
"""StdAPI response primitives."""
|
|
2
|
-
|
|
3
1
|
from __future__ import annotations
|
|
4
2
|
|
|
5
3
|
import json as json_module
|
|
6
|
-
import
|
|
7
|
-
from dataclasses import dataclass, field
|
|
4
|
+
from dataclasses import dataclass
|
|
8
5
|
from http.cookies import SimpleCookie
|
|
9
|
-
from
|
|
10
|
-
|
|
6
|
+
from typing import Any, Mapping
|
|
7
|
+
|
|
8
|
+
from tigrbl._concrete._headers import HeaderCookies, Headers
|
|
11
9
|
|
|
12
|
-
from
|
|
10
|
+
from .._spec.response_spec import ResponseSpec, TemplateSpec
|
|
13
11
|
|
|
14
12
|
|
|
15
13
|
class _JSONDualMethod:
|
|
16
|
-
def __get__(
|
|
14
|
+
def __get__(
|
|
15
|
+
self,
|
|
16
|
+
obj: "ResponseBase" | None,
|
|
17
|
+
owner: type["ResponseBase"],
|
|
18
|
+
):
|
|
17
19
|
if obj is None:
|
|
18
20
|
|
|
19
21
|
def _factory(
|
|
20
22
|
data: Any,
|
|
21
23
|
status_code: int = 200,
|
|
22
24
|
headers: Mapping[str, str] | None = None,
|
|
23
|
-
) -> "
|
|
25
|
+
) -> "ResponseBase":
|
|
24
26
|
return owner.from_json(data, status_code=status_code, headers=headers)
|
|
25
27
|
|
|
26
28
|
return _factory
|
|
@@ -31,18 +33,59 @@ class _JSONDualMethod:
|
|
|
31
33
|
return _instance_json
|
|
32
34
|
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
status_code: int = 200
|
|
37
|
-
headers: Headers = field(default_factory=Headers)
|
|
38
|
-
body: bytes = b""
|
|
39
|
-
media_type: str | None = None
|
|
40
|
-
_headers: Headers = field(init=False, repr=False)
|
|
36
|
+
class ResponseBase(ResponseSpec):
|
|
37
|
+
"""Concrete HTTP response object that also implements ``ResponseSpec``."""
|
|
41
38
|
|
|
42
39
|
json = _JSONDualMethod()
|
|
43
40
|
|
|
44
|
-
def
|
|
45
|
-
self
|
|
41
|
+
def __init__(
|
|
42
|
+
self,
|
|
43
|
+
*,
|
|
44
|
+
status_code: int = 200,
|
|
45
|
+
headers: Mapping[str, str] | list[tuple[str, str]] | None = None,
|
|
46
|
+
body: bytes | None = None,
|
|
47
|
+
content: bytes | None = None,
|
|
48
|
+
media_type: str | None = None,
|
|
49
|
+
kind: str = "auto",
|
|
50
|
+
envelope: bool | None = None,
|
|
51
|
+
template: TemplateSpec | None = None,
|
|
52
|
+
filename: str | None = None,
|
|
53
|
+
download: bool | None = None,
|
|
54
|
+
etag: str | None = None,
|
|
55
|
+
cache_control: str | None = None,
|
|
56
|
+
redirect_to: str | None = None,
|
|
57
|
+
) -> None:
|
|
58
|
+
if body is not None and content is not None:
|
|
59
|
+
raise TypeError(
|
|
60
|
+
"ResponseBase: provide either 'body' or 'content', not both"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
payload = (
|
|
64
|
+
body if body is not None else (content if content is not None else b"")
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
super().__init__(
|
|
68
|
+
kind=kind,
|
|
69
|
+
media_type=media_type,
|
|
70
|
+
status_code=status_code,
|
|
71
|
+
headers={
|
|
72
|
+
k: v
|
|
73
|
+
for k, v in (
|
|
74
|
+
headers.items() if hasattr(headers, "items") else (headers or [])
|
|
75
|
+
)
|
|
76
|
+
},
|
|
77
|
+
envelope=envelope,
|
|
78
|
+
template=template,
|
|
79
|
+
filename=filename,
|
|
80
|
+
download=download,
|
|
81
|
+
etag=etag,
|
|
82
|
+
cache_control=cache_control,
|
|
83
|
+
redirect_to=redirect_to,
|
|
84
|
+
)
|
|
85
|
+
self.status_code = status_code
|
|
86
|
+
self.headers = Headers(headers or {})
|
|
87
|
+
self.body = payload
|
|
88
|
+
self.media_type = media_type
|
|
46
89
|
self._headers = self.headers
|
|
47
90
|
|
|
48
91
|
@staticmethod
|
|
@@ -132,7 +175,7 @@ class Response:
|
|
|
132
175
|
data: Any,
|
|
133
176
|
status_code: int = 200,
|
|
134
177
|
headers: Mapping[str, str] | None = None,
|
|
135
|
-
) -> "
|
|
178
|
+
) -> "ResponseBase":
|
|
136
179
|
payload = json_module.dumps(
|
|
137
180
|
data, ensure_ascii=False, separators=(",", ":"), default=str
|
|
138
181
|
).encode("utf-8")
|
|
@@ -152,7 +195,7 @@ class Response:
|
|
|
152
195
|
html: str,
|
|
153
196
|
status_code: int = 200,
|
|
154
197
|
headers: Mapping[str, str] | None = None,
|
|
155
|
-
) -> "
|
|
198
|
+
) -> "ResponseBase":
|
|
156
199
|
payload = html.encode("utf-8")
|
|
157
200
|
hdrs = [("content-type", "text/html; charset=utf-8")]
|
|
158
201
|
for k, v in (headers or {}).items():
|
|
@@ -170,7 +213,7 @@ class Response:
|
|
|
170
213
|
text: str,
|
|
171
214
|
status_code: int = 200,
|
|
172
215
|
headers: Mapping[str, str] | None = None,
|
|
173
|
-
) -> "
|
|
216
|
+
) -> "ResponseBase":
|
|
174
217
|
payload = text.encode("utf-8")
|
|
175
218
|
hdrs = [("content-type", "text/plain; charset=utf-8")]
|
|
176
219
|
for k, v in (headers or {}).items():
|
|
@@ -183,96 +226,6 @@ class Response:
|
|
|
183
226
|
)
|
|
184
227
|
|
|
185
228
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
content, ensure_ascii=False, separators=(",", ":"), default=str
|
|
190
|
-
).encode("utf-8")
|
|
191
|
-
super().__init__(
|
|
192
|
-
status_code=status_code,
|
|
193
|
-
headers=[("content-type", "application/json; charset=utf-8")],
|
|
194
|
-
body=payload,
|
|
195
|
-
media_type="application/json",
|
|
196
|
-
)
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
class HTMLResponse(Response):
|
|
200
|
-
def __init__(self, content: str, status_code: int = 200) -> None:
|
|
201
|
-
super().__init__(
|
|
202
|
-
status_code=status_code,
|
|
203
|
-
headers=[("content-type", "text/html; charset=utf-8")],
|
|
204
|
-
body=content.encode("utf-8"),
|
|
205
|
-
media_type="text/html",
|
|
206
|
-
)
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
class PlainTextResponse(Response):
|
|
210
|
-
def __init__(self, content: str, status_code: int = 200) -> None:
|
|
211
|
-
super().__init__(
|
|
212
|
-
status_code=status_code,
|
|
213
|
-
headers=[("content-type", "text/plain; charset=utf-8")],
|
|
214
|
-
body=content.encode("utf-8"),
|
|
215
|
-
media_type="text/plain",
|
|
216
|
-
)
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
class StreamingResponse(Response):
|
|
220
|
-
def __init__(
|
|
221
|
-
self,
|
|
222
|
-
content: Iterable[bytes] | bytes,
|
|
223
|
-
status_code: int = 200,
|
|
224
|
-
media_type: str = "application/octet-stream",
|
|
225
|
-
) -> None:
|
|
226
|
-
chunks = [content] if isinstance(content, bytes) else list(content)
|
|
227
|
-
super().__init__(
|
|
228
|
-
status_code=status_code,
|
|
229
|
-
headers=[("content-type", media_type)],
|
|
230
|
-
body=b"".join(chunks),
|
|
231
|
-
media_type=media_type,
|
|
232
|
-
)
|
|
233
|
-
self._chunks = [bytes(chunk) for chunk in chunks]
|
|
234
|
-
|
|
235
|
-
@property
|
|
236
|
-
def body_iterator(self) -> AsyncIterator[bytes]:
|
|
237
|
-
async def _iter() -> AsyncIterator[bytes]:
|
|
238
|
-
for chunk in self._chunks:
|
|
239
|
-
yield chunk
|
|
240
|
-
|
|
241
|
-
return _iter()
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
class FileResponse(Response):
|
|
245
|
-
def __init__(self, path: str, media_type: str | None = None) -> None:
|
|
246
|
-
payload = Path(path).read_bytes()
|
|
247
|
-
content_type = (
|
|
248
|
-
media_type or mimetypes.guess_type(path)[0] or "application/octet-stream"
|
|
249
|
-
)
|
|
250
|
-
super().__init__(
|
|
251
|
-
status_code=200,
|
|
252
|
-
headers=[("content-type", content_type)],
|
|
253
|
-
body=payload,
|
|
254
|
-
media_type=content_type,
|
|
255
|
-
)
|
|
256
|
-
self.path = str(path)
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
class RedirectResponse(Response):
|
|
260
|
-
def __init__(self, url: str, status_code: int = 307) -> None:
|
|
261
|
-
super().__init__(
|
|
262
|
-
status_code=status_code,
|
|
263
|
-
headers=[("location", url)],
|
|
264
|
-
body=b"",
|
|
265
|
-
media_type=None,
|
|
266
|
-
)
|
|
267
|
-
self.url = url
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
__all__ = [
|
|
271
|
-
"Response",
|
|
272
|
-
"JSONResponse",
|
|
273
|
-
"HTMLResponse",
|
|
274
|
-
"PlainTextResponse",
|
|
275
|
-
"StreamingResponse",
|
|
276
|
-
"FileResponse",
|
|
277
|
-
"RedirectResponse",
|
|
278
|
-
]
|
|
229
|
+
@dataclass
|
|
230
|
+
class TemplateBase(TemplateSpec):
|
|
231
|
+
"""Concrete template configuration used at runtime."""
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class SchemaBase:
|
|
5
|
+
"""Shared schema helpers used by concrete schema wrappers."""
|
|
6
|
+
|
|
7
|
+
@classmethod
|
|
8
|
+
def collect(cls, model: type) -> dict[str, dict[str, type]]:
|
|
9
|
+
from ..mapping.collect_decorated_schemas import collect_decorated_schemas
|
|
10
|
+
|
|
11
|
+
return collect_decorated_schemas(model)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
__all__ = ["SchemaBase"]
|