tigrbl 0.3.7.dev2__tar.gz → 0.3.7.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/PKG-INFO +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/pyproject.toml +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/__init__.py +2 -2
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/_router.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/api_spec.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/app/app_spec.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/__init__.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/common.py +2 -2
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/fastapi.py +4 -4
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/helpers.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/io.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/routing.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/resolver.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/router_runtime.py +2 -2
- tigrbl-0.3.7.dev3/tigrbl/headers/__init__.py +3 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/headers/_header.py +25 -5
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/types.py +1 -1
- tigrbl-0.3.7.dev3/tigrbl/requests/__init__.py +5 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/requests/_request.py +48 -4
- {tigrbl-0.3.7.dev2/tigrbl/response → tigrbl-0.3.7.dev3/tigrbl/responses}/__init__.py +16 -18
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/responses/_response.py +26 -4
- {tigrbl-0.3.7.dev2/tigrbl/response → tigrbl-0.3.7.dev3/tigrbl/responses}/shortcuts.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/headers_from_payload.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/renderer.py +2 -2
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/templates.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/executor/types.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/diagnostics/compat.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/lens.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/openapi/mount.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/openrpc.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/swagger.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/favicon/__init__.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/table/_base.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/table/table_spec.py +1 -1
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/asgi_wsgi.py +48 -44
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/jsonrpc/dispatcher.py +36 -10
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/__init__.py +2 -2
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/authn_abc.py +1 -1
- tigrbl-0.3.7.dev2/tigrbl/headers/__init__.py +0 -3
- tigrbl-0.3.7.dev2/tigrbl/requests/__init__.py +0 -3
- tigrbl-0.3.7.dev2/tigrbl/response/stdapi.py +0 -26
- tigrbl-0.3.7.dev2/tigrbl/responses/__init__.py +0 -19
- tigrbl-0.3.7.dev2/tigrbl/transport/request.py +0 -9
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/LICENSE +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/README.md +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/README.md +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/_api.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/_route.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/_routing.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/mro_collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/resolve.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/api/tigrbl_api.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/app/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/app/_app.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/app/_model_registry.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/app/_routing_runtime.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/app/mro_collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/app/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/app/tigrbl_app.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/api/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/api/common.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/api/include.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/api/resource_proxy.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/api/rpc.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/columns.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/handlers/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/handlers/builder.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/handlers/ctx.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/handlers/identifiers.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/handlers/namespaces.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/handlers/steps.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/hooks.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/model.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/model_helpers.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/model_registry.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/attach.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/collection.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/io_headers.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/member.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rest/router.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/rpc.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/schemas/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/schemas/builder.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/schemas/defaults.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/bindings/schemas/utils.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/README.md +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/_column.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/column_spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/field_spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/infer/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/infer/core.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/infer/jsonhints.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/infer/planning.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/infer/types.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/infer/utils.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/io_spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/mro_collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/column/storage_spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/config/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/config/constants.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/config/defaults.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/config/resolver.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/bulk.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/helpers/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/helpers/db.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/helpers/enum.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/helpers/filters.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/helpers/model.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/helpers/normalize.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/ops.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/core/crud/params.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/ddl/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/decorators.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/deps/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/deps/jinja.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/deps/pydantic.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/deps/sqlalchemy.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/docs/verbosity.md +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/_engine.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/bind.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/builders.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/capabilities.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/decorators.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/docs/PLUGINS.md +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/engine_spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/plugins.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/registry.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/resolver.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/engine/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/hook/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/hook/_hook.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/hook/decorators.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/hook/exceptions.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/hook/hook_spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/hook/mro_collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/hook/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/hook/types.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/middlewares/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/middlewares/compose.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/middlewares/cors.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/middlewares/decorators.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/middlewares/middleware.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/middlewares/spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/_op.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/canonical.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/decorators.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/model_registry.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/mro_collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/op/resolver.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/_RowBound.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/bootstrappable.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/bound.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/edges.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/fields.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/hierarchy.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/key_digest.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/lifecycle.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/locks.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/markers.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/operations.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/ownable.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/principals.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/tenant_bound.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/upsertable.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/mixins/utils.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/_base.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/audit.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/client.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/group.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/org.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/rbac.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/status.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/tenant.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/orm/tables/user.py +0 -0
- {tigrbl-0.3.7.dev2/tigrbl/response → tigrbl-0.3.7.dev3/tigrbl/responses}/README.md +0 -0
- {tigrbl-0.3.7.dev2/tigrbl/response → tigrbl-0.3.7.dev3/tigrbl/responses}/bind.py +0 -0
- {tigrbl-0.3.7.dev2/tigrbl/response → tigrbl-0.3.7.dev3/tigrbl/responses}/decorators.py +0 -0
- {tigrbl-0.3.7.dev2/tigrbl/response → tigrbl-0.3.7.dev3/tigrbl/responses}/resolver.py +0 -0
- {tigrbl-0.3.7.dev2/tigrbl/response → tigrbl-0.3.7.dev3/tigrbl/responses}/types.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/rest/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/README.md +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/emit/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/emit/paired_post.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/emit/paired_pre.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/out/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/out/masking.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/refresh/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/refresh/demand.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/resolve/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/resolve/assemble.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/resolve/paired_gen.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/negotiate.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/negotiation.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/render.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/template.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/schema/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/schema/collect_in.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/schema/collect_out.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/storage/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/storage/to_stored.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/wire/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/wire/build_in.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/wire/build_out.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/wire/dump.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/wire/validate_in.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/context.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/events.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/executor/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/executor/guards.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/executor/helpers.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/executor/invoke.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/kernel.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/labels.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/opview.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/ordering.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/status/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/status/converters.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/status/exceptions.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/status/mappings.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/status/utils.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/system.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/trace.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/_schema.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/builder/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/builder/build_schema.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/builder/cache.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/builder/compat.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/builder/extras.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/builder/helpers.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/builder/list_params.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/builder/strip_parent_fields.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/decorators.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/get_schema.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/schema_spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/types.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/schema/utils.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/dependencies.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/schemes/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/schemes/_base.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/schemes/api_key.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/schemes/http_bearer.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/schemes/mutual_tls.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/schemes/oauth2.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/security/schemes/openid_connect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/session/README.md +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/session/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/session/abc.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/session/base.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/session/decorators.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/session/default.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/session/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/session/spec.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/specs.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/diagnostics/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/diagnostics/healthz.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/diagnostics/hookz.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/diagnostics/kernelz.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/diagnostics/methodz.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/diagnostics/router.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/diagnostics/utils.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/openapi/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/openapi/helpers.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/openapi/metadata.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/docs/openapi/schema.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/favicon/assets/favicon.svg +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/system/uvicorn.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/table/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/table/_table.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/table/mro_collect.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/table/shortcuts.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/background.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/httpx.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/jsonrpc/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/jsonrpc/helpers.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/jsonrpc/models.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/jsonrpc/openrpc.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/rest/__init__.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/rest/aggregator.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/transport/rest/decorators.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/allow_anon_provider.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/nested_path_provider.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/op.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/op_config_provider.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/op_verb_alias_provider.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/request_extras_provider.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/response_extras_provider.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/table_config_provider.py +0 -0
- {tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/types/uuid.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tigrbl
|
|
3
|
-
Version: 0.3.7.
|
|
3
|
+
Version: 0.3.7.dev3
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tigrbl"
|
|
3
|
-
version = "0.3.7.
|
|
3
|
+
version = "0.3.7.dev3"
|
|
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"
|
|
@@ -43,8 +43,8 @@ from .op import alias_ctx, op_ctx, alias, op_alias
|
|
|
43
43
|
from .hook import hook_ctx
|
|
44
44
|
from .engine.decorators import engine_ctx
|
|
45
45
|
from .schema.decorators import schema_ctx
|
|
46
|
-
from .
|
|
47
|
-
from .
|
|
46
|
+
from .responses.decorators import response_ctx
|
|
47
|
+
from .responses.types import ResponseSpec
|
|
48
48
|
|
|
49
49
|
# ── Bindings (model + API orchestration) ───────────────────────────────────────
|
|
50
50
|
from .bindings import (
|
|
@@ -37,7 +37,7 @@ from tigrbl.transport.httpx import ensure_httpx_sync_transport
|
|
|
37
37
|
from ._route import Route
|
|
38
38
|
from ..system.docs.openapi import build_openapi, mount_openapi
|
|
39
39
|
from ..system.docs.swagger import mount_swagger
|
|
40
|
-
from ..requests
|
|
40
|
+
from ..requests import Request
|
|
41
41
|
from ..transport.rest.decorators import (
|
|
42
42
|
delete as rest_delete,
|
|
43
43
|
get as rest_get,
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
from typing import Any, Callable, Optional, Sequence
|
|
5
5
|
from ..engine.engine_spec import EngineCfg
|
|
6
|
-
from ..
|
|
6
|
+
from ..responses.types import ResponseSpec
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
@dataclass
|
|
@@ -46,7 +46,7 @@ from .hooks import normalize_and_attach as build_hooks
|
|
|
46
46
|
from .handlers import build_and_attach as build_handlers
|
|
47
47
|
from .rpc import register_and_attach as register_rpc
|
|
48
48
|
from .rest import build_router_and_attach as build_rest
|
|
49
|
-
from ..
|
|
49
|
+
from ..responses.bind import bind as bind_response
|
|
50
50
|
|
|
51
51
|
# API facade integration
|
|
52
52
|
from .api import include_model, include_models, rpc_call
|
|
@@ -13,11 +13,11 @@ from pydantic import BaseModel
|
|
|
13
13
|
|
|
14
14
|
from ...api._api import APIRouter as Router
|
|
15
15
|
from ...core.crud.params import Body, Path, Query
|
|
16
|
-
from ...responses
|
|
16
|
+
from ...responses import Response
|
|
17
17
|
from ...runtime.status.exceptions import HTTPException
|
|
18
18
|
from ...runtime.status.mappings import status as _status
|
|
19
19
|
from ...security.dependencies import Depends, Security
|
|
20
|
-
from ...requests
|
|
20
|
+
from ...requests import Request
|
|
21
21
|
from .helpers import (
|
|
22
22
|
_Key,
|
|
23
23
|
_coerce_parent_kw,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""Deprecated compatibility module for REST ASGI-style primitives.
|
|
2
2
|
|
|
3
3
|
Prefer importing directly from:
|
|
4
|
-
- ``tigrbl.
|
|
4
|
+
- ``tigrbl.responses`` for response classes
|
|
5
5
|
- ``tigrbl.runtime.status`` for ``status`` and ``HTTPException``
|
|
6
|
-
- ``tigrbl.api._api`` / ``tigrbl.requests
|
|
6
|
+
- ``tigrbl.api._api`` / ``tigrbl.requests`` / ``tigrbl.security.dependencies``
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
@@ -21,11 +21,11 @@ from ...response import (
|
|
|
21
21
|
)
|
|
22
22
|
from ...runtime.status import HTTPException, status
|
|
23
23
|
from ...security.dependencies import Depends, Security
|
|
24
|
-
from ...requests
|
|
24
|
+
from ...requests import Request
|
|
25
25
|
|
|
26
26
|
warnings.warn(
|
|
27
27
|
"tigrbl.bindings.rest.asgi is deprecated; import from "
|
|
28
|
-
"tigrbl.
|
|
28
|
+
"tigrbl.responses, tigrbl.runtime.status, and concrete modules instead.",
|
|
29
29
|
DeprecationWarning,
|
|
30
30
|
stacklevel=2,
|
|
31
31
|
)
|
|
@@ -12,7 +12,7 @@ from pydantic import BaseModel, Field, create_model
|
|
|
12
12
|
from ...core.crud.params import Query
|
|
13
13
|
from ...runtime.status.exceptions import HTTPException
|
|
14
14
|
from ...runtime.status.mappings import status as _status
|
|
15
|
-
from ...requests
|
|
15
|
+
from ...requests import Request
|
|
16
16
|
from .helpers import _ensure_jsonable
|
|
17
17
|
from ...op import OpSpec
|
|
18
18
|
|
|
@@ -9,7 +9,7 @@ from typing import Any, Dict, Optional, Sequence, Tuple
|
|
|
9
9
|
from ...runtime.status.exceptions import HTTPException
|
|
10
10
|
from ...runtime.status.mappings import status as _status
|
|
11
11
|
from ...security.dependencies import Depends, Security
|
|
12
|
-
from ...requests
|
|
12
|
+
from ...requests import Request
|
|
13
13
|
from ...op import OpSpec
|
|
14
14
|
from ...security import HTTPBearer
|
|
15
15
|
from ...op.types import CANON
|
|
@@ -7,7 +7,7 @@ from typing import Annotated, Any, Iterable, get_args, get_origin
|
|
|
7
7
|
from ..core.crud.params import Param
|
|
8
8
|
from ..runtime.status.exceptions import HTTPException
|
|
9
9
|
from ..runtime.status.mappings import status
|
|
10
|
-
from ..requests
|
|
10
|
+
from ..requests import Request
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def split_annotated(annotation: Any) -> tuple[Any, tuple[Any, ...]]:
|
|
@@ -10,10 +10,10 @@ from ..api.resolve import (
|
|
|
10
10
|
resolve_handler_kwargs,
|
|
11
11
|
resolve_route_dependencies,
|
|
12
12
|
)
|
|
13
|
-
from ..responses
|
|
13
|
+
from ..responses import Response
|
|
14
14
|
from ..runtime.status.exceptions import HTTPException
|
|
15
15
|
from ..runtime.status.mappings import status
|
|
16
|
-
from ..requests
|
|
16
|
+
from ..requests import Request
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def _is_http_response_like(obj: Any) -> bool:
|
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from collections.abc import Iterable, Mapping, MutableMapping
|
|
6
|
+
from http.cookies import SimpleCookie
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class HeaderCookies(dict[str, str]):
|
|
10
|
+
"""Dot-addressable cookie mapping parsed from a Cookie header value."""
|
|
11
|
+
|
|
12
|
+
def __getattr__(self, name: str) -> str:
|
|
13
|
+
try:
|
|
14
|
+
return self[name]
|
|
15
|
+
except KeyError as exc: # pragma: no cover - defensive
|
|
16
|
+
raise AttributeError(name) from exc
|
|
6
17
|
|
|
7
18
|
|
|
8
19
|
class Headers(MutableMapping[str, str]):
|
|
@@ -24,6 +35,12 @@ class Headers(MutableMapping[str, str]):
|
|
|
24
35
|
def _attribute_key(name: str) -> str:
|
|
25
36
|
return name.replace("_", "-").lower()
|
|
26
37
|
|
|
38
|
+
@staticmethod
|
|
39
|
+
def _parse_cookie_header(value: str) -> HeaderCookies:
|
|
40
|
+
parsed = SimpleCookie()
|
|
41
|
+
parsed.load(value)
|
|
42
|
+
return HeaderCookies({name: morsel.value for name, morsel in parsed.items()})
|
|
43
|
+
|
|
27
44
|
def __getitem__(self, key: str) -> str:
|
|
28
45
|
return self._data[key.lower()][1]
|
|
29
46
|
|
|
@@ -53,11 +70,14 @@ class Headers(MutableMapping[str, str]):
|
|
|
53
70
|
return default
|
|
54
71
|
return item[1]
|
|
55
72
|
|
|
56
|
-
def __getattr__(self, name: str) -> str:
|
|
73
|
+
def __getattr__(self, name: str) -> str | HeaderCookies:
|
|
57
74
|
key = self._attribute_key(name)
|
|
58
|
-
if key in self._data:
|
|
59
|
-
|
|
60
|
-
|
|
75
|
+
if key not in self._data:
|
|
76
|
+
raise AttributeError(name)
|
|
77
|
+
value = self._data[key][1]
|
|
78
|
+
if key == "cookie":
|
|
79
|
+
return self._parse_cookie_header(value)
|
|
80
|
+
return value
|
|
61
81
|
|
|
62
82
|
def __setattr__(self, name: str, value: str) -> None:
|
|
63
83
|
if name.startswith("_"):
|
|
@@ -66,4 +86,4 @@ class Headers(MutableMapping[str, str]):
|
|
|
66
86
|
self[self._attribute_key(name)] = value
|
|
67
87
|
|
|
68
88
|
|
|
69
|
-
__all__ = ["Headers"]
|
|
89
|
+
__all__ = ["Headers", "HeaderCookies"]
|
|
@@ -8,7 +8,7 @@ from typing import Any, Literal, Mapping, Optional, Tuple, cast
|
|
|
8
8
|
from ..config.constants import CANON as CANONICAL_VERB_TUPLE
|
|
9
9
|
from ..hook.types import PHASE, HookPhase, PHASES, Ctx, StepFn, HookPredicate
|
|
10
10
|
from ..hook import HookSpec as OpHook
|
|
11
|
-
from ..
|
|
11
|
+
from ..responses.types import ResponseSpec
|
|
12
12
|
from ..engine.engine_spec import EngineCfg
|
|
13
13
|
from typing import TYPE_CHECKING
|
|
14
14
|
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import base64
|
|
5
6
|
import json as json_module
|
|
6
7
|
from dataclasses import dataclass, field
|
|
7
8
|
from http.cookies import SimpleCookie
|
|
8
9
|
from types import SimpleNamespace
|
|
9
10
|
from typing import Any
|
|
10
11
|
|
|
11
|
-
from tigrbl.headers import Headers
|
|
12
|
+
from tigrbl.headers import HeaderCookies, Headers
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
@dataclass(frozen=True)
|
|
@@ -64,6 +65,15 @@ class AwaitableValue:
|
|
|
64
65
|
return len(self.value)
|
|
65
66
|
|
|
66
67
|
|
|
68
|
+
def _b64url_encode(data: bytes) -> str:
|
|
69
|
+
return base64.urlsafe_b64encode(data).decode("ascii").rstrip("=")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _b64url_decode(data: str) -> bytes:
|
|
73
|
+
pad = "=" * (-len(data) % 4)
|
|
74
|
+
return base64.urlsafe_b64decode((data + pad).encode("ascii"))
|
|
75
|
+
|
|
76
|
+
|
|
67
77
|
@dataclass
|
|
68
78
|
class Request:
|
|
69
79
|
method: str
|
|
@@ -111,11 +121,45 @@ class Request:
|
|
|
111
121
|
return {name: vals[0] for name, vals in self.query.items() if vals}
|
|
112
122
|
|
|
113
123
|
@property
|
|
114
|
-
def cookies(self) ->
|
|
124
|
+
def cookies(self) -> HeaderCookies:
|
|
115
125
|
raw = self.headers.get("cookie", "") or ""
|
|
116
126
|
parsed = SimpleCookie()
|
|
117
127
|
parsed.load(raw)
|
|
118
|
-
return {name: morsel.value for name, morsel in parsed.items()}
|
|
128
|
+
return HeaderCookies({name: morsel.value for name, morsel in parsed.items()})
|
|
119
129
|
|
|
130
|
+
@property
|
|
131
|
+
def bearer_token(self) -> str | None:
|
|
132
|
+
authorization = self.headers.get("authorization", "") or ""
|
|
133
|
+
scheme, _, token = authorization.partition(" ")
|
|
134
|
+
if scheme.lower() == "bearer" and token:
|
|
135
|
+
return token
|
|
136
|
+
return None
|
|
137
|
+
|
|
138
|
+
@property
|
|
139
|
+
def session_token(self) -> str | None:
|
|
140
|
+
bearer = self.bearer_token
|
|
141
|
+
if bearer:
|
|
142
|
+
return bearer
|
|
143
|
+
return self.cookies.get("sid")
|
|
120
144
|
|
|
121
|
-
|
|
145
|
+
@property
|
|
146
|
+
def client(self) -> SimpleNamespace:
|
|
147
|
+
host = ""
|
|
148
|
+
try:
|
|
149
|
+
client = self.scope.get("client")
|
|
150
|
+
except AttributeError:
|
|
151
|
+
client = None
|
|
152
|
+
if isinstance(client, tuple) and client:
|
|
153
|
+
host = str(client[0])
|
|
154
|
+
return SimpleNamespace(ip=host, host=host)
|
|
155
|
+
|
|
156
|
+
@staticmethod
|
|
157
|
+
def b64url_encode(data: bytes) -> str:
|
|
158
|
+
return _b64url_encode(data)
|
|
159
|
+
|
|
160
|
+
@staticmethod
|
|
161
|
+
def b64url_decode(data: str) -> bytes:
|
|
162
|
+
return _b64url_decode(data)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
__all__ = ["Request", "AwaitableValue", "URL", "_b64url_encode", "_b64url_decode"]
|
|
@@ -1,31 +1,29 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
from tigrbl.headers import Headers
|
|
2
|
+
|
|
3
|
+
from ._response import (
|
|
4
|
+
FileResponse,
|
|
4
5
|
HTMLResponse,
|
|
6
|
+
JSONResponse,
|
|
5
7
|
PlainTextResponse,
|
|
6
|
-
StreamingResponse,
|
|
7
|
-
FileResponse,
|
|
8
8
|
RedirectResponse,
|
|
9
|
+
Response,
|
|
10
|
+
StreamingResponse,
|
|
9
11
|
)
|
|
10
12
|
from .decorators import (
|
|
11
|
-
response_ctx,
|
|
12
|
-
get_attached_response_spec,
|
|
13
13
|
get_attached_response_alias,
|
|
14
|
+
get_attached_response_spec,
|
|
15
|
+
response_ctx,
|
|
14
16
|
)
|
|
15
|
-
from .
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Template,
|
|
20
|
-
TemplateSpec,
|
|
21
|
-
)
|
|
22
|
-
from .resolver import resolve_response_spec, infer_hints
|
|
23
|
-
from .shortcuts import as_json, as_html, as_text, as_redirect, as_stream, as_file
|
|
17
|
+
from .resolver import infer_hints, resolve_response_spec
|
|
18
|
+
from .shortcuts import as_file, as_html, as_json, as_redirect, as_stream, as_text
|
|
19
|
+
from .types import Response as ResponseConfig
|
|
20
|
+
from .types import ResponseKind, ResponseSpec, Template, TemplateSpec
|
|
24
21
|
from ..runtime.atoms.response.renderer import ResponseHints, render
|
|
25
22
|
from ..runtime.atoms.response.templates import render_template
|
|
26
23
|
|
|
27
24
|
__all__ = [
|
|
28
|
-
"
|
|
25
|
+
"Headers",
|
|
26
|
+
"Response",
|
|
29
27
|
"JSONResponse",
|
|
30
28
|
"HTMLResponse",
|
|
31
29
|
"PlainTextResponse",
|
|
@@ -38,7 +36,7 @@ __all__ = [
|
|
|
38
36
|
"ResponseSpec",
|
|
39
37
|
"ResponseKind",
|
|
40
38
|
"TemplateSpec",
|
|
41
|
-
"
|
|
39
|
+
"ResponseConfig",
|
|
42
40
|
"Template",
|
|
43
41
|
"resolve_response_spec",
|
|
44
42
|
"infer_hints",
|
|
@@ -9,7 +9,26 @@ from http.cookies import SimpleCookie
|
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from typing import Any, AsyncIterator, Iterable, Mapping
|
|
11
11
|
|
|
12
|
-
from tigrbl.headers import Headers
|
|
12
|
+
from tigrbl.headers import HeaderCookies, Headers
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class _JSONDualMethod:
|
|
16
|
+
def __get__(self, obj: "Response" | None, owner: type["Response"]):
|
|
17
|
+
if obj is None:
|
|
18
|
+
|
|
19
|
+
def _factory(
|
|
20
|
+
data: Any,
|
|
21
|
+
status_code: int = 200,
|
|
22
|
+
headers: Mapping[str, str] | None = None,
|
|
23
|
+
) -> "Response":
|
|
24
|
+
return owner.from_json(data, status_code=status_code, headers=headers)
|
|
25
|
+
|
|
26
|
+
return _factory
|
|
27
|
+
|
|
28
|
+
def _instance_json() -> Any:
|
|
29
|
+
return obj.json_body()
|
|
30
|
+
|
|
31
|
+
return _instance_json
|
|
13
32
|
|
|
14
33
|
|
|
15
34
|
@dataclass
|
|
@@ -20,6 +39,8 @@ class Response:
|
|
|
20
39
|
media_type: str | None = None
|
|
21
40
|
_headers: Headers = field(init=False, repr=False)
|
|
22
41
|
|
|
42
|
+
json = _JSONDualMethod()
|
|
43
|
+
|
|
23
44
|
def __post_init__(self) -> None:
|
|
24
45
|
self._headers = Headers(self.headers)
|
|
25
46
|
|
|
@@ -28,6 +49,7 @@ class Response:
|
|
|
28
49
|
return {
|
|
29
50
|
200: "OK",
|
|
30
51
|
201: "Created",
|
|
52
|
+
205: "Reset Content",
|
|
31
53
|
204: "No Content",
|
|
32
54
|
301: "Moved Permanently",
|
|
33
55
|
302: "Found",
|
|
@@ -65,12 +87,12 @@ class Response:
|
|
|
65
87
|
return json_module.loads(self.body.decode("utf-8"))
|
|
66
88
|
|
|
67
89
|
@property
|
|
68
|
-
def cookies(self) ->
|
|
90
|
+
def cookies(self) -> HeaderCookies:
|
|
69
91
|
cookie = SimpleCookie()
|
|
70
92
|
for name, value in self._headers.items():
|
|
71
93
|
if name == "set-cookie":
|
|
72
94
|
cookie.load(value)
|
|
73
|
-
return {name: morsel.value for name, morsel in cookie.items()}
|
|
95
|
+
return HeaderCookies({name: morsel.value for name, morsel in cookie.items()})
|
|
74
96
|
|
|
75
97
|
def set_cookie(self, key: str, value: str, *, path: str = "/") -> None:
|
|
76
98
|
cookie = SimpleCookie()
|
|
@@ -80,7 +102,7 @@ class Response:
|
|
|
80
102
|
self.headers = self._headers.as_list()
|
|
81
103
|
|
|
82
104
|
@classmethod
|
|
83
|
-
def
|
|
105
|
+
def from_json(
|
|
84
106
|
cls,
|
|
85
107
|
data: Any,
|
|
86
108
|
status_code: int = 200,
|
{tigrbl-0.3.7.dev2 → tigrbl-0.3.7.dev3}/tigrbl/runtime/atoms/response/headers_from_payload.py
RENAMED
|
@@ -13,7 +13,7 @@ def run(_, ctx) -> None:
|
|
|
13
13
|
- Honors op-specific exposure via ``io.out_verbs``.
|
|
14
14
|
Complexity: O(#fields in opview).
|
|
15
15
|
"""
|
|
16
|
-
from tigrbl.
|
|
16
|
+
from tigrbl.responses import ResponseHints
|
|
17
17
|
|
|
18
18
|
resp = getattr(ctx, "response", None)
|
|
19
19
|
if resp is None:
|
|
@@ -4,10 +4,10 @@ from pathlib import Path
|
|
|
4
4
|
from typing import Any, AsyncIterable, Iterable, Mapping, Optional, Union, cast
|
|
5
5
|
import logging
|
|
6
6
|
|
|
7
|
-
from ....responses
|
|
7
|
+
from ....responses import Response
|
|
8
8
|
from ....transport.background import BackgroundTask
|
|
9
9
|
|
|
10
|
-
from ....
|
|
10
|
+
from ....responses.shortcuts import (
|
|
11
11
|
as_file,
|
|
12
12
|
as_html,
|
|
13
13
|
as_json,
|
|
@@ -4,7 +4,7 @@ from typing import Any, Callable, Sequence
|
|
|
4
4
|
from types import SimpleNamespace
|
|
5
5
|
|
|
6
6
|
try:
|
|
7
|
-
from ...responses
|
|
7
|
+
from ...responses import JSONResponse
|
|
8
8
|
from ...types import Depends, Request, Router
|
|
9
9
|
except Exception: # pragma: no cover
|
|
10
10
|
|