loom-kernel 2.11.1__tar.gz → 2.13.0__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.
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/CHANGELOG.md +70 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/PKG-INFO +5 -1
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/pyproject.toml +17 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/bootstrap.py +35 -5
- loom_kernel-2.13.0/src/loom/cli/__init__.py +20 -0
- loom_kernel-2.13.0/src/loom/cli/app.py +10 -0
- loom_kernel-2.13.0/src/loom/cli/schema.py +92 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/authz/__init__.py +7 -0
- loom_kernel-2.13.0/src/loom/core/authz/_roles.py +385 -0
- loom_kernel-2.13.0/src/loom/core/authz/elevation.py +158 -0
- loom_kernel-2.13.0/src/loom/core/authz/product.py +54 -0
- loom_kernel-2.13.0/src/loom/core/backend/scoped_ddl.py +244 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/backend/sqlalchemy.py +463 -87
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/bootstrap/bootstrap.py +3 -1
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/bootstrap/kernel.py +9 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/gateway.py +51 -24
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/_utils.py +16 -4
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/base.py +4 -2
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/manifest.py +5 -3
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/executor.py +12 -6
- loom_kernel-2.13.0/src/loom/core/locator.py +273 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/__init__.py +33 -1
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/convert.py +12 -1
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/enums.py +1 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/field.py +44 -2
- loom_kernel-2.13.0/src/loom/core/model/introspection.py +630 -0
- loom_kernel-2.13.0/src/loom/core/model/partition.py +114 -0
- loom_kernel-2.13.0/src/loom/core/model/privilege.py +22 -0
- loom_kernel-2.13.0/src/loom/core/model/scoped.py +69 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/types.py +1 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/types_postgres.py +1 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/backend.py +294 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/__init__.py +28 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/env_template.py +45 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/hook.py +137 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/operations.py +404 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/runners.py +372 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/mixins.py +1 -1
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/__init__.py +53 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +155 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/config.py +104 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/elevate.py +84 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +466 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +68 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +23 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +150 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/integrity.py +366 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/partitions.py +196 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/provider.py +151 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/schema.py +124 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/sources.py +68 -0
- loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/verify.py +404 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/session_manager.py +6 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/session_settings.py +32 -22
- loom_kernel-2.13.0/src/loom/core/schema_names.py +208 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/auto.py +26 -1
- loom_kernel-2.11.1/src/loom/core/authz/_roles.py +0 -193
- loom_kernel-2.11.1/src/loom/core/model/introspection.py +0 -340
- loom_kernel-2.11.1/src/loom/core/repository/sqlalchemy/backend.py +0 -122
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/.gitignore +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/LICENSE +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/README.md +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_concurrency.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_filters.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_roles.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_startup.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_transport.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_usecase.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/_binding.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/_handlers.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/_rpc.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/card.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/events.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/server.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/abc.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/_compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/_plan.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_output.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_state.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/_envelope.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/_schema.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/_v1.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/describe.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/fastapi/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/fastapi/endpoints.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/fastapi/response.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/fastapi/streaming.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/inference.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/remote_auth.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_bounded.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_chain.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_conversation.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_grants.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_handle.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_health.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_hooks.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_lifecycle.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_limits.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_mcp.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/validate/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/validate/__main__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/auto.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/constants.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/runner.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/service.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/authz/_decide.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/authz/_grants.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/authz/_scope.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/_batching.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/_single_flight.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/calls.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/memory.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/repository.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/result_codec.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/wiring.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/base.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/field.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/_boto3.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/_includes.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/_resolver_utils.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/context.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/keys.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/loader.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/model.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/resolver.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/secrets.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/ssm.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/di/container.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/post_commit.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/errors/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/errors/codes.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/errors/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/context.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/identity.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/issuer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/wire.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/introspection/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/introspection/base.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/introspection/describe.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/context.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/job.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/service.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/_loom_type.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/base.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/otel_ids.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/runtime.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/span.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/persistence/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/persistence/abc.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/persistence/none.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/persistence/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/plugins/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/plugins/entrypoints.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/plugins/optional.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/cursor.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/session_scope.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/backend.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/repository.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/backend.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/ids.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/repository.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/uow.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/values.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/response/base.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/runner.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/schema/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/schema/schema_mode.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/abc/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/abc/contracts.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/abc/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/caller_bound.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/clickhouse/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/roles.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/service.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/symbols.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/transaction.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/uow/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/uow/context.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/agent_markers.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/mcp_markers.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_path_template.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_options.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_binding.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_validators_config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_validators_step.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from_config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_client.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/_registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_mongo.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_serialization.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/targets/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_builder.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_ops.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_protocol.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_runner.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_step.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_step_client.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/_wiring.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/config_loader.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/filtering.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runtime/_config_values.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_async.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_ctx.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_flow_yaml.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_meta.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_placeholders.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_summary.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/_discovery.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/_schedule.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_assemble.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_backfill.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_body.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_common.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_factory.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_hooks.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_maintenance.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_params.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_run_name.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_runtime.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_signature.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_stages.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/manifest/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/manifest/_model.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/manifest/_s3.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/manifest/_store.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/_event.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/_factory.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/_port.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/_slack.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/_flow.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/_manifest.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/_task_run.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/_instruments.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/py.typed +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/_body.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/abc.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/jwt.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/middleware.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/constants.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/cors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/_errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/_exclusions.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/app.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/health.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/router_runtime.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/sql.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/model.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_dlq.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/runner.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/_bindings.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/_compiler.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/_errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/_plan.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/phases/validate.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_tracing.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/_config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/_event.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/_normalize.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_branches.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_decompose.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_mongo.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_sink.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_table/common.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_table/config.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/__init__.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/agents.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/golden.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/runner.py +0 -0
|
@@ -4,6 +4,61 @@
|
|
|
4
4
|
|
|
5
5
|
### core
|
|
6
6
|
|
|
7
|
+
- **core:** range-partitioned row-scoped tables.
|
|
8
|
+
`__partition_by__ = ("RANGE", "<column>")` on a `RowScoped` model compiles to
|
|
9
|
+
`postgresql_partition_by`; the column must be a `DateTime` column of the
|
|
10
|
+
primary key and every unique key must contain it, LIST and HASH are refused,
|
|
11
|
+
all at compile time. Partitions are created ahead of time by the migrator
|
|
12
|
+
through guard revision 2 (`0002.sql`, new functions `create_range_partition`
|
|
13
|
+
and `detach_partition`, `EXECUTE` for the owner only), which creates,
|
|
14
|
+
registers and protects each partition with its parent's scopes in the
|
|
15
|
+
caller's transaction: `op.ensure_range_partitions(table, start, end,
|
|
16
|
+
interval=...)` in a revision, or
|
|
17
|
+
`loom.core.repository.sqlalchemy.rls.ensure_range_partitions(url_or_connection,
|
|
18
|
+
application, model, start, end, interval=...)` at runtime. Partitions are
|
|
19
|
+
named `<table>_p<YYYYMM>` (`_p<YYYY>`, `_p<YYYYMMDD>` for year and day) with
|
|
20
|
+
midnight-UTC bounds. Retention uses `op.detach_range_partitions(...,
|
|
21
|
+
drop=...)` or `detach_range_partitions(...)`, which unprotects, detaches and
|
|
22
|
+
optionally drops. Dropping a partitioned table in an autogenerated revision
|
|
23
|
+
drops its partitions first (`op.drop_partitions`). `check` and `verify` count
|
|
24
|
+
registered partitions with their parent; `verify` reports
|
|
25
|
+
`partition.registration` for a partition registered unlike its parent.
|
|
26
|
+
Re-apply the bootstrap to install revision 2; partition calls on an older
|
|
27
|
+
guard raise `guard revision pending`. `ScopedTable` gains `partition_by`, and
|
|
28
|
+
`require_guard_revision(_sync)` take an optional `minimum`.
|
|
29
|
+
- **core:** a model declares named checks and partial unique indexes.
|
|
30
|
+
`__checks__ = {rule: sql_expression}` compiles one `CHECK` constraint per
|
|
31
|
+
rule, named by the rule; `__partial_unique__ = {rule: (columns, where)}`
|
|
32
|
+
compiles a unique index `uq_<table>_<rule>` restricted to the rows matching
|
|
33
|
+
`where`, and on a row-scoped table its columns must contain the boundary
|
|
34
|
+
(C5, refused at compile time as the guard refuses it with `LG002`). The
|
|
35
|
+
expression and the predicate are product code with the trust of a
|
|
36
|
+
hand-written Alembic revision and must be static literals with no runtime
|
|
37
|
+
input; loom checks only that each is a non-empty string. The static-SQL lint
|
|
38
|
+
exempts exactly the two calls that compile them and now also watches
|
|
39
|
+
`CheckConstraint`. Alembic's autogenerate does not compare checks or index
|
|
40
|
+
predicates, so adding, changing or removing a check on an existing table,
|
|
41
|
+
or changing a predicate, is a hand-written revision.
|
|
42
|
+
- **core:** `database.schema.naming_convention` hands a SQLAlchemy
|
|
43
|
+
`naming_convention` (`pk`, `fk`, `uq`, `ck`, `ix`) to the application
|
|
44
|
+
metadata of the migration path and to the metadata the REST runtime and the
|
|
45
|
+
Celery worker compile, so all of them name constraints alike; absent,
|
|
46
|
+
nothing changes. Use
|
|
47
|
+
`fk_%(table_name)s_%(column_0_N_name)s`: every composite FK of a scoped
|
|
48
|
+
table starts with the boundary column. Compilation now refuses two
|
|
49
|
+
constraints or indexes of one table resolving to the same name, and a
|
|
50
|
+
check, `__indexes__` or `__partial_unique__` name over Postgres's 63 bytes,
|
|
51
|
+
instead of failing or truncating at DDL time. `reset_registry` takes the
|
|
52
|
+
convention as `naming_convention=`; called without it, it leaves the
|
|
53
|
+
convention as it is, and `None` restores SQLAlchemy's default.
|
|
54
|
+
|
|
55
|
+
- **core:** two column types. `Bytes` (`loom.core.model.Bytes`, also inferred
|
|
56
|
+
from a `bytes` annotation, which used to fall back to `JSON`) compiles to
|
|
57
|
+
`LargeBinary`, `bytea` on Postgres; `Postgres.INET` compiles to Postgres
|
|
58
|
+
`inet`. The SQLAlchemy repository binds `bytes` as they are instead of
|
|
59
|
+
base64 text, and a network address the driver returns for `inet` reaches a
|
|
60
|
+
`str` field as its text form (`10.0.0.1`, `2001:db8::1/64`).
|
|
61
|
+
|
|
7
62
|
- **core:** a memory cache alias can be bounded. `cache: max_size` (entries) and
|
|
8
63
|
the new `cache: max_bytes` (stored payload bytes) serve every
|
|
9
64
|
`aiocache.SimpleMemoryCache` alias through `loom.core.cache.memory.BoundedMemoryCache`,
|
|
@@ -91,6 +146,12 @@
|
|
|
91
146
|
(`_safe_pydantic_schema`) through the same `LoomType` the cache and MCP
|
|
92
147
|
boundaries already use; `LoomRestAdapter`'s Struct projection goes
|
|
93
148
|
through it too.
|
|
149
|
+
- **rest:** `create_app` accepts `modules: Sequence[Callable[[LoomContainer], None]]`,
|
|
150
|
+
mirroring the Celery `create_app`. Each module is called with the container,
|
|
151
|
+
in order, before repositories are registered and before use cases are
|
|
152
|
+
verified, so a use case can inject a port no repository provides (a clock,
|
|
153
|
+
an identity verifier, a bridge to another bounded context). Without the
|
|
154
|
+
module, startup still fails with the same `ResolutionError`.
|
|
94
155
|
|
|
95
156
|
### prefect
|
|
96
157
|
|
|
@@ -231,6 +292,15 @@
|
|
|
231
292
|
|
|
232
293
|
### core
|
|
233
294
|
|
|
295
|
+
- **core:** the RLS guard refuses, in the same statement, a drop outside the
|
|
296
|
+
hatch that breaks its invariants. `DROP POLICY` or `DROP TRIGGER
|
|
297
|
+
loom_deny_owner_dml` on a scoped table used to commit, because drops are not
|
|
298
|
+
reported to `ddl_command_end`; the schema then failed the assertion (`LG002`)
|
|
299
|
+
only at the next DDL. The `sql_drop` trigger now runs the assertion when the
|
|
300
|
+
drop removes an object of the application schema and the hatch is closed;
|
|
301
|
+
dropping a plain index still succeeds. Shipped in guard revision 2
|
|
302
|
+
(`0002.sql`, `CREATE OR REPLACE FUNCTION on_sql_drop`); re-apply the
|
|
303
|
+
bootstrap to install it.
|
|
234
304
|
- **core:** a model with a relation or projection field imports again on
|
|
235
305
|
Python 3.12.4 and later when its module uses
|
|
236
306
|
`from __future__ import annotations`. It failed with
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: loom-kernel
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.13.0
|
|
4
4
|
Summary: Loom Python project
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -42,6 +42,9 @@ Provides-Extra: celery
|
|
|
42
42
|
Requires-Dist: celery<6.0,>=5.3; extra == 'celery'
|
|
43
43
|
Requires-Dist: kombu<6.0,>=5.3; extra == 'celery'
|
|
44
44
|
Requires-Dist: redis<6.0,>=5.0; extra == 'celery'
|
|
45
|
+
Provides-Extra: cli
|
|
46
|
+
Requires-Dist: pyyaml>=6; extra == 'cli'
|
|
47
|
+
Requires-Dist: typer<1,>=0.12; extra == 'cli'
|
|
45
48
|
Provides-Extra: clickhouse
|
|
46
49
|
Requires-Dist: clickhouse-connect<1.0,>=0.9.2; extra == 'clickhouse'
|
|
47
50
|
Provides-Extra: config
|
|
@@ -103,6 +106,7 @@ Requires-Dist: pydantic<3.0,>=2.0; extra == 'rest'
|
|
|
103
106
|
Requires-Dist: uvicorn<1.0,>=0.30; extra == 'rest'
|
|
104
107
|
Requires-Dist: uvloop<1.0,>=0.21; (sys_platform != 'win32') and extra == 'rest'
|
|
105
108
|
Provides-Extra: sqlalchemy
|
|
109
|
+
Requires-Dist: alembic<2,>=1.13; extra == 'sqlalchemy'
|
|
106
110
|
Requires-Dist: greenlet>=3.0; extra == 'sqlalchemy'
|
|
107
111
|
Requires-Dist: sqlalchemy<3.0,>=2.0; extra == 'sqlalchemy'
|
|
108
112
|
Provides-Extra: streaming
|
|
@@ -23,6 +23,9 @@ dependencies = [
|
|
|
23
23
|
"opentelemetry-api>=1.27,<2.0",
|
|
24
24
|
]
|
|
25
25
|
|
|
26
|
+
[project.scripts]
|
|
27
|
+
loom = "loom.cli:main"
|
|
28
|
+
|
|
26
29
|
[project.optional-dependencies]
|
|
27
30
|
# The testing helpers under loom.*.testing define pytest fixtures, so importing
|
|
28
31
|
# them needs pytest at runtime like any other declared dependency.
|
|
@@ -40,6 +43,7 @@ rest = [
|
|
|
40
43
|
sqlalchemy = [
|
|
41
44
|
"sqlalchemy>=2.0,<3.0",
|
|
42
45
|
"greenlet>=3.0",
|
|
46
|
+
"alembic>=1.13,<2",
|
|
43
47
|
]
|
|
44
48
|
clickhouse = [
|
|
45
49
|
"clickhouse-connect>=0.9.2,<1.0",
|
|
@@ -163,6 +167,10 @@ celery = [
|
|
|
163
167
|
"kombu>=5.3,<6.0",
|
|
164
168
|
"redis>=5.0,<6.0",
|
|
165
169
|
]
|
|
170
|
+
cli = [
|
|
171
|
+
"pyyaml>=6",
|
|
172
|
+
"typer>=0.12,<1",
|
|
173
|
+
]
|
|
166
174
|
|
|
167
175
|
[project.entry-points."loom.ai.engines"]
|
|
168
176
|
pydantic-ai = "loom.ai.engines.pydantic_ai.provider:PydanticAIEngineProvider"
|
|
@@ -225,6 +233,7 @@ dev = [
|
|
|
225
233
|
"aiocache>=0.12,<1.0",
|
|
226
234
|
"aiosqlite>=0.20.0",
|
|
227
235
|
"asyncpg>=0.30",
|
|
236
|
+
"alembic>=1.13,<2",
|
|
228
237
|
# Declared, not merely transitive: one cache test pins what the key renderer
|
|
229
238
|
# cannot separate inside an object msgspec expands itself, and an attrs class
|
|
230
239
|
# is the only such object the stdlib can build.
|
|
@@ -274,6 +283,7 @@ dev = [
|
|
|
274
283
|
"fasta2a>=0.6,<1",
|
|
275
284
|
"a2a-sdk>=1.1,<2",
|
|
276
285
|
"pydantic-ai-harness[skills]>=0.28,<1",
|
|
286
|
+
"typer>=0.12,<1",
|
|
277
287
|
]
|
|
278
288
|
|
|
279
289
|
[tool.hatch.build.targets.wheel]
|
|
@@ -287,6 +297,7 @@ packages = [
|
|
|
287
297
|
include = [
|
|
288
298
|
"src/loom/py.typed",
|
|
289
299
|
"src/loom/ai/declarative/schemas/*.json",
|
|
300
|
+
"src/loom/core/repository/sqlalchemy/rls/guard/*.sql",
|
|
290
301
|
]
|
|
291
302
|
|
|
292
303
|
[tool.hatch.build.targets.sdist]
|
|
@@ -408,6 +419,12 @@ module = [
|
|
|
408
419
|
]
|
|
409
420
|
ignore_missing_imports = true
|
|
410
421
|
|
|
422
|
+
[[tool.mypy.overrides]]
|
|
423
|
+
module = [
|
|
424
|
+
"loom.core.backend.scoped_ddl",
|
|
425
|
+
]
|
|
426
|
+
disallow_untyped_calls = false
|
|
427
|
+
|
|
411
428
|
[tool.pytest.ini_options]
|
|
412
429
|
minversion = "8.0"
|
|
413
430
|
testpaths = [
|
|
@@ -118,6 +118,16 @@ _T = TypeVar("_T")
|
|
|
118
118
|
# ---------------------------------------------------------------------------
|
|
119
119
|
|
|
120
120
|
|
|
121
|
+
class _WorkerSchemaConfig(msgspec.Struct, kw_only=True):
|
|
122
|
+
"""The part of ``database.schema`` the worker compiles models with.
|
|
123
|
+
|
|
124
|
+
Attributes:
|
|
125
|
+
naming_convention: SQLAlchemy naming convention keyed by constraint kind.
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
naming_convention: dict[str, str] | None = None
|
|
129
|
+
|
|
130
|
+
|
|
121
131
|
class _WorkerDbConfig(msgspec.Struct, kw_only=True):
|
|
122
132
|
"""Database settings for the worker process.
|
|
123
133
|
|
|
@@ -125,11 +135,13 @@ class _WorkerDbConfig(msgspec.Struct, kw_only=True):
|
|
|
125
135
|
url: Async SQLAlchemy connection URL.
|
|
126
136
|
echo: Log all SQL statements when ``True``.
|
|
127
137
|
pool_pre_ping: Test connections before checkout.
|
|
138
|
+
schema: Schema settings the models are compiled with.
|
|
128
139
|
"""
|
|
129
140
|
|
|
130
141
|
url: str
|
|
131
142
|
echo: bool = False
|
|
132
143
|
pool_pre_ping: bool = True
|
|
144
|
+
schema: _WorkerSchemaConfig = msgspec.field(default_factory=_WorkerSchemaConfig)
|
|
133
145
|
|
|
134
146
|
|
|
135
147
|
class _DiscoveryModules(msgspec.Struct, kw_only=True):
|
|
@@ -621,16 +633,28 @@ def _register_repositories(
|
|
|
621
633
|
return build_sqlalchemy_repository_registration_module(session_manager, models)
|
|
622
634
|
|
|
623
635
|
|
|
624
|
-
def
|
|
636
|
+
def _worker_naming_convention(ctx: ConfigContext) -> Mapping[str, str] | None:
|
|
637
|
+
"""The ``database.schema.naming_convention`` the REST runtime and migrations also read."""
|
|
638
|
+
db_cfg = ctx.section(ConfigKey.DATABASE, _WorkerDbConfig)
|
|
639
|
+
return db_cfg.schema.naming_convention
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
def _compile_models(
|
|
643
|
+
models: Sequence[type[BaseModel]], *, naming_convention: Mapping[str, str] | None
|
|
644
|
+
) -> tuple[type[BaseModel], ...]:
|
|
625
645
|
"""Compile and normalize discovered models for SQLAlchemy repositories."""
|
|
626
646
|
if not models:
|
|
627
647
|
return ()
|
|
628
648
|
try:
|
|
629
|
-
from loom.core.backend.sqlalchemy import
|
|
649
|
+
from loom.core.backend.sqlalchemy import (
|
|
650
|
+
compile_all,
|
|
651
|
+
configured_naming_convention,
|
|
652
|
+
reset_registry,
|
|
653
|
+
)
|
|
630
654
|
except ImportError as exc:
|
|
631
655
|
raise _sqlalchemy_extra_error() from exc
|
|
632
656
|
ordered = tuple(dict.fromkeys(models))
|
|
633
|
-
reset_registry()
|
|
657
|
+
reset_registry(naming_convention=configured_naming_convention(naming_convention))
|
|
634
658
|
compile_all(*ordered)
|
|
635
659
|
return ordered
|
|
636
660
|
|
|
@@ -656,6 +680,8 @@ def _compile_db_layer(
|
|
|
656
680
|
session_manager: SessionManager | None,
|
|
657
681
|
models: Sequence[type[BaseModel]],
|
|
658
682
|
user_modules: Sequence[Callable[[LoomContainer], None]],
|
|
683
|
+
*,
|
|
684
|
+
naming_convention: Mapping[str, str] | None,
|
|
659
685
|
) -> tuple[tuple[type[BaseModel], ...], tuple[Callable[[LoomContainer], None], ...]]:
|
|
660
686
|
"""Compile models and register repositories; no-op when DB is not configured.
|
|
661
687
|
|
|
@@ -663,6 +689,7 @@ def _compile_db_layer(
|
|
|
663
689
|
session_manager: Active session manager, or ``None`` for pure jobs.
|
|
664
690
|
models: Model classes discovered or declared for this worker.
|
|
665
691
|
user_modules: Container modules provided by the caller.
|
|
692
|
+
naming_convention: The configured ``database.schema.naming_convention``.
|
|
666
693
|
|
|
667
694
|
Returns:
|
|
668
695
|
Tuple of (normalized_models, runtime_modules). When no DB is
|
|
@@ -671,7 +698,7 @@ def _compile_db_layer(
|
|
|
671
698
|
base = tuple(user_modules)
|
|
672
699
|
if session_manager is None:
|
|
673
700
|
return tuple(models), base
|
|
674
|
-
normalized = _compile_models(models)
|
|
701
|
+
normalized = _compile_models(models, naming_convention=naming_convention)
|
|
675
702
|
if not normalized:
|
|
676
703
|
return tuple(models), base
|
|
677
704
|
return normalized, (*base, _register_repositories(session_manager, normalized))
|
|
@@ -904,7 +931,10 @@ def bootstrap_worker(
|
|
|
904
931
|
_apply_job_config_if_present(ctx, job_type)
|
|
905
932
|
|
|
906
933
|
uow_factory, session_manager = _resolve_uow_factory(ctx)
|
|
907
|
-
|
|
934
|
+
convention = _worker_naming_convention(ctx) if session_manager is not None else None
|
|
935
|
+
final_models, runtime_modules = _compile_db_layer(
|
|
936
|
+
session_manager, resolved.models, modules, naming_convention=convention
|
|
937
|
+
)
|
|
908
938
|
runtime_modules = (*runtime_modules, cache_module_for(ctx))
|
|
909
939
|
|
|
910
940
|
resolved = _WorkerResolved(
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""The ``loom`` command line, installed with the ``cli`` extra."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
CLI_DEPENDENCIES = frozenset({"typer", "yaml"})
|
|
8
|
+
INSTALL_HINT = 'the loom command needs the cli extra: pip install "loom-kernel[cli]"'
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def main() -> None:
|
|
12
|
+
"""Entry point of the ``loom`` script; without the ``cli`` extra it prints how to install it."""
|
|
13
|
+
try:
|
|
14
|
+
from loom.cli.app import app
|
|
15
|
+
except ModuleNotFoundError as exc:
|
|
16
|
+
if exc.name not in CLI_DEPENDENCIES:
|
|
17
|
+
raise
|
|
18
|
+
print(INSTALL_HINT, file=sys.stderr)
|
|
19
|
+
raise SystemExit(1) from exc
|
|
20
|
+
app()
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""The ``loom`` command tree."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from loom.cli.schema import schema_app
|
|
8
|
+
|
|
9
|
+
app = typer.Typer(no_args_is_help=True, help="Operate the database side of a loom application.")
|
|
10
|
+
app.add_typer(schema_app, name="schema")
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"""``loom schema``: the commands that prepare a row-scoped schema."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Annotated, Any
|
|
7
|
+
|
|
8
|
+
import typer
|
|
9
|
+
import yaml
|
|
10
|
+
|
|
11
|
+
from loom.core.schema_names import SchemaNames
|
|
12
|
+
|
|
13
|
+
schema_app = typer.Typer(no_args_is_help=True, help="Prepare a row-scoped schema.")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@schema_app.command("init")
|
|
17
|
+
def init(
|
|
18
|
+
name: Annotated[str, typer.Argument(help="The application schema.")],
|
|
19
|
+
config: Annotated[
|
|
20
|
+
Path | None,
|
|
21
|
+
typer.Option("--config", help="Merge the names into this configuration file."),
|
|
22
|
+
] = None,
|
|
23
|
+
) -> None:
|
|
24
|
+
"""Derive the names around a schema once and write them into the configuration.
|
|
25
|
+
|
|
26
|
+
Without ``--config`` the block is printed. With it the names are merged
|
|
27
|
+
into ``database.schema``; a name the product already changed is never
|
|
28
|
+
overwritten.
|
|
29
|
+
"""
|
|
30
|
+
try:
|
|
31
|
+
block = _block(name, SchemaNames.derived(name))
|
|
32
|
+
if config is None:
|
|
33
|
+
typer.echo(yaml.safe_dump({"database": {"schema": block}}, sort_keys=False), nl=False)
|
|
34
|
+
return
|
|
35
|
+
_write(config, block)
|
|
36
|
+
except (ValueError, yaml.YAMLError) as exc:
|
|
37
|
+
typer.echo(str(exc), err=True)
|
|
38
|
+
raise typer.Exit(1) from exc
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _write(config: Path, block: dict[str, Any]) -> None:
|
|
42
|
+
document = _load(config)
|
|
43
|
+
database = _section(document, "database", "database")
|
|
44
|
+
schema = _section(database, "schema", "database.schema")
|
|
45
|
+
conflicts = _merge(schema, block, "database.schema")
|
|
46
|
+
if conflicts:
|
|
47
|
+
raise ValueError(
|
|
48
|
+
"these names differ from the derived ones and were kept: " + ", ".join(conflicts)
|
|
49
|
+
)
|
|
50
|
+
config.write_text(yaml.safe_dump(document, sort_keys=False))
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _load(config: Path) -> dict[str, Any]:
|
|
54
|
+
if not config.exists():
|
|
55
|
+
return {}
|
|
56
|
+
loaded = yaml.safe_load(config.read_text())
|
|
57
|
+
if loaded is None:
|
|
58
|
+
return {}
|
|
59
|
+
if not isinstance(loaded, dict):
|
|
60
|
+
raise ValueError(f"{config} must hold a mapping at its top level")
|
|
61
|
+
return loaded
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _section(parent: dict[str, Any], key: str, path: str) -> dict[str, Any]:
|
|
65
|
+
current = parent.get(key)
|
|
66
|
+
if current is None:
|
|
67
|
+
current = parent[key] = {}
|
|
68
|
+
if not isinstance(current, dict):
|
|
69
|
+
raise ValueError(f"{path} must be a mapping")
|
|
70
|
+
return current
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _block(name: str, names: SchemaNames) -> dict[str, Any]:
|
|
74
|
+
return {
|
|
75
|
+
"name": name,
|
|
76
|
+
"guard": names.guard,
|
|
77
|
+
"groups": {"readers": names.readers, "writers": names.writers},
|
|
78
|
+
"version_tables": {"structure": names.version_table, "data": names.data_version_table},
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _merge(target: dict[str, Any], values: dict[str, Any], path: str) -> list[str]:
|
|
83
|
+
conflicts: list[str] = []
|
|
84
|
+
for key, value in values.items():
|
|
85
|
+
current = target.get(key)
|
|
86
|
+
if current is None:
|
|
87
|
+
target[key] = value
|
|
88
|
+
elif isinstance(value, dict) and isinstance(current, dict):
|
|
89
|
+
conflicts += _merge(current, value, f"{path}.{key}")
|
|
90
|
+
elif current != value:
|
|
91
|
+
conflicts.append(f"{path}.{key}")
|
|
92
|
+
return conflicts
|
|
@@ -16,15 +16,20 @@ from loom.core.authz._decide import (
|
|
|
16
16
|
)
|
|
17
17
|
from loom.core.authz._grants import Grant, GrantSource, InMemoryGrantSource
|
|
18
18
|
from loom.core.authz._roles import (
|
|
19
|
+
CompositionRules,
|
|
19
20
|
Permission,
|
|
20
21
|
Role,
|
|
21
22
|
RoleCatalog,
|
|
23
|
+
RoleSpec,
|
|
22
24
|
UnknownPermission,
|
|
23
25
|
UnknownRole,
|
|
24
26
|
)
|
|
25
27
|
from loom.core.authz._scope import Scope
|
|
28
|
+
from loom.core.authz.product import AuthzProduct, load_authz_product
|
|
26
29
|
|
|
27
30
|
__all__ = [
|
|
31
|
+
"AuthzProduct",
|
|
32
|
+
"CompositionRules",
|
|
28
33
|
"Decision",
|
|
29
34
|
"Grant",
|
|
30
35
|
"GrantCheck",
|
|
@@ -33,11 +38,13 @@ __all__ = [
|
|
|
33
38
|
"Permission",
|
|
34
39
|
"Role",
|
|
35
40
|
"RoleCatalog",
|
|
41
|
+
"RoleSpec",
|
|
36
42
|
"Scope",
|
|
37
43
|
"UnknownPermission",
|
|
38
44
|
"UnknownRole",
|
|
39
45
|
"can_grant",
|
|
40
46
|
"can_revoke",
|
|
41
47
|
"evaluate",
|
|
48
|
+
"load_authz_product",
|
|
42
49
|
"scopes_with",
|
|
43
50
|
]
|