tigrbl 0.3.16.dev5__tar.gz → 0.3.17__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}/PKG-INFO +34 -9
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/README.md +24 -7
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/pyproject.toml +24 -10
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/README.md +1 -1
- tigrbl-0.3.17/tigrbl/__init__.py +332 -0
- tigrbl-0.3.17/tigrbl/config/__init__.py +3 -0
- tigrbl-0.3.17/tigrbl/config/constants.py +3 -0
- tigrbl-0.3.17/tigrbl/config/defaults.py +3 -0
- tigrbl-0.3.17/tigrbl/ddl/__init__.py +3 -0
- tigrbl-0.3.17/tigrbl/decorators/__init__.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/allow_anon.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/engine.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/hook.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/middlewares.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/op.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/response.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/rest.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/router.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/schema.py +1 -0
- tigrbl-0.3.17/tigrbl/decorators/session.py +1 -0
- tigrbl-0.3.17/tigrbl/docs/session.md +11 -0
- tigrbl-0.3.17/tigrbl/engine/__init__.py +1 -0
- tigrbl-0.3.17/tigrbl/engine/bind.py +1 -0
- tigrbl-0.3.17/tigrbl/engine/builders.py +1 -0
- tigrbl-0.3.17/tigrbl/engine/capabilities.py +1 -0
- tigrbl-0.3.17/tigrbl/engine/collect.py +1 -0
- tigrbl-0.3.17/tigrbl/engine/plugins.py +1 -0
- tigrbl-0.3.17/tigrbl/engine/registry.py +1 -0
- tigrbl-0.3.17/tigrbl/engine/resolver.py +8 -0
- tigrbl-0.3.17/tigrbl/hook/exceptions.py +3 -0
- tigrbl-0.3.17/tigrbl/hook/types.py +10 -0
- tigrbl-0.3.17/tigrbl/op/__init__.py +22 -0
- tigrbl-0.3.17/tigrbl/op/canonical.py +3 -0
- tigrbl-0.3.17/tigrbl/op/collect.py +3 -0
- tigrbl-0.3.17/tigrbl/op/types.py +3 -0
- tigrbl-0.3.17/tigrbl/orm/__init__.py +32 -0
- tigrbl-0.3.17/tigrbl/requests.py +5 -0
- tigrbl-0.3.17/tigrbl/rest/__init__.py +15 -0
- tigrbl-0.3.17/tigrbl/schema/__init__.py +3 -0
- tigrbl-0.3.17/tigrbl/schema/builder/__init__.py +3 -0
- tigrbl-0.3.17/tigrbl/schema/builder/build_schema.py +3 -0
- tigrbl-0.3.17/tigrbl/schema/builder/cache.py +3 -0
- tigrbl-0.3.17/tigrbl/schema/builder/extras.py +3 -0
- tigrbl-0.3.17/tigrbl/schema/builder/helpers.py +3 -0
- tigrbl-0.3.17/tigrbl/schema/builder/list_params.py +3 -0
- tigrbl-0.3.17/tigrbl/schema/builder/strip_parent_fields.py +3 -0
- tigrbl-0.3.17/tigrbl/schema/utils.py +9 -0
- tigrbl-0.3.17/tigrbl/security/__init__.py +3 -0
- tigrbl-0.3.17/tigrbl/security/dependencies.py +3 -0
- tigrbl-0.3.17/tigrbl/shortcuts/__init__.py +31 -0
- tigrbl-0.3.17/tigrbl/shortcuts/app.py +3 -0
- tigrbl-0.3.16.dev5/tigrbl/column/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/column.py +5 -5
- tigrbl-0.3.16.dev5/tigrbl/engine/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/engine.py +19 -17
- tigrbl-0.3.16.dev5/tigrbl/hook/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/hook.py +3 -3
- tigrbl-0.3.17/tigrbl/shortcuts/op.py +14 -0
- tigrbl-0.3.16.dev5/tigrbl/responses/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/responses.py +8 -10
- tigrbl-0.3.16.dev5/tigrbl/router/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/router.py +4 -18
- tigrbl-0.3.16.dev5/tigrbl/schema/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/schema.py +3 -3
- tigrbl-0.3.16.dev5/tigrbl/table/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/table.py +2 -2
- tigrbl-0.3.17/tigrbl/specs.py +38 -0
- tigrbl-0.3.17/tigrbl/system/__init__.py +3 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/diagnostics/__init__.py +2 -0
- tigrbl-0.3.17/tigrbl/system/diagnostics/healthz.py +69 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/diagnostics/hookz.py +6 -6
- tigrbl-0.3.17/tigrbl/system/diagnostics/kernelz.py +57 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/diagnostics/methodz.py +2 -2
- tigrbl-0.3.17/tigrbl/system/diagnostics/router.py +208 -0
- tigrbl-0.3.17/tigrbl/system/diagnostics/utils.py +63 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/lens.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/helpers.py +28 -9
- tigrbl-0.3.17/tigrbl/system/docs/openapi/mount.py +85 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/schema.py +27 -11
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openrpc.py +44 -15
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/swagger.py +1 -1
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/favicon/__init__.py +28 -18
- tigrbl-0.3.17/tigrbl/transport/__init__.py +1 -0
- tigrbl-0.3.17/tigrbl/transport/jsonrpc/__init__.py +1 -0
- tigrbl-0.3.17/tigrbl/transport/jsonrpc/helpers.py +1 -0
- tigrbl-0.3.17/tigrbl/transport/jsonrpc/models.py +1 -0
- tigrbl-0.3.17/tigrbl/transport/rest/__init__.py +1 -0
- tigrbl-0.3.17/tigrbl/transport/rest/aggregator.py +1 -0
- tigrbl-0.3.17/tigrbl/types/__init__.py +35 -0
- tigrbl-0.3.17/tigrbl/utils/__init__.py +3 -0
- tigrbl-0.3.16.dev5/tigrbl/schema/get_schema.py → tigrbl-0.3.17/tigrbl/utils/schema.py +1 -1
- tigrbl-0.3.17/tigrbl/vendor/__init__.py +21 -0
- tigrbl-0.3.17/tigrbl/vendor/jinja.py +34 -0
- {tigrbl-0.3.16.dev5/tigrbl/deps → tigrbl-0.3.17/tigrbl/vendor}/sqlalchemy.py +2 -0
- tigrbl-0.3.16.dev5/tigrbl/__init__.py +0 -137
- 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/shortcuts.py +0 -65
- tigrbl-0.3.16.dev5/tigrbl/app/tigrbl_app.py +0 -694
- 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/columns.py +0 -49
- tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/__init__.py +0 -10
- tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/builder.py +0 -118
- tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/ctx.py +0 -73
- tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/identifiers.py +0 -227
- tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/namespaces.py +0 -50
- tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/steps.py +0 -277
- tigrbl-0.3.16.dev5/tigrbl/bindings/hooks.py +0 -311
- tigrbl-0.3.16.dev5/tigrbl/bindings/model.py +0 -205
- tigrbl-0.3.16.dev5/tigrbl/bindings/model_helpers.py +0 -139
- tigrbl-0.3.16.dev5/tigrbl/bindings/model_registry.py +0 -85
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/__init__.py +0 -7
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/attach.py +0 -34
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/collection.py +0 -345
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/common.py +0 -134
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/helpers.py +0 -119
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/io.py +0 -333
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/io_headers.py +0 -49
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/member.py +0 -337
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/router.py +0 -342
- tigrbl-0.3.16.dev5/tigrbl/bindings/rest/routing.py +0 -160
- tigrbl-0.3.16.dev5/tigrbl/bindings/router/__init__.py +0 -15
- tigrbl-0.3.16.dev5/tigrbl/bindings/router/common.py +0 -108
- tigrbl-0.3.16.dev5/tigrbl/bindings/router/include.py +0 -277
- tigrbl-0.3.16.dev5/tigrbl/bindings/router/resource_proxy.py +0 -122
- tigrbl-0.3.16.dev5/tigrbl/bindings/router/rpc.py +0 -112
- tigrbl-0.3.16.dev5/tigrbl/bindings/rpc.py +0 -383
- tigrbl-0.3.16.dev5/tigrbl/bindings/schemas/__init__.py +0 -10
- tigrbl-0.3.16.dev5/tigrbl/bindings/schemas/builder.py +0 -347
- tigrbl-0.3.16.dev5/tigrbl/bindings/schemas/defaults.py +0 -259
- tigrbl-0.3.16.dev5/tigrbl/bindings/schemas/utils.py +0 -192
- tigrbl-0.3.16.dev5/tigrbl/column/__init__.py +0 -75
- tigrbl-0.3.16.dev5/tigrbl/column/_column.py +0 -96
- tigrbl-0.3.16.dev5/tigrbl/column/column_spec.py +0 -40
- tigrbl-0.3.16.dev5/tigrbl/column/field_spec.py +0 -32
- tigrbl-0.3.16.dev5/tigrbl/column/infer/__init__.py +0 -25
- tigrbl-0.3.16.dev5/tigrbl/column/infer/core.py +0 -92
- tigrbl-0.3.16.dev5/tigrbl/column/infer/jsonhints.py +0 -44
- tigrbl-0.3.16.dev5/tigrbl/column/infer/planning.py +0 -133
- tigrbl-0.3.16.dev5/tigrbl/column/infer/types.py +0 -102
- tigrbl-0.3.16.dev5/tigrbl/column/infer/utils.py +0 -59
- tigrbl-0.3.16.dev5/tigrbl/column/io_spec.py +0 -136
- tigrbl-0.3.16.dev5/tigrbl/column/mro_collect.py +0 -59
- tigrbl-0.3.16.dev5/tigrbl/column/storage_spec.py +0 -78
- tigrbl-0.3.16.dev5/tigrbl/config/__init__.py +0 -19
- tigrbl-0.3.16.dev5/tigrbl/config/constants.py +0 -224
- tigrbl-0.3.16.dev5/tigrbl/config/defaults.py +0 -32
- tigrbl-0.3.16.dev5/tigrbl/config/resolver.py +0 -299
- tigrbl-0.3.16.dev5/tigrbl/core/__init__.py +0 -47
- tigrbl-0.3.16.dev5/tigrbl/core/crud/__init__.py +0 -43
- tigrbl-0.3.16.dev5/tigrbl/core/crud/bulk.py +0 -167
- tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/__init__.py +0 -76
- tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/db.py +0 -91
- tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/enum.py +0 -85
- tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/filters.py +0 -161
- tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/model.py +0 -131
- tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/normalize.py +0 -98
- tigrbl-0.3.16.dev5/tigrbl/core/crud/ops.py +0 -234
- tigrbl-0.3.16.dev5/tigrbl/core/crud/params.py +0 -50
- tigrbl-0.3.16.dev5/tigrbl/core/resolver.py +0 -81
- tigrbl-0.3.16.dev5/tigrbl/ddl/__init__.py +0 -385
- 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/_engine.py +0 -144
- tigrbl-0.3.16.dev5/tigrbl/engine/bind.py +0 -38
- tigrbl-0.3.16.dev5/tigrbl/engine/builders.py +0 -244
- tigrbl-0.3.16.dev5/tigrbl/engine/capabilities.py +0 -29
- tigrbl-0.3.16.dev5/tigrbl/engine/collect.py +0 -116
- tigrbl-0.3.16.dev5/tigrbl/engine/decorators.py +0 -110
- tigrbl-0.3.16.dev5/tigrbl/engine/engine_spec.py +0 -358
- tigrbl-0.3.16.dev5/tigrbl/engine/plugins.py +0 -52
- tigrbl-0.3.16.dev5/tigrbl/engine/registry.py +0 -36
- tigrbl-0.3.16.dev5/tigrbl/engine/resolver.py +0 -358
- tigrbl-0.3.16.dev5/tigrbl/headers/__init__.py +0 -3
- tigrbl-0.3.16.dev5/tigrbl/headers/_header.py +0 -142
- 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/hook/decorators.py +0 -35
- tigrbl-0.3.16.dev5/tigrbl/hook/exceptions.py +0 -18
- tigrbl-0.3.16.dev5/tigrbl/hook/hook_spec.py +0 -24
- tigrbl-0.3.16.dev5/tigrbl/hook/mro_collect.py +0 -98
- tigrbl-0.3.16.dev5/tigrbl/hook/types.py +0 -76
- tigrbl-0.3.16.dev5/tigrbl/middlewares/__init__.py +0 -37
- tigrbl-0.3.16.dev5/tigrbl/middlewares/base.py +0 -142
- tigrbl-0.3.16.dev5/tigrbl/middlewares/cors.py +0 -167
- tigrbl-0.3.16.dev5/tigrbl/middlewares/decorators.py +0 -32
- tigrbl-0.3.16.dev5/tigrbl/middlewares/middleware.py +0 -37
- tigrbl-0.3.16.dev5/tigrbl/middlewares/spec.py +0 -28
- tigrbl-0.3.16.dev5/tigrbl/op/__init__.py +0 -54
- tigrbl-0.3.16.dev5/tigrbl/op/_op.py +0 -31
- tigrbl-0.3.16.dev5/tigrbl/op/alias.py +0 -42
- tigrbl-0.3.16.dev5/tigrbl/op/alias_spec.py +0 -35
- tigrbl-0.3.16.dev5/tigrbl/op/canonical.py +0 -31
- tigrbl-0.3.16.dev5/tigrbl/op/collect.py +0 -11
- tigrbl-0.3.16.dev5/tigrbl/op/decorators.py +0 -223
- tigrbl-0.3.16.dev5/tigrbl/op/model_registry.py +0 -301
- tigrbl-0.3.16.dev5/tigrbl/op/mro_collect.py +0 -97
- tigrbl-0.3.16.dev5/tigrbl/op/op_spec.py +0 -90
- tigrbl-0.3.16.dev5/tigrbl/op/resolver.py +0 -216
- tigrbl-0.3.16.dev5/tigrbl/op/types.py +0 -71
- tigrbl-0.3.16.dev5/tigrbl/orm/__init__.py +0 -1
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/_RowBound.py +0 -83
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/__init__.py +0 -95
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/bootstrappable.py +0 -113
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/bound.py +0 -47
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/edges.py +0 -40
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/fields.py +0 -165
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/hierarchy.py +0 -54
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/key_digest.py +0 -44
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/lifecycle.py +0 -115
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/locks.py +0 -51
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/markers.py +0 -16
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/operations.py +0 -57
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/ownable.py +0 -337
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/principals.py +0 -98
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/tenant_bound.py +0 -301
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/upsertable.py +0 -118
- tigrbl-0.3.16.dev5/tigrbl/orm/mixins/utils.py +0 -49
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/__init__.py +0 -72
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/_base.py +0 -8
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/audit.py +0 -56
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/client.py +0 -25
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/group.py +0 -29
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/org.py +0 -30
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/rbac.py +0 -76
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/status.py +0 -106
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/tenant.py +0 -22
- tigrbl-0.3.16.dev5/tigrbl/orm/tables/user.py +0 -39
- tigrbl-0.3.16.dev5/tigrbl/requests/__init__.py +0 -5
- tigrbl-0.3.16.dev5/tigrbl/requests/_request.py +0 -251
- tigrbl-0.3.16.dev5/tigrbl/requests/adapters.py +0 -68
- 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/_response.py +0 -278
- 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/responses/decorators.py +0 -45
- tigrbl-0.3.16.dev5/tigrbl/responses/resolver.py +0 -83
- tigrbl-0.3.16.dev5/tigrbl/responses/types.py +0 -49
- 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/_route.py +0 -119
- 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/decorators.py +0 -115
- tigrbl-0.3.16.dev5/tigrbl/router/mro_collect.py +0 -45
- tigrbl-0.3.16.dev5/tigrbl/router/resolve.py +0 -151
- tigrbl-0.3.16.dev5/tigrbl/router/router_spec.py +0 -30
- tigrbl-0.3.16.dev5/tigrbl/router/tigrbl_router.py +0 -362
- tigrbl-0.3.16.dev5/tigrbl/runtime/README.md +0 -129
- tigrbl-0.3.16.dev5/tigrbl/runtime/__init__.py +0 -20
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/__init__.py +0 -103
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/dep/__init__.py +0 -15
- 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/emit/__init__.py +0 -42
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/emit/paired_post.py +0 -158
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/emit/paired_pre.py +0 -106
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -120
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/out/__init__.py +0 -38
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/out/masking.py +0 -135
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/refresh/__init__.py +0 -38
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/refresh/demand.py +0 -130
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/resolve/__init__.py +0 -40
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/resolve/assemble.py +0 -167
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/resolve/paired_gen.py +0 -147
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/__init__.py +0 -19
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/headers_from_payload.py +0 -57
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/negotiate.py +0 -30
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/negotiation.py +0 -43
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/render.py +0 -36
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/renderer.py +0 -117
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/template.py +0 -44
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/templates.py +0 -88
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/schema/__init__.py +0 -40
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/schema/collect_in.py +0 -21
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/schema/collect_out.py +0 -21
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/storage/__init__.py +0 -38
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/storage/to_stored.py +0 -167
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/__init__.py +0 -45
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/build_in.py +0 -166
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/build_out.py +0 -87
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/dump.py +0 -206
- tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/validate_in.py +0 -228
- tigrbl-0.3.16.dev5/tigrbl/runtime/context.py +0 -206
- tigrbl-0.3.16.dev5/tigrbl/runtime/events.py +0 -251
- tigrbl-0.3.16.dev5/tigrbl/runtime/executor/__init__.py +0 -6
- tigrbl-0.3.16.dev5/tigrbl/runtime/executor/guards.py +0 -132
- tigrbl-0.3.16.dev5/tigrbl/runtime/executor/helpers.py +0 -88
- tigrbl-0.3.16.dev5/tigrbl/runtime/executor/invoke.py +0 -150
- tigrbl-0.3.16.dev5/tigrbl/runtime/executor/types.py +0 -76
- tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/__init__.py +0 -44
- tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/atoms.py +0 -189
- tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/cache.py +0 -85
- 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/opview_compiler.py +0 -93
- tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/payload.py +0 -74
- tigrbl-0.3.16.dev5/tigrbl/runtime/labels.py +0 -353
- tigrbl-0.3.16.dev5/tigrbl/runtime/opview.py +0 -89
- tigrbl-0.3.16.dev5/tigrbl/runtime/ordering.py +0 -258
- tigrbl-0.3.16.dev5/tigrbl/runtime/status/__init__.py +0 -63
- tigrbl-0.3.16.dev5/tigrbl/runtime/status/converters.py +0 -213
- tigrbl-0.3.16.dev5/tigrbl/runtime/status/exceptions.py +0 -149
- tigrbl-0.3.16.dev5/tigrbl/runtime/status/mappings.py +0 -94
- tigrbl-0.3.16.dev5/tigrbl/runtime/status/utils.py +0 -114
- tigrbl-0.3.16.dev5/tigrbl/runtime/system.py +0 -279
- tigrbl-0.3.16.dev5/tigrbl/runtime/trace.py +0 -330
- tigrbl-0.3.16.dev5/tigrbl/schema/__init__.py +0 -38
- tigrbl-0.3.16.dev5/tigrbl/schema/_schema.py +0 -27
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/__init__.py +0 -17
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/build_schema.py +0 -215
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/cache.py +0 -24
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/compat.py +0 -16
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/extras.py +0 -85
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/helpers.py +0 -51
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/list_params.py +0 -117
- tigrbl-0.3.16.dev5/tigrbl/schema/builder/strip_parent_fields.py +0 -70
- tigrbl-0.3.16.dev5/tigrbl/schema/collect.py +0 -78
- tigrbl-0.3.16.dev5/tigrbl/schema/decorators.py +0 -67
- tigrbl-0.3.16.dev5/tigrbl/schema/schema_spec.py +0 -20
- tigrbl-0.3.16.dev5/tigrbl/schema/types.py +0 -34
- tigrbl-0.3.16.dev5/tigrbl/schema/utils.py +0 -142
- tigrbl-0.3.16.dev5/tigrbl/security/__init__.py +0 -63
- tigrbl-0.3.16.dev5/tigrbl/security/dependencies.py +0 -21
- tigrbl-0.3.16.dev5/tigrbl/security/schemes/__init__.py +0 -19
- tigrbl-0.3.16.dev5/tigrbl/security/schemes/_base.py +0 -69
- tigrbl-0.3.16.dev5/tigrbl/security/schemes/api_key.py +0 -57
- tigrbl-0.3.16.dev5/tigrbl/security/schemes/http_bearer.py +0 -74
- tigrbl-0.3.16.dev5/tigrbl/security/schemes/mutual_tls.py +0 -27
- tigrbl-0.3.16.dev5/tigrbl/security/schemes/oauth2.py +0 -28
- tigrbl-0.3.16.dev5/tigrbl/security/schemes/openid_connect.py +0 -31
- 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/base.py +0 -151
- tigrbl-0.3.16.dev5/tigrbl/session/decorators.py +0 -43
- tigrbl-0.3.16.dev5/tigrbl/session/default.py +0 -118
- tigrbl-0.3.16.dev5/tigrbl/session/shortcuts.py +0 -50
- tigrbl-0.3.16.dev5/tigrbl/session/spec.py +0 -112
- 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/__init__.py +0 -98
- 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/kernelz.py +0 -20
- tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/router.py +0 -74
- tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/utils.py +0 -43
- 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/_base.py +0 -439
- 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/background.py +0 -29
- tigrbl-0.3.16.dev5/tigrbl/transport/dispatch.py +0 -175
- tigrbl-0.3.16.dev5/tigrbl/transport/httpx.py +0 -25
- 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/transport/jsonrpc/helpers.py +0 -98
- tigrbl-0.3.16.dev5/tigrbl/transport/jsonrpc/models.py +0 -41
- tigrbl-0.3.16.dev5/tigrbl/transport/rest/__init__.py +0 -30
- tigrbl-0.3.16.dev5/tigrbl/transport/rest/aggregator.py +0 -118
- tigrbl-0.3.16.dev5/tigrbl/types/__init__.py +0 -168
- tigrbl-0.3.16.dev5/tigrbl/types/allow_anon_provider.py +0 -19
- tigrbl-0.3.16.dev5/tigrbl/types/authn_abc.py +0 -31
- tigrbl-0.3.16.dev5/tigrbl/types/nested_path_provider.py +0 -22
- tigrbl-0.3.16.dev5/tigrbl/types/op.py +0 -35
- tigrbl-0.3.16.dev5/tigrbl/types/op_config_provider.py +0 -17
- tigrbl-0.3.16.dev5/tigrbl/types/op_verb_alias_provider.py +0 -33
- tigrbl-0.3.16.dev5/tigrbl/types/request_extras_provider.py +0 -22
- tigrbl-0.3.16.dev5/tigrbl/types/response_extras_provider.py +0 -22
- tigrbl-0.3.16.dev5/tigrbl/types/table_config_provider.py +0 -13
- tigrbl-0.3.16.dev5/tigrbl/types/uuid.py +0 -55
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/LICENSE +0 -0
- /tigrbl-0.3.16.dev5/tigrbl/column/README.md → /tigrbl-0.3.17/tigrbl/docs/column_specs.md +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/docs/verbosity.md +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/engine/docs/PLUGINS.md +0 -0
- {tigrbl-0.3.16.dev5/tigrbl/app → tigrbl-0.3.17/tigrbl/middlewares}/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/middlewares/compose.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/__init__.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/metadata.py +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/favicon/assets/favicon.svg +0 -0
- {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/uvicorn.py +0 -0
- {tigrbl-0.3.16.dev5/tigrbl/deps → tigrbl-0.3.17/tigrbl/vendor}/pydantic.py +0 -0
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tigrbl
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.17
|
|
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
|
|
7
|
-
Keywords: tigrbl,sdk,standards,asgi,rest,rpc
|
|
8
7
|
Author: Jacob Stewart
|
|
9
8
|
Author-email: jacob@swarmauri.com
|
|
10
9
|
Requires-Python: >=3.10,<3.13
|
|
@@ -27,6 +26,15 @@ Requires-Dist: jinja2 (>=3.1.4) ; extra == "templates"
|
|
|
27
26
|
Requires-Dist: psycopg2-binary (>=2.9.9) ; extra == "postgres"
|
|
28
27
|
Requires-Dist: pydantic (>=2.0.0)
|
|
29
28
|
Requires-Dist: sqlalchemy (>=2.0)
|
|
29
|
+
Requires-Dist: tigrbl-atoms
|
|
30
|
+
Requires-Dist: tigrbl-base
|
|
31
|
+
Requires-Dist: tigrbl-canon
|
|
32
|
+
Requires-Dist: tigrbl-concrete
|
|
33
|
+
Requires-Dist: tigrbl-core
|
|
34
|
+
Requires-Dist: tigrbl-kernel
|
|
35
|
+
Requires-Dist: tigrbl-ops-oltp
|
|
36
|
+
Requires-Dist: tigrbl-orm
|
|
37
|
+
Requires-Dist: tigrbl-runtime
|
|
30
38
|
Requires-Dist: tigrbl-tests ; extra == "tests"
|
|
31
39
|
Requires-Dist: uvicorn
|
|
32
40
|
Description-Content-Type: text/markdown
|
|
@@ -59,6 +67,23 @@ A high-leverage ASGI meta-framework that turns plain SQLAlchemy models into a fu
|
|
|
59
67
|
- 🧩 Pluggable engine and provider abstractions
|
|
60
68
|
- 🚀 Built as an ASGI-native framework with Pydantic-powered schema generation
|
|
61
69
|
|
|
70
|
+
## Split Package Module Locations 🗂️
|
|
71
|
+
|
|
72
|
+
These surfaces are now maintained in the split Tigrbl packages (with `tigrbl.*`
|
|
73
|
+
kept as compatibility imports):
|
|
74
|
+
|
|
75
|
+
- `tigrbl.ddl` → `tigrbl_concrete.ddl`
|
|
76
|
+
- `tigrbl.system` → `tigrbl_concrete.system`
|
|
77
|
+
- `tigrbl.op` → `tigrbl_core.op`
|
|
78
|
+
- `tigrbl.config` → `tigrbl_core.config`
|
|
79
|
+
- `tigrbl.schema` → `tigrbl_core.schema`
|
|
80
|
+
- `tigrbl.security` → `tigrbl_concrete.security`
|
|
81
|
+
|
|
82
|
+
## Runtime-owned Routing Contract
|
|
83
|
+
|
|
84
|
+
For the kernel-first flow that avoids pre-runtime REST/RPC dispatching, see
|
|
85
|
+
[`RUNTIME_OWNED_ROUTING.md`](./RUNTIME_OWNED_ROUTING.md).
|
|
86
|
+
|
|
62
87
|
## Terminology 📚
|
|
63
88
|
|
|
64
89
|
- **Tenant** 🏢 – a namespace used to group related resources.
|
|
@@ -223,7 +248,7 @@ Operation Handler
|
|
|
223
248
|
v
|
|
224
249
|
JSON-RPC Response
|
|
225
250
|
|
|
226
|
-
|
|
251
|
+
```
|
|
227
252
|
|
|
228
253
|
## Hooks 🪝
|
|
229
254
|
|
|
@@ -240,7 +265,7 @@ class Item(Base):
|
|
|
240
265
|
async def validate(cls, ctx):
|
|
241
266
|
if ctx["request"].payload.get("name") == "bad":
|
|
242
267
|
raise ValueError("invalid name")
|
|
243
|
-
|
|
268
|
+
```
|
|
244
269
|
|
|
245
270
|
The function runs during the `PRE_HANDLER` phase of `create`. The
|
|
246
271
|
`ctx` mapping provides request and response objects, a database session,
|
|
@@ -457,7 +482,7 @@ compatible with engine resolution across app, router, table, and op scopes.
|
|
|
457
482
|
✅ **Preferred:**
|
|
458
483
|
```python
|
|
459
484
|
from tigrbl.engine.shortcuts import engine_spec
|
|
460
|
-
from tigrbl.engine
|
|
485
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
461
486
|
|
|
462
487
|
spec = engine_spec(kind="postgres", async_=True, host="db", name="app_db")
|
|
463
488
|
|
|
@@ -606,7 +631,7 @@ resolved deterministically by the runtime.
|
|
|
606
631
|
✅ **Preferred:**
|
|
607
632
|
```python
|
|
608
633
|
from tigrbl import hook_ctx, op_ctx, schema_ctx
|
|
609
|
-
from tigrbl.engine
|
|
634
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
610
635
|
|
|
611
636
|
@engine_ctx(kind="sqlite", mode="memory")
|
|
612
637
|
class Item(Table):
|
|
@@ -629,7 +654,7 @@ async def validate(ctx):
|
|
|
629
654
|
|
|
630
655
|
```python
|
|
631
656
|
from tigrbl.engine.shortcuts import engine_spec, prov
|
|
632
|
-
from tigrbl.
|
|
657
|
+
from tigrbl._concrete._engine import Engine, Provider
|
|
633
658
|
|
|
634
659
|
# Build an EngineSpec from a DSN string
|
|
635
660
|
spec = engine_spec("sqlite://:memory:")
|
|
@@ -656,7 +681,7 @@ provider_pg = Provider(spec_pg)
|
|
|
656
681
|
`engine_ctx` binds database configuration to different layers. It accepts a
|
|
657
682
|
DSN string, a mapping, an `EngineSpec`, a `Provider`, or an `Engine`. The
|
|
658
683
|
resolver chooses the most specific binding in the order
|
|
659
|
-
`op > table >
|
|
684
|
+
`op > table > router > app`.
|
|
660
685
|
|
|
661
686
|
#### Engine precedence 🥇
|
|
662
687
|
|
|
@@ -700,7 +725,7 @@ create.__tigrbl_engine_ctx__ = {
|
|
|
700
725
|
#### Decorative bindings 🎛️
|
|
701
726
|
|
|
702
727
|
```python
|
|
703
|
-
from tigrbl.engine
|
|
728
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
704
729
|
from tigrbl.engine.shortcuts import prov, engine
|
|
705
730
|
|
|
706
731
|
@engine_ctx(prov(kind="sqlite", mode="memory"))
|
|
@@ -26,6 +26,23 @@ 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
|
+
## Split Package Module Locations 🗂️
|
|
30
|
+
|
|
31
|
+
These surfaces are now maintained in the split Tigrbl packages (with `tigrbl.*`
|
|
32
|
+
kept as compatibility imports):
|
|
33
|
+
|
|
34
|
+
- `tigrbl.ddl` → `tigrbl_concrete.ddl`
|
|
35
|
+
- `tigrbl.system` → `tigrbl_concrete.system`
|
|
36
|
+
- `tigrbl.op` → `tigrbl_core.op`
|
|
37
|
+
- `tigrbl.config` → `tigrbl_core.config`
|
|
38
|
+
- `tigrbl.schema` → `tigrbl_core.schema`
|
|
39
|
+
- `tigrbl.security` → `tigrbl_concrete.security`
|
|
40
|
+
|
|
41
|
+
## Runtime-owned Routing Contract
|
|
42
|
+
|
|
43
|
+
For the kernel-first flow that avoids pre-runtime REST/RPC dispatching, see
|
|
44
|
+
[`RUNTIME_OWNED_ROUTING.md`](./RUNTIME_OWNED_ROUTING.md).
|
|
45
|
+
|
|
29
46
|
## Terminology 📚
|
|
30
47
|
|
|
31
48
|
- **Tenant** 🏢 – a namespace used to group related resources.
|
|
@@ -190,7 +207,7 @@ Operation Handler
|
|
|
190
207
|
v
|
|
191
208
|
JSON-RPC Response
|
|
192
209
|
|
|
193
|
-
|
|
210
|
+
```
|
|
194
211
|
|
|
195
212
|
## Hooks 🪝
|
|
196
213
|
|
|
@@ -207,7 +224,7 @@ class Item(Base):
|
|
|
207
224
|
async def validate(cls, ctx):
|
|
208
225
|
if ctx["request"].payload.get("name") == "bad":
|
|
209
226
|
raise ValueError("invalid name")
|
|
210
|
-
|
|
227
|
+
```
|
|
211
228
|
|
|
212
229
|
The function runs during the `PRE_HANDLER` phase of `create`. The
|
|
213
230
|
`ctx` mapping provides request and response objects, a database session,
|
|
@@ -424,7 +441,7 @@ compatible with engine resolution across app, router, table, and op scopes.
|
|
|
424
441
|
✅ **Preferred:**
|
|
425
442
|
```python
|
|
426
443
|
from tigrbl.engine.shortcuts import engine_spec
|
|
427
|
-
from tigrbl.engine
|
|
444
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
428
445
|
|
|
429
446
|
spec = engine_spec(kind="postgres", async_=True, host="db", name="app_db")
|
|
430
447
|
|
|
@@ -573,7 +590,7 @@ resolved deterministically by the runtime.
|
|
|
573
590
|
✅ **Preferred:**
|
|
574
591
|
```python
|
|
575
592
|
from tigrbl import hook_ctx, op_ctx, schema_ctx
|
|
576
|
-
from tigrbl.engine
|
|
593
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
577
594
|
|
|
578
595
|
@engine_ctx(kind="sqlite", mode="memory")
|
|
579
596
|
class Item(Table):
|
|
@@ -596,7 +613,7 @@ async def validate(ctx):
|
|
|
596
613
|
|
|
597
614
|
```python
|
|
598
615
|
from tigrbl.engine.shortcuts import engine_spec, prov
|
|
599
|
-
from tigrbl.
|
|
616
|
+
from tigrbl._concrete._engine import Engine, Provider
|
|
600
617
|
|
|
601
618
|
# Build an EngineSpec from a DSN string
|
|
602
619
|
spec = engine_spec("sqlite://:memory:")
|
|
@@ -623,7 +640,7 @@ provider_pg = Provider(spec_pg)
|
|
|
623
640
|
`engine_ctx` binds database configuration to different layers. It accepts a
|
|
624
641
|
DSN string, a mapping, an `EngineSpec`, a `Provider`, or an `Engine`. The
|
|
625
642
|
resolver chooses the most specific binding in the order
|
|
626
|
-
`op > table >
|
|
643
|
+
`op > table > router > app`.
|
|
627
644
|
|
|
628
645
|
#### Engine precedence 🥇
|
|
629
646
|
|
|
@@ -667,7 +684,7 @@ create.__tigrbl_engine_ctx__ = {
|
|
|
667
684
|
#### Decorative bindings 🎛️
|
|
668
685
|
|
|
669
686
|
```python
|
|
670
|
-
from tigrbl.engine
|
|
687
|
+
from tigrbl.decorators.engine import engine_ctx
|
|
671
688
|
from tigrbl.engine.shortcuts import prov, engine
|
|
672
689
|
|
|
673
690
|
@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"
|
|
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"
|
|
@@ -18,22 +18,24 @@ classifiers = [
|
|
|
18
18
|
]
|
|
19
19
|
authors = [{ name = "Jacob Stewart", email = "jacob@swarmauri.com" }]
|
|
20
20
|
dependencies = [
|
|
21
|
+
"tigrbl-core",
|
|
22
|
+
"tigrbl-base",
|
|
23
|
+
"tigrbl-concrete",
|
|
24
|
+
"tigrbl-canon",
|
|
25
|
+
"tigrbl-orm",
|
|
26
|
+
"tigrbl-runtime",
|
|
27
|
+
"tigrbl-atoms",
|
|
28
|
+
"tigrbl-kernel",
|
|
29
|
+
"tigrbl-ops-oltp",
|
|
21
30
|
"pydantic>=2.0.0",
|
|
22
31
|
"sqlalchemy>=2.0",
|
|
23
32
|
"aiosqlite>=0.19.0",
|
|
24
33
|
"httpx>=0.27.0",
|
|
25
34
|
"greenlet>=3.2.3",
|
|
26
|
-
"uvicorn",
|
|
27
|
-
]
|
|
28
|
-
keywords = [
|
|
29
|
-
'tigrbl',
|
|
30
|
-
'sdk',
|
|
31
|
-
'standards',
|
|
32
|
-
'asgi',
|
|
33
|
-
'rest',
|
|
34
|
-
'rpc',
|
|
35
|
+
"uvicorn",
|
|
35
36
|
]
|
|
36
37
|
|
|
38
|
+
|
|
37
39
|
[project.optional-dependencies]
|
|
38
40
|
postgres = [
|
|
39
41
|
"asyncpg>=0.30.0",
|
|
@@ -47,7 +49,18 @@ tests = [
|
|
|
47
49
|
]
|
|
48
50
|
|
|
49
51
|
[tool.uv.sources]
|
|
52
|
+
"tigrbl-core" = { workspace = true }
|
|
53
|
+
"tigrbl-base" = { workspace = true }
|
|
54
|
+
"tigrbl-concrete" = { workspace = true }
|
|
55
|
+
"tigrbl-canon" = { workspace = true }
|
|
56
|
+
"tigrbl-orm" = { workspace = true }
|
|
57
|
+
"tigrbl-runtime" = { workspace = true }
|
|
58
|
+
"tigrbl-atoms" = { workspace = true }
|
|
59
|
+
"tigrbl-kernel" = { workspace = true }
|
|
60
|
+
"tigrbl-ops-oltp" = { workspace = true }
|
|
50
61
|
tigrbl-tests = { workspace = true }
|
|
62
|
+
tigrbl_client = { workspace = true }
|
|
63
|
+
|
|
51
64
|
|
|
52
65
|
[tool.pytest.ini_options]
|
|
53
66
|
norecursedirs = ["combined", "scripts"]
|
|
@@ -81,6 +94,7 @@ packages = [
|
|
|
81
94
|
|
|
82
95
|
[dependency-groups]
|
|
83
96
|
dev = [
|
|
97
|
+
"tigrbl_client",
|
|
84
98
|
"pytest>=8.0",
|
|
85
99
|
"pytest-asyncio>=0.24.0",
|
|
86
100
|
"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
|
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
"""Tigrbl public API facade over split core packages."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from importlib import import_module
|
|
6
|
+
from pkgutil import extend_path
|
|
7
|
+
import sys
|
|
8
|
+
|
|
9
|
+
__path__ = extend_path(__path__, __name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Compatibility aliases so legacy ``tigrbl.<segment>`` imports resolve to
|
|
13
|
+
# the new split packages.
|
|
14
|
+
_ALIAS_MODULES = {
|
|
15
|
+
"_spec": "tigrbl_core._spec",
|
|
16
|
+
"_base": "tigrbl_base._base",
|
|
17
|
+
"_concrete": "tigrbl_concrete._concrete",
|
|
18
|
+
"core": "tigrbl_ops_oltp",
|
|
19
|
+
"runtime": "tigrbl_runtime.runtime",
|
|
20
|
+
"executors": "tigrbl_runtime.executors",
|
|
21
|
+
"atoms": "tigrbl_atoms.atoms",
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _optional_import(path: str):
|
|
26
|
+
try:
|
|
27
|
+
return import_module(path)
|
|
28
|
+
except ImportError:
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _install_alias(alias: str, target: str) -> None:
|
|
33
|
+
module = _optional_import(target)
|
|
34
|
+
if module is None:
|
|
35
|
+
return
|
|
36
|
+
|
|
37
|
+
alias_name = f"{__name__}.{alias}"
|
|
38
|
+
sys.modules.setdefault(alias_name, module)
|
|
39
|
+
|
|
40
|
+
target_prefix = f"{target}."
|
|
41
|
+
alias_prefix = f"{alias_name}."
|
|
42
|
+
for name, loaded in tuple(sys.modules.items()):
|
|
43
|
+
if name.startswith(target_prefix):
|
|
44
|
+
suffix = name[len(target_prefix) :]
|
|
45
|
+
sys.modules.setdefault(f"{alias_prefix}{suffix}", loaded)
|
|
46
|
+
|
|
47
|
+
module_path = getattr(module, "__path__", None)
|
|
48
|
+
if not module_path:
|
|
49
|
+
return
|
|
50
|
+
|
|
51
|
+
from pkgutil import walk_packages
|
|
52
|
+
|
|
53
|
+
for info in walk_packages(module_path, target_prefix):
|
|
54
|
+
submodule = _optional_import(info.name)
|
|
55
|
+
if submodule is None:
|
|
56
|
+
continue
|
|
57
|
+
suffix = info.name[len(target_prefix) :]
|
|
58
|
+
sys.modules.setdefault(f"{alias_prefix}{suffix}", submodule)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
for alias, target in _ALIAS_MODULES.items():
|
|
62
|
+
_install_alias(alias, target)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
_spec = import_module("tigrbl_core._spec")
|
|
66
|
+
_base = import_module("tigrbl_base._base")
|
|
67
|
+
_concrete = import_module("tigrbl_concrete._concrete")
|
|
68
|
+
canon = None
|
|
69
|
+
orm = import_module("tigrbl_orm.orm")
|
|
70
|
+
runtime = _optional_import("tigrbl_runtime.runtime")
|
|
71
|
+
atoms = _optional_import("tigrbl_atoms.atoms")
|
|
72
|
+
kernel = None
|
|
73
|
+
core = _optional_import("tigrbl_ops_oltp")
|
|
74
|
+
|
|
75
|
+
# Backward-compatible names requested for top-level facade access.
|
|
76
|
+
specs = _spec
|
|
77
|
+
base = _base
|
|
78
|
+
concrete = _concrete
|
|
79
|
+
|
|
80
|
+
from tigrbl_concrete._concrete import ( # noqa: E402
|
|
81
|
+
APIKey,
|
|
82
|
+
Alias,
|
|
83
|
+
App,
|
|
84
|
+
BackgroundTask,
|
|
85
|
+
Column,
|
|
86
|
+
FileResponse,
|
|
87
|
+
ForeignKey,
|
|
88
|
+
Hook,
|
|
89
|
+
HTMLResponse,
|
|
90
|
+
HTTPBearer,
|
|
91
|
+
JSONResponse,
|
|
92
|
+
MutualTLS,
|
|
93
|
+
OAuth2,
|
|
94
|
+
OpenIdConnect,
|
|
95
|
+
Op,
|
|
96
|
+
PlainTextResponse,
|
|
97
|
+
RedirectResponse,
|
|
98
|
+
Request,
|
|
99
|
+
Response,
|
|
100
|
+
Route,
|
|
101
|
+
Router,
|
|
102
|
+
Schema,
|
|
103
|
+
StorageTransform,
|
|
104
|
+
StreamingResponse,
|
|
105
|
+
Table,
|
|
106
|
+
TableRegistry,
|
|
107
|
+
TigrblApp,
|
|
108
|
+
TigrblRouter,
|
|
109
|
+
)
|
|
110
|
+
from tigrbl_concrete._concrete.dependencies import Depends # noqa: E402
|
|
111
|
+
from tigrbl_runtime.runtime.status.exceptions import HTTPException # noqa: E402
|
|
112
|
+
from tigrbl.engine import resolver # noqa: E402
|
|
113
|
+
from tigrbl.system import mount_diagnostics # noqa: E402
|
|
114
|
+
from tigrbl_core.config.constants import DEFAULT_HTTP_METHODS, HOOK_DECLS_ATTR # noqa: E402
|
|
115
|
+
from tigrbl.decorators import ( # noqa: E402
|
|
116
|
+
alias,
|
|
117
|
+
allow_anon,
|
|
118
|
+
alias_ctx,
|
|
119
|
+
engine_ctx,
|
|
120
|
+
hook_ctx,
|
|
121
|
+
middleware,
|
|
122
|
+
middlewares,
|
|
123
|
+
op_alias,
|
|
124
|
+
op_ctx,
|
|
125
|
+
response_ctx,
|
|
126
|
+
route_ctx,
|
|
127
|
+
schema_ctx,
|
|
128
|
+
)
|
|
129
|
+
from tigrbl.shortcuts.op import op # noqa: E402
|
|
130
|
+
from tigrbl.schema import _build_list_params, _build_schema, get_schema # noqa: E402
|
|
131
|
+
from tigrbl.ddl import bootstrap_dbschema, ensure_schemas, register_sqlite_attach # noqa: E402
|
|
132
|
+
|
|
133
|
+
from tigrbl_base._base import ( # noqa: E402
|
|
134
|
+
AppBase,
|
|
135
|
+
ForeignKeyBase,
|
|
136
|
+
HookBase,
|
|
137
|
+
RouterBase,
|
|
138
|
+
TableBase,
|
|
139
|
+
TableRegistryBase,
|
|
140
|
+
)
|
|
141
|
+
from tigrbl_core._spec import ( # noqa: E402
|
|
142
|
+
AppSpec,
|
|
143
|
+
Arity,
|
|
144
|
+
ColumnSpec,
|
|
145
|
+
EngineSpec,
|
|
146
|
+
FieldSpec,
|
|
147
|
+
ForeignKeySpec,
|
|
148
|
+
HookPhase,
|
|
149
|
+
IOSpec,
|
|
150
|
+
OpSpec,
|
|
151
|
+
PersistPolicy,
|
|
152
|
+
PHASE,
|
|
153
|
+
PHASES,
|
|
154
|
+
RequestSpec,
|
|
155
|
+
ResponseSpec,
|
|
156
|
+
RouterSpec,
|
|
157
|
+
SchemaArg,
|
|
158
|
+
SchemaRef,
|
|
159
|
+
SchemaSpec,
|
|
160
|
+
SessionSpec,
|
|
161
|
+
StorageSpec,
|
|
162
|
+
StorageTransformSpec,
|
|
163
|
+
TableRegistrySpec,
|
|
164
|
+
TableSpec,
|
|
165
|
+
TargetOp,
|
|
166
|
+
TemplateSpec,
|
|
167
|
+
)
|
|
168
|
+
from tigrbl_runtime.runtime.executor import _invoke # noqa: E402
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def bind(*args, **kwargs):
|
|
172
|
+
return import_module("tigrbl_concrete._mapping.model").bind(*args, **kwargs)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def rebind(*args, **kwargs):
|
|
176
|
+
return import_module("tigrbl_concrete._mapping.model").rebind(*args, **kwargs)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def build_schemas(*args, **kwargs):
|
|
180
|
+
return import_module("tigrbl_concrete._mapping.model")._materialize_schemas(
|
|
181
|
+
*args, **kwargs
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def build_hooks(*args, **kwargs):
|
|
186
|
+
return import_module("tigrbl_concrete._mapping.model")._bind_model_hooks(
|
|
187
|
+
*args, **kwargs
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def build_handlers(*args, **kwargs):
|
|
192
|
+
mod = import_module("tigrbl_concrete._mapping.model")
|
|
193
|
+
specs = mod._materialize_handlers(*args, **kwargs)
|
|
194
|
+
model = args[0] if args else kwargs.get("model")
|
|
195
|
+
spec_arg = args[1] if len(args) > 1 else kwargs.get("specs", ())
|
|
196
|
+
spec_tuple = tuple(spec_arg or ())
|
|
197
|
+
if model is not None:
|
|
198
|
+
mod._bind_model_hooks(model, spec_tuple)
|
|
199
|
+
return specs
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def register_rpc(*args, **kwargs):
|
|
203
|
+
return import_module("tigrbl_base._base._rpc_map").register_and_attach(
|
|
204
|
+
*args, **kwargs
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def build_rest(*args, **kwargs):
|
|
209
|
+
if "router" not in kwargs:
|
|
210
|
+
kwargs["router"] = None
|
|
211
|
+
return import_module("tigrbl_concrete._mapping.model")._materialize_rest_router(
|
|
212
|
+
*args, **kwargs
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def include_tables(*args, **kwargs):
|
|
217
|
+
return import_module("tigrbl_concrete._mapping.router.include").include_tables(
|
|
218
|
+
*args, **kwargs
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
async def rpc_call(*args, **kwargs):
|
|
223
|
+
return await import_module("tigrbl_concrete._mapping.router.rpc").rpc_call(
|
|
224
|
+
*args, **kwargs
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
__all__ = [
|
|
229
|
+
"specs",
|
|
230
|
+
"base",
|
|
231
|
+
"concrete",
|
|
232
|
+
"canon",
|
|
233
|
+
"orm",
|
|
234
|
+
"runtime",
|
|
235
|
+
"atoms",
|
|
236
|
+
"kernel",
|
|
237
|
+
"core",
|
|
238
|
+
"TigrblApp",
|
|
239
|
+
"TigrblRouter",
|
|
240
|
+
"Router",
|
|
241
|
+
"Depends",
|
|
242
|
+
"HTTPException",
|
|
243
|
+
"TableBase",
|
|
244
|
+
"RouterBase",
|
|
245
|
+
"Op",
|
|
246
|
+
"op",
|
|
247
|
+
"HTTPBearer",
|
|
248
|
+
"APIKey",
|
|
249
|
+
"OAuth2",
|
|
250
|
+
"OpenIdConnect",
|
|
251
|
+
"MutualTLS",
|
|
252
|
+
"OpSpec",
|
|
253
|
+
"TargetOp",
|
|
254
|
+
"Arity",
|
|
255
|
+
"PersistPolicy",
|
|
256
|
+
"PHASE",
|
|
257
|
+
"PHASES",
|
|
258
|
+
"HookPhase",
|
|
259
|
+
"SchemaRef",
|
|
260
|
+
"SchemaArg",
|
|
261
|
+
"alias_ctx",
|
|
262
|
+
"op_ctx",
|
|
263
|
+
"route_ctx",
|
|
264
|
+
"hook_ctx",
|
|
265
|
+
"schema_ctx",
|
|
266
|
+
"response_ctx",
|
|
267
|
+
"alias",
|
|
268
|
+
"allow_anon",
|
|
269
|
+
"Alias",
|
|
270
|
+
"op_alias",
|
|
271
|
+
"engine_ctx",
|
|
272
|
+
"ResponseSpec",
|
|
273
|
+
"bind",
|
|
274
|
+
"rebind",
|
|
275
|
+
"build_schemas",
|
|
276
|
+
"build_hooks",
|
|
277
|
+
"build_handlers",
|
|
278
|
+
"register_rpc",
|
|
279
|
+
"build_rest",
|
|
280
|
+
"include_tables",
|
|
281
|
+
"rpc_call",
|
|
282
|
+
"_invoke",
|
|
283
|
+
"_build_schema",
|
|
284
|
+
"_build_list_params",
|
|
285
|
+
"get_schema",
|
|
286
|
+
"mount_diagnostics",
|
|
287
|
+
"ensure_schemas",
|
|
288
|
+
"register_sqlite_attach",
|
|
289
|
+
"bootstrap_dbschema",
|
|
290
|
+
"DEFAULT_HTTP_METHODS",
|
|
291
|
+
"Request",
|
|
292
|
+
"Response",
|
|
293
|
+
"JSONResponse",
|
|
294
|
+
"BackgroundTask",
|
|
295
|
+
"resolver",
|
|
296
|
+
"AppSpec",
|
|
297
|
+
"RouterSpec",
|
|
298
|
+
"TableSpec",
|
|
299
|
+
"TableRegistrySpec",
|
|
300
|
+
"ColumnSpec",
|
|
301
|
+
"FieldSpec",
|
|
302
|
+
"IOSpec",
|
|
303
|
+
"StorageSpec",
|
|
304
|
+
"StorageTransform",
|
|
305
|
+
"StorageTransformSpec",
|
|
306
|
+
"ForeignKeySpec",
|
|
307
|
+
"RequestSpec",
|
|
308
|
+
"SchemaSpec",
|
|
309
|
+
"SessionSpec",
|
|
310
|
+
"EngineSpec",
|
|
311
|
+
"TemplateSpec",
|
|
312
|
+
"ForeignKeyBase",
|
|
313
|
+
"HookBase",
|
|
314
|
+
"TableRegistryBase",
|
|
315
|
+
"AppBase",
|
|
316
|
+
"App",
|
|
317
|
+
"Table",
|
|
318
|
+
"Column",
|
|
319
|
+
"Route",
|
|
320
|
+
"Schema",
|
|
321
|
+
"Hook",
|
|
322
|
+
"ForeignKey",
|
|
323
|
+
"TableRegistry",
|
|
324
|
+
"HOOK_DECLS_ATTR",
|
|
325
|
+
"middleware",
|
|
326
|
+
"middlewares",
|
|
327
|
+
"FileResponse",
|
|
328
|
+
"HTMLResponse",
|
|
329
|
+
"PlainTextResponse",
|
|
330
|
+
"StreamingResponse",
|
|
331
|
+
"RedirectResponse",
|
|
332
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.allow_anon import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.engine import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.hook import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.middlewares import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.op import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.response import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.rest import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.router import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.schema import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete._decorators.session import * # noqa: F401,F403
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Session Architecture
|
|
2
|
+
|
|
3
|
+
Tigrbl session support is organized across core layers:
|
|
4
|
+
|
|
5
|
+
- `_spec/session_spec.py`: `SessionSpec` policy model plus helpers (`session_spec`, `tx_*`, `readonly`, `wrap_sessionmaker`).
|
|
6
|
+
- `_base/_session_abc.py`: `SessionABC` contract expected by runtime and adapters.
|
|
7
|
+
- `_base/_session_base.py`: `TigrblSessionBase` guardrails and transaction behavior.
|
|
8
|
+
- `_concrete/_session.py`: `DefaultSession` delegating wrapper for provider-native sessions.
|
|
9
|
+
- `decorators/session.py`: `session_ctx` and `read_only_session` decorators for app/router/model/op policy scopes.
|
|
10
|
+
|
|
11
|
+
This design is backend-agnostic and does not depend on specific database drivers.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete.engine import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete.engine.bind import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete.engine.builders import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete.engine.capabilities import * # noqa: F401,F403
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from tigrbl_concrete.engine.collect import * # noqa: F401,F403
|