tigrbl 0.3.10.dev1__tar.gz → 0.3.11.dev1__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.10.dev1 → tigrbl-0.3.11.dev1}/PKG-INFO +1 -1
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/pyproject.toml +1 -1
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/middlewares/__init__.py +2 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/middlewares/base.py +4 -4
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/middlewares/cors.py +35 -5
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/middlewares/middleware.py +2 -2
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/middlewares/spec.py +3 -2
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/lens.py +1 -1
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/LICENSE +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/README.md +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/README.md +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/_api.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/_route.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/_router.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/_routing.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/api_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/mro_collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/resolve.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/api/tigrbl_api.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/_app.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/_model_registry.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/_routing_runtime.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/app_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/mro_collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/tigrbl_app.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/app/transport.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/api/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/api/common.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/api/include.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/api/resource_proxy.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/api/rpc.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/columns.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/handlers/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/handlers/builder.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/handlers/ctx.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/handlers/identifiers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/handlers/namespaces.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/handlers/steps.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/hooks.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/model.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/model_helpers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/model_registry.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/attach.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/collection.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/common.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/fastapi.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/helpers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/io.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/io_headers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/member.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/router.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rest/routing.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/rpc.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/schemas/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/schemas/builder.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/schemas/defaults.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/bindings/schemas/utils.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/README.md +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/_column.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/column_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/field_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/infer/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/infer/core.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/infer/jsonhints.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/infer/planning.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/infer/types.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/infer/utils.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/io_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/mro_collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/column/storage_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/config/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/config/constants.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/config/defaults.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/config/resolver.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/bulk.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/helpers/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/helpers/db.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/helpers/enum.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/helpers/filters.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/helpers/model.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/helpers/normalize.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/ops.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/crud/params.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/resolver.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/core/router_runtime.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/ddl/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/deps/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/deps/jinja.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/deps/pydantic.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/deps/sqlalchemy.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/docs/verbosity.md +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/_engine.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/bind.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/builders.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/capabilities.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/docs/PLUGINS.md +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/engine_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/plugins.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/registry.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/resolver.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/engine/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/headers/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/headers/_header.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/hook/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/hook/_hook.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/hook/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/hook/exceptions.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/hook/hook_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/hook/mro_collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/hook/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/hook/types.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/middlewares/compose.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/middlewares/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/_op.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/canonical.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/model_registry.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/mro_collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/resolver.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/op/types.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/_RowBound.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/bootstrappable.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/bound.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/edges.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/fields.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/hierarchy.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/key_digest.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/lifecycle.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/locks.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/markers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/operations.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/ownable.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/principals.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/tenant_bound.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/upsertable.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/mixins/utils.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/_base.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/audit.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/client.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/group.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/org.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/rbac.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/status.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/tenant.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/orm/tables/user.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/requests/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/requests/_request.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/requests/adapters.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/README.md +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/_response.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/_transport.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/bind.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/resolver.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/responses/types.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/rest/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/README.md +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/emit/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/emit/paired_post.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/emit/paired_pre.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/out/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/out/masking.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/refresh/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/refresh/demand.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/resolve/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/resolve/assemble.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/resolve/paired_gen.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/response/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/response/headers_from_payload.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/response/negotiate.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/response/negotiation.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/response/render.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/response/renderer.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/response/template.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/response/templates.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/schema/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/schema/collect_in.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/schema/collect_out.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/storage/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/storage/to_stored.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/wire/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/wire/build_in.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/wire/build_out.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/wire/dump.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/atoms/wire/validate_in.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/context.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/events.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/executor/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/executor/guards.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/executor/helpers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/executor/invoke.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/executor/types.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/kernel.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/labels.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/opview.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/ordering.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/status/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/status/converters.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/status/exceptions.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/status/mappings.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/status/utils.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/system.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/runtime/trace.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/_schema.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/builder/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/builder/build_schema.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/builder/cache.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/builder/compat.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/builder/extras.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/builder/helpers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/builder/list_params.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/builder/strip_parent_fields.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/get_schema.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/schema_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/types.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/schema/utils.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/dependencies.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/schemes/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/schemes/_base.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/schemes/api_key.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/schemes/http_bearer.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/schemes/mutual_tls.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/schemes/oauth2.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/security/schemes/openid_connect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/session/README.md +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/session/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/session/abc.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/session/base.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/session/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/session/default.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/session/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/session/spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/specs.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/diagnostics/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/diagnostics/compat.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/diagnostics/healthz.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/diagnostics/hookz.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/diagnostics/kernelz.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/diagnostics/methodz.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/diagnostics/router.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/diagnostics/utils.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/openapi/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/openapi/helpers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/openapi/metadata.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/openapi/mount.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/openapi/schema.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/openrpc.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/docs/swagger.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/favicon/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/favicon/assets/favicon.svg +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/system/uvicorn.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/table/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/table/_base.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/table/_table.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/table/mro_collect.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/table/shortcuts.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/table/table_spec.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/background.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/httpx.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/jsonrpc/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/jsonrpc/dispatcher.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/jsonrpc/helpers.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/jsonrpc/models.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/jsonrpc/openrpc.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/rest/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/rest/aggregator.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/transport/rest/decorators.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/__init__.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/allow_anon_provider.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/authn_abc.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/nested_path_provider.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/op.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/op_config_provider.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/op_verb_alias_provider.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/request_extras_provider.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/response_extras_provider.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/table_config_provider.py +0 -0
- {tigrbl-0.3.10.dev1 → tigrbl-0.3.11.dev1}/tigrbl/types/uuid.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.11.dev1
|
|
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.
|
|
3
|
+
version = "0.3.11.dev1"
|
|
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"
|
|
@@ -2,6 +2,7 @@ from .spec import (
|
|
|
2
2
|
ASGIApp,
|
|
3
3
|
ASGIReceive,
|
|
4
4
|
ASGISend,
|
|
5
|
+
Message,
|
|
5
6
|
MiddlewareSpec,
|
|
6
7
|
WSGIApp,
|
|
7
8
|
WSGIStartResponse,
|
|
@@ -16,6 +17,7 @@ __all__ = [
|
|
|
16
17
|
"ASGIApp",
|
|
17
18
|
"ASGIReceive",
|
|
18
19
|
"ASGISend",
|
|
20
|
+
"Message",
|
|
19
21
|
"WSGIApp",
|
|
20
22
|
"WSGIStartResponse",
|
|
21
23
|
"MiddlewareSpec",
|
|
@@ -11,7 +11,7 @@ from tigrbl.responses import Response
|
|
|
11
11
|
from tigrbl.responses._transport import finalize_transport_response
|
|
12
12
|
|
|
13
13
|
from .middleware import Middleware
|
|
14
|
-
from .spec import ASGIReceive, ASGISend
|
|
14
|
+
from .spec import ASGIReceive, ASGISend, Message
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class BaseHTTPMiddleware(Middleware):
|
|
@@ -71,10 +71,10 @@ class BaseHTTPMiddleware(Middleware):
|
|
|
71
71
|
target_request = forward_request or request
|
|
72
72
|
target_scope = self._scope_from_request(scope, target_request)
|
|
73
73
|
|
|
74
|
-
messages: list[
|
|
74
|
+
messages: list[Message] = []
|
|
75
75
|
body_sent = False
|
|
76
76
|
|
|
77
|
-
async def receive_for_app() ->
|
|
77
|
+
async def receive_for_app() -> Message:
|
|
78
78
|
nonlocal body_sent
|
|
79
79
|
if body_sent:
|
|
80
80
|
return {"type": "http.request", "body": b"", "more_body": False}
|
|
@@ -85,7 +85,7 @@ class BaseHTTPMiddleware(Middleware):
|
|
|
85
85
|
"more_body": False,
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
async def send_from_app(message:
|
|
88
|
+
async def send_from_app(message: Message) -> None:
|
|
89
89
|
messages.append(message)
|
|
90
90
|
|
|
91
91
|
await self.app(target_scope, receive_for_app, send_from_app)
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from typing import Any
|
|
6
|
+
import re
|
|
6
7
|
|
|
7
8
|
from tigrbl.headers import Headers
|
|
8
9
|
from tigrbl.requests import Request
|
|
@@ -27,29 +28,58 @@ class CORSMiddleware(BaseHTTPMiddleware):
|
|
|
27
28
|
app,
|
|
28
29
|
*,
|
|
29
30
|
allow_origin: str = "*",
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
allow_origins: list[str] | tuple[str, ...] | None = None,
|
|
32
|
+
allow_origin_regex: str | None = None,
|
|
33
|
+
allow_methods: str
|
|
34
|
+
| list[str]
|
|
35
|
+
| tuple[str, ...] = "GET,POST,PUT,PATCH,DELETE,OPTIONS",
|
|
36
|
+
allow_headers: str | list[str] | tuple[str, ...] = "*",
|
|
32
37
|
allow_credentials: bool = False,
|
|
33
38
|
max_age: int = 600,
|
|
34
39
|
) -> None:
|
|
35
40
|
super().__init__(
|
|
36
41
|
app,
|
|
37
42
|
allow_origin=allow_origin,
|
|
43
|
+
allow_origins=allow_origins,
|
|
44
|
+
allow_origin_regex=allow_origin_regex,
|
|
38
45
|
allow_methods=allow_methods,
|
|
39
46
|
allow_headers=allow_headers,
|
|
40
47
|
allow_credentials=allow_credentials,
|
|
41
48
|
max_age=max_age,
|
|
42
49
|
)
|
|
43
50
|
self.allow_origin = allow_origin
|
|
44
|
-
self.
|
|
45
|
-
self.
|
|
51
|
+
self.allow_origins = list(allow_origins or [])
|
|
52
|
+
self.allow_origin_regex = allow_origin_regex
|
|
53
|
+
self._allow_origin_pattern = (
|
|
54
|
+
re.compile(allow_origin_regex) if allow_origin_regex else None
|
|
55
|
+
)
|
|
56
|
+
self.allow_methods = self._normalize_listish(allow_methods)
|
|
57
|
+
self.allow_headers = self._normalize_listish(allow_headers)
|
|
46
58
|
self.allow_credentials = allow_credentials
|
|
47
59
|
self.max_age = max_age
|
|
48
60
|
|
|
61
|
+
@staticmethod
|
|
62
|
+
def _normalize_listish(value: str | list[str] | tuple[str, ...]) -> str:
|
|
63
|
+
if isinstance(value, str):
|
|
64
|
+
return value
|
|
65
|
+
return ",".join(item.strip() for item in value)
|
|
66
|
+
|
|
49
67
|
def _resolve_allow_origin(self, request_headers: Headers) -> str:
|
|
50
68
|
origin = request_headers.get("origin")
|
|
51
|
-
if
|
|
69
|
+
if not origin:
|
|
70
|
+
return self.allow_origin
|
|
71
|
+
|
|
72
|
+
if self._allow_origin_pattern and self._allow_origin_pattern.match(origin):
|
|
73
|
+
return origin
|
|
74
|
+
|
|
75
|
+
if self.allow_origins:
|
|
76
|
+
if origin in self.allow_origins:
|
|
77
|
+
return origin
|
|
78
|
+
return "null"
|
|
79
|
+
|
|
80
|
+
if self.allow_origin == "*":
|
|
52
81
|
return self.allow_origin
|
|
82
|
+
|
|
53
83
|
allowed = [candidate.strip() for candidate in self.allow_origin.split(",")]
|
|
54
84
|
if origin in allowed:
|
|
55
85
|
return origin
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
|
-
from .spec import ASGIApp, ASGIReceive, ASGISend, WSGIApp, WSGIStartResponse
|
|
7
|
+
from .spec import ASGIApp, ASGIReceive, ASGISend, Message, WSGIApp, WSGIStartResponse
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class Middleware:
|
|
@@ -16,7 +16,7 @@ class Middleware:
|
|
|
16
16
|
|
|
17
17
|
async def asgi(
|
|
18
18
|
self,
|
|
19
|
-
scope:
|
|
19
|
+
scope: Message,
|
|
20
20
|
receive: ASGIReceive,
|
|
21
21
|
send: ASGISend,
|
|
22
22
|
) -> None:
|
|
@@ -5,8 +5,9 @@ from __future__ import annotations
|
|
|
5
5
|
from collections.abc import Awaitable, Callable
|
|
6
6
|
from typing import Any, Protocol
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
Message = dict[str, Any]
|
|
9
|
+
ASGIReceive = Callable[[], Awaitable[Message]]
|
|
10
|
+
ASGISend = Callable[[Message], Awaitable[None]]
|
|
10
11
|
ASGIApp = Callable[[dict[str, Any], ASGIReceive, ASGISend], Awaitable[None]]
|
|
11
12
|
WSGIStartResponse = Callable[..., Any]
|
|
12
13
|
WSGIApp = Callable[[dict[str, Any], WSGIStartResponse], list[bytes]]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|