loom-kernel 0.7.0__tar.gz → 0.8.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-0.7.0 → loom_kernel-0.8.0}/.github/workflows/release.yml +30 -13
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/CHANGELOG.md +109 -0
- loom_kernel-0.8.0/CHANGELOG_RELEASE.md +107 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/PKG-INFO +1 -1
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/pyproject.toml +2 -2
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/session_manager.py +47 -1
- loom_kernel-0.8.0/src/loom/core/schema/__init__.py +5 -0
- loom_kernel-0.8.0/src/loom/core/schema/schema_mode.py +22 -0
- loom_kernel-0.8.0/src/loom/etl/declarative/target/_schema_mode.py +5 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/__init__.py +23 -5
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/_adapter.py +4 -0
- loom_kernel-0.8.0/src/loom/streaming/bytewax/_resource_manager.py +160 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/handlers/_shared.py +9 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +6 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/handlers/routing.py +2 -1
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/handlers/steps.py +59 -2
- loom_kernel-0.8.0/src/loom/streaming/bytewax/handlers/storage.py +196 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/compiler/__init__.py +4 -2
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/compiler/_compiler.py +2 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/compiler/_plan.py +27 -1
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/compiler/phases/build_plan.py +88 -35
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/compiler/phases/validate.py +193 -73
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/__init__.py +21 -3
- loom_kernel-0.8.0/src/loom/streaming/nodes/_decompose.py +89 -0
- loom_kernel-0.8.0/src/loom/streaming/nodes/_sink.py +120 -0
- loom_kernel-0.8.0/src/loom/streaming/nodes/_table/__init__.py +21 -0
- loom_kernel-0.8.0/src/loom/streaming/nodes/_table/common.py +737 -0
- loom_kernel-0.8.0/src/loom/streaming/nodes/_table/config.py +99 -0
- loom_kernel-0.8.0/tests/integration/streaming/test_into_table_integration.py +324 -0
- loom_kernel-0.8.0/tests/unit/streaming/bytewax/test_resource_manager.py +52 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_steps.py +1 -1
- loom_kernel-0.8.0/tests/unit/streaming/bytewax/test_storage.py +145 -0
- loom_kernel-0.8.0/tests/unit/streaming/compiler/test_async_walk.py +182 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/cases/__init__.py +2 -0
- loom_kernel-0.8.0/tests/unit/streaming/flows/cases/explode.py +134 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/conftest.py +2 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/test_compiler_examples.py +13 -1
- loom_kernel-0.8.0/tests/unit/streaming/nodes/test_table_package.py +19 -0
- loom_kernel-0.8.0/tests/unit/testing/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/uv.lock +1 -1
- loom_kernel-0.7.0/CHANGELOG_RELEASE.md +0 -96
- loom_kernel-0.7.0/src/loom/etl/declarative/target/_schema_mode.py +0 -23
- loom_kernel-0.7.0/src/loom/streaming/bytewax/_resource_manager.py +0 -68
- loom_kernel-0.7.0/tests/unit/streaming/compiler/test_async_walk.py +0 -91
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/.github/workflows/ci-main.yml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/.github/workflows/ci-pr.yml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/.github/workflows/docs.yml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/.gitignore +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/.pre-commit-config.yaml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/.readthedocs.yaml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/LICENSE +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/Makefile +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/README.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/codecov.yml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/_static/.gitkeep +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/_static/custom.css +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/_static/logo-transparent.png +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/_static/logo.svg +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/architecture/adr/README.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/architecture/clean-architecture.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/architecture/overview.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/conf.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/etl/examples.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/etl/pipelines.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/etl/testing.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/examples-repo/index.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/getting-started/etl.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/getting-started/rest.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/getting-started/streaming.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/guides/autocrud.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/guides/celery.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/guides/etl.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/guides/fake-repo-examples.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/guides/quickstart.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/guides/use-case-dsl.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/index.rst +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/overview.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/reference/api/core.rst +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/reference/api/etl.rst +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/reference/api/repository.rst +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/reference/api/rest.rst +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/reference/api/streaming.rst +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/reference/api/testing.rst +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/reference/index.rst +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/requirements.txt +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/rest/autocrud.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/rest/celery.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/rest/examples.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/rest/testing.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/rest/use-case-dsl.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/docs/streaming/bytewax.md +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/sonar-project.properties +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/celery/auto.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/celery/bootstrap.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/celery/config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/celery/constants.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/celery/runner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/celery/service.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/backend/sqlalchemy.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/bootstrap/kernel.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/gateway.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/repository.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/command/base.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/command/field.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/compiler.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/context.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/keys.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/loader.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/config/resolver.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/di/container.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/discovery/base.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/discovery/manifest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/engine/compiler.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/engine/executor.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/errors/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/errors/codes.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/errors/errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/job/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/job/context.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/job/job.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/job/service.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/base.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/field.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/types.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/runtime.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/response/base.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/runner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/uow/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/uow/context.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/compiler/_binding.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/compiler/_compiler.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/compiler/_errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/compiler/_validators_step.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runner/_wiring.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runner/config_loader.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runner/errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runner/filtering.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/compiler.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/constants.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/fastapi/app.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/fastapi/auto.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/fastapi/router_runtime.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/_dlq.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/bytewax/runner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/compiler/_bindings.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/testing/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/testing/golden.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/testing/runner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/golden/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/golden/baselines/.gitkeep +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/golden/outputs/.gitkeep +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/golden/plans/.gitkeep +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/helpers/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/celery_bootstrap/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/bootstrap/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/bootstrap/test_bootstrap_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/repository/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/rest/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/rest/test_rest_error_mapping.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/rest/test_rest_observability.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/use_case/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/etl/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/etl/test_runner_integration.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/config/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/config/conf.interfaces.yaml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/config/conf.yaml +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/main.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/manifest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/category/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/category/model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/category/schemas.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/interface.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/jobs.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/relations.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/repository.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/repository_contract.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/review/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/review/model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/review/schemas.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/schemas.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/fake_repo/product/use_cases.py +0 -0
- {loom_kernel-0.7.0/tests/unit → loom_kernel-0.8.0/tests/integration/streaming}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/support/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/integration/support/logical_repo_fixtures.py +0 -0
- {loom_kernel-0.7.0/tests/unit/celery_bootstrap → loom_kernel-0.8.0/tests/unit}/__init__.py +0 -0
- {loom_kernel-0.7.0/tests/unit/celery_jobs → loom_kernel-0.8.0/tests/unit/celery_bootstrap}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/celery_bootstrap/test_async_runtime.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/celery_bootstrap/test_bootstrap.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core → loom_kernel-0.8.0/tests/unit/celery_jobs}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/celery_jobs/test_auto.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/celery_jobs/test_celery_service.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/celery_jobs/test_config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/celery_jobs/test_runner.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/backend → loom_kernel-0.8.0/tests/unit/core}/__init__.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/bootstrap → loom_kernel-0.8.0/tests/unit/core/backend}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/backend/test_backend_compiler.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/cache → loom_kernel-0.8.0/tests/unit/core/bootstrap}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/bootstrap/test_kernel.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/command → loom_kernel-0.8.0/tests/unit/core/cache}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/cache/test_cached_repository.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/config → loom_kernel-0.8.0/tests/unit/core/command}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/command/test_command_base.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/command/test_command_field.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/command/test_command_patch.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/command/test_introspection.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/di → loom_kernel-0.8.0/tests/unit/core/config}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/config/test_binder.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/config/test_config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/config/test_configurable.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/config/test_context.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/discovery → loom_kernel-0.8.0/tests/unit/core/di}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/di/test_container.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/engine → loom_kernel-0.8.0/tests/unit/core/discovery}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/discovery/test_manifest.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/errors → loom_kernel-0.8.0/tests/unit/core/engine}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/engine/test_compiler.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/engine/test_executor.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/engine/test_executor_trace.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/engine/test_executor_uow.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/engine/test_metrics.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/engine/test_plan.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/expr → loom_kernel-0.8.0/tests/unit/core/errors}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/errors/test_errors.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/job → loom_kernel-0.8.0/tests/unit/core/expr}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/expr/test_expr.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/logger → loom_kernel-0.8.0/tests/unit/core/job}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/job/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/job/test_callback.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/job/test_context.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/job/test_handle.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/job/test_inline_service.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/job/test_job.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/model → loom_kernel-0.8.0/tests/unit/core/logger}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/logger/test_config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/logger/test_registry.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/observability → loom_kernel-0.8.0/tests/unit/core/model}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/model/test_model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/model/test_struct.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/model/test_timestamped.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/projection → loom_kernel-0.8.0/tests/unit/core/observability}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/observability/test_observers.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/observability/test_runtime.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/repository → loom_kernel-0.8.0/tests/unit/core/projection}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/projection/test_runtime.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/repository/abc → loom_kernel-0.8.0/tests/unit/core/repository}/__init__.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/repository/sqlalchemy → loom_kernel-0.8.0/tests/unit/core/repository/abc}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/repository/abc/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/repository/abc/test_query.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/routing → loom_kernel-0.8.0/tests/unit/core/repository/sqlalchemy}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/tracing → loom_kernel-0.8.0/tests/unit/core/routing}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/routing/test_routing.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/test_async_bridge.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/test_compiler_contracts.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/test_runner_contracts.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/uow → loom_kernel-0.8.0/tests/unit/core/tracing}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/tracing/test_context.py +0 -0
- {loom_kernel-0.7.0/tests/unit/core/use_case → loom_kernel-0.8.0/tests/unit/core/uow}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/uow/test_executor_uow.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/uow/test_uow_protocols.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl → loom_kernel-0.8.0/tests/unit/core/use_case}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/use_case/test_compute.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/use_case/test_factory.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/use_case/test_field_ref.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/use_case/test_invoker.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/use_case/test_markers.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/use_case/test_rule.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/core/use_case/test_use_case.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/backends → loom_kernel-0.8.0/tests/unit/etl}/__init__.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/backends/test_polars → loom_kernel-0.8.0/tests/unit/etl/backends}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/_historify_contract.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_historify_common.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/backends/test_spark → loom_kernel-0.8.0/tests/unit/etl/backends/test_polars}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_step_execution.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/checkpoint → loom_kernel-0.8.0/tests/unit/etl/backends/test_spark}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_spark/test_step_execution.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/checkpoint/backends → loom_kernel-0.8.0/tests/unit/etl/checkpoint}/__init__.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/compiler → loom_kernel-0.8.0/tests/unit/etl/checkpoint/backends}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/checkpoint/test_cleaners.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/checkpoint/test_store.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/io → loom_kernel-0.8.0/tests/unit/etl/compiler}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_compiler.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_step_validator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_structural.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/conftest.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/schema → loom_kernel-0.8.0/tests/unit/etl/io}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/io/test_history_target.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/io/test_source.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/io/test_source_json.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/io/test_source_options.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/io/test_target.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/io/test_utils.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/io/test_variants.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/lineage/test_observer.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/lineage/test_records.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/lineage/test_store.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/pipeline/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/pipeline/test_proxy.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/pipeline/test_step.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/sql → loom_kernel-0.8.0/tests/unit/etl/schema}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/schema/test_contract.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/schema/test_schema.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/schema/test_table.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/storage → loom_kernel-0.8.0/tests/unit/etl/sql}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/sql/test_merge.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/sql/test_predicate.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
- {loom_kernel-0.7.0/tests/unit/etl/testing → loom_kernel-0.8.0/tests/unit/etl/storage}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/storage/test_backend_factory.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/storage/test_io_protocols.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/storage/test_locator.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/storage/test_observability_and_protocols.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/storage/test_route_build.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/storage/test_schema_readers.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/storage/test_storage_config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_config_loader.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_executor.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_format_registry.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_module_contracts.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_public_api_discovery.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_record_schema_coverage.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_runner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_runner_errors.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/test_spark_testing.py +0 -0
- {loom_kernel-0.7.0/tests/unit/prometheus → loom_kernel-0.8.0/tests/unit/etl/testing}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/testing/test_runners.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/testing/test_scenario_and_stubs.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
- {loom_kernel-0.7.0/tests/unit/rest → loom_kernel-0.8.0/tests/unit/prometheus}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/prometheus/test_adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/prometheus/test_middleware.py +0 -0
- {loom_kernel-0.7.0/tests/unit/streaming/bytewax → loom_kernel-0.8.0/tests/unit/rest}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_autocrud.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_fastapi_auto_logger.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_middleware.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_pydantic_adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_response.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_rest_adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_rest_compiler.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_rest_model.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/rest/test_router_runtime.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/__init__.py +0 -0
- {loom_kernel-0.7.0/tests/unit/streaming/compiler → loom_kernel-0.8.0/tests/unit/streaming/bytewax}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/cases.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_adapter.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_collect_batch.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_dlq.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_error_boundary.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_operators.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_runner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_runtime_io.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
- {loom_kernel-0.7.0/tests/unit/streaming/contracts → loom_kernel-0.8.0/tests/unit/streaming/compiler}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/compiler/cases.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/compiler/test_basics.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/compiler/test_config_bindings.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/compiler/test_multi_source.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/compiler/test_router.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/compiler/test_window.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/compiler/test_with.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/conftest.py +0 -0
- {loom_kernel-0.7.0/tests/unit/streaming/nodes → loom_kernel-0.8.0/tests/unit/streaming/contracts}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/contracts/cases.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/contracts/test_boundary.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/contracts/test_message.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/contracts/test_steps.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/cases/batch.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/cases/fork.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/cases/router.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/cases/shared.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/cases/simple.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/flows/test_flow_examples.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/cases.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/fakes.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_client.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_config.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_message.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_message_client.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_observability.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_settings.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/kafka/test_wire.py +0 -0
- {loom_kernel-0.7.0/tests/unit/streaming/observability → loom_kernel-0.8.0/tests/unit/streaming/nodes}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/nodes/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/nodes/test_broadcast.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/nodes/test_logging.py +0 -0
- {loom_kernel-0.7.0/tests/unit/streaming/support → loom_kernel-0.8.0/tests/unit/streaming/observability}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/observability/cases.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/observability/conftest.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/observability/test_observability_runner.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/observability/test_protocols.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/observability/test_registry.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/observability/test_structlog.py +0 -0
- {loom_kernel-0.7.0/tests/unit/testing → loom_kernel-0.8.0/tests/unit/streaming/support}/__init__.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/support/flow_cases.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/test_fork.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/test_otel_observability.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/test_routing.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/streaming/test_with.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/testing/test_golden.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/testing/test_http_harness.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/testing/test_in_memory.py +0 -0
- {loom_kernel-0.7.0 → loom_kernel-0.8.0}/tests/unit/testing/test_runner.py +0 -0
|
@@ -87,7 +87,7 @@ jobs:
|
|
|
87
87
|
sed -i "0,/^version = \".*\"/s//version = \"${VERSION}\"/" pyproject.toml
|
|
88
88
|
sed -i "/^\[tool.commitizen\]/,/^\[/ s/^version = \".*\"/version = \"${VERSION}\"/" pyproject.toml
|
|
89
89
|
|
|
90
|
-
- name:
|
|
90
|
+
- name: Create or merge version bump PR
|
|
91
91
|
if: ${{ steps.version.outputs.deploy == 'true' }}
|
|
92
92
|
env:
|
|
93
93
|
VERSION: ${{ steps.version.outputs.version }}
|
|
@@ -99,22 +99,36 @@ jobs:
|
|
|
99
99
|
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
100
100
|
|
|
101
101
|
BRANCH="docs/release-v${VERSION}"
|
|
102
|
-
git checkout -B "${BRANCH}"
|
|
103
102
|
|
|
104
|
-
if
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
103
|
+
if git ls-remote --tags origin "refs/tags/v${VERSION}" | grep -q .; then
|
|
104
|
+
echo "Release tag v${VERSION} already exists; skipping version bump PR."
|
|
105
|
+
exit 0
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
open_pr_count=$(gh pr list --head "${BRANCH}" --state open --json number --jq 'length')
|
|
109
|
+
all_pr_count=$(gh pr list --head "${BRANCH}" --state all --json number --jq 'length')
|
|
110
|
+
|
|
111
|
+
if [ "${all_pr_count}" -gt 0 ] && [ "${open_pr_count}" -eq 0 ]; then
|
|
112
|
+
echo "Release PR ${BRANCH} already exists in a closed state; skipping duplicate creation."
|
|
113
|
+
exit 0
|
|
110
114
|
fi
|
|
111
115
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
+
if [ "${open_pr_count}" -eq 0 ]; then
|
|
117
|
+
git checkout -B "${BRANCH}"
|
|
118
|
+
|
|
119
|
+
if [ -f CHANGELOG_RELEASE.md ]; then
|
|
120
|
+
HEADER=$(head -1 CHANGELOG_RELEASE.md)
|
|
121
|
+
if ! grep -qF "${HEADER}" CHANGELOG.md; then
|
|
122
|
+
cat CHANGELOG_RELEASE.md CHANGELOG.md > CHANGELOG_MERGED.md
|
|
123
|
+
mv CHANGELOG_MERGED.md CHANGELOG.md
|
|
124
|
+
fi
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
git add pyproject.toml CHANGELOG.md
|
|
128
|
+
git diff --staged --quiet && exit 0
|
|
129
|
+
git commit -m "chore(release): bump version to ${VERSION}"
|
|
130
|
+
git push origin "${BRANCH}" --force
|
|
116
131
|
|
|
117
|
-
if ! gh pr list --head "${BRANCH}" --state open --json number --jq '.[0].number' | grep -qE '^[0-9]+$'; then
|
|
118
132
|
gh pr create \
|
|
119
133
|
--title "chore(release): bump version to ${VERSION}" \
|
|
120
134
|
--body "Automated version bump and changelog update after release v${VERSION}." \
|
|
@@ -136,10 +150,13 @@ jobs:
|
|
|
136
150
|
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1
|
|
137
151
|
with:
|
|
138
152
|
password: ${{ env.PYPI_API_TOKEN }}
|
|
153
|
+
skip-existing: true
|
|
139
154
|
|
|
140
155
|
- name: Publish package to PyPI (trusted publisher)
|
|
141
156
|
if: ${{ steps.version.outputs.deploy == 'true' && env.PYPI_API_TOKEN == '' }}
|
|
142
157
|
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1
|
|
158
|
+
with:
|
|
159
|
+
skip-existing: true
|
|
143
160
|
|
|
144
161
|
- name: Create and push tags
|
|
145
162
|
if: ${{ steps.version.outputs.deploy == 'true' }}
|
|
@@ -1,3 +1,112 @@
|
|
|
1
|
+
# 🚀 Release 0.8.0 ([#30](https://github.com/the-reacher-data/loom-py/pull/30)) ([`702b99e`](https://github.com/the-reacher-data/loom-py/commit/702b99ec75a4130f273322f8eb488637a2f98a14))
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## ✨ Features
|
|
5
|
+
### streaming
|
|
6
|
+
- **streaming:** add IntoSink/SinkPartition protocols and Decompose node<br>
|
|
7
|
+
> Introduces the two-level contract that makes storage sinks extensible at
|
|
8
|
+
> the node level. Any frozen dataclass satisfying IntoSink is a first-class
|
|
9
|
+
> terminal node — no registration, no inheritance, no framework coupling.
|
|
10
|
+
> core/schema/: new shared module; SchemaMode promoted from ETL (ETL re-exports for backwards compat)
|
|
11
|
+
> nodes/_sink.py: SinkPartition (contravariant per-worker protocol) and IntoSink (runtime-checkable terminal protocol)
|
|
12
|
+
> nodes/_decompose.py: EntityDecomposer protocol and Decompose transformation node
|
|
13
|
+
> validate.py: _is_leaf_terminal() helper unifies all terminal checks; IntoSink recognised as terminal in shape and output validation; _node_output_shape refactored to dispatch map
|
|
14
|
+
> exports: IntoSink, SinkPartition, Decompose, EntityDecomposer in public API
|
|
15
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
16
|
+
|
|
17
|
+
- **streaming:** add IntoTable sink node and rename EntityDecomposer to PayloadExpander<br>
|
|
18
|
+
> IntoTable: frozen dataclass implementing IntoSink for SQLAlchemy and Delta backends
|
|
19
|
+
> Backend enum: SQLALCHEMY and DELTA variants
|
|
20
|
+
> _SQLAlchemyTablePartition: bulk-insert via engine.begin() per epoch batch
|
|
21
|
+
> _DeltaTablePartition: write via deltalake + polars with validated write mode
|
|
22
|
+
> Rename EntityDecomposer -> PayloadExpander, decompose() -> expand(), targets -> outputs
|
|
23
|
+
> Update both streaming.__init__ and streaming.nodes.__init__ public exports
|
|
24
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### streaming/compiler
|
|
28
|
+
- **streaming/compiler:** teach compiler to resolve IntoSink nodes<br>
|
|
29
|
+
> Add CompiledStorageSink to _plan: holds the IntoSink node and its
|
|
30
|
+
> pre-fetched streaming.sinks.<name> config section
|
|
31
|
+
> Add terminal_storage_sinks field to CompiledPlan (default empty dict
|
|
32
|
+
> keeps all existing tests green)
|
|
33
|
+
> Refactor _build_terminal_sinks and all branch builders to return
|
|
34
|
+
> (kafka_sinks, storage_sinks) tuple in a single walk — no duplicate
|
|
35
|
+
> traversal
|
|
36
|
+
> Add _build_storage_sink: resolves config by node.name or passes {}
|
|
37
|
+
> when name is empty (self-configured sinks)
|
|
38
|
+
> Add validate_storage_sinks phase: reports a clear error for every
|
|
39
|
+
> named IntoSink whose streaming.sinks.<name> section is absent
|
|
40
|
+
> Wire validate_storage_sinks into the compiler pipeline
|
|
41
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
42
|
+
|
|
43
|
+
- **streaming/compiler:** add Decompose shape and structural validation<br>
|
|
44
|
+
> Import Decompose in validate.py
|
|
45
|
+
> Add RECORD to _node_input_shape for Decompose — enforces that it
|
|
46
|
+
> receives individual events, not batches
|
|
47
|
+
> Add Decompose: StreamShape.RECORD to _FIXED_OUTPUT_SHAPES — its
|
|
48
|
+
> output feeds the Router as per-type records
|
|
49
|
+
> Add structural check in _validate_shape_sequence: Decompose must be
|
|
50
|
+
> immediately followed by a Router; clear error message when it is not
|
|
51
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
### streaming/bytewax
|
|
55
|
+
- **streaming/bytewax:** wire IntoSink nodes to Bytewax output operators<br>
|
|
56
|
+
> Add handlers/storage.py: _StorageSinkPartition wraps loom SinkPartition,
|
|
57
|
+
> extracting payload from Message envelopes; _StorageDynamicSink calls
|
|
58
|
+
> node.build_partition(config, worker_index, worker_count) once per
|
|
59
|
+
> Bytewax worker at startup; _apply_into_sink registers the DynamicSink
|
|
60
|
+
> via bw_output for any IntoSink node found in the compiled plan
|
|
61
|
+
> Register IntoSink in _NODE_HANDLERS dispatch map (dispatcher.py) so
|
|
62
|
+
> _wire_process routes any IntoSink node to _apply_into_sink
|
|
63
|
+
> Add IntoSink pass-through in _execute_router_node (routing.py)
|
|
64
|
+
> consistent with the IntoTopic/Drain pattern for inline Router execution
|
|
65
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
## ♻️ Refactor
|
|
73
|
+
### streaming
|
|
74
|
+
- **streaming:** improve _SQLAlchemyTablePartition with typed columns and pool config<br>
|
|
75
|
+
> Extract _require_sa_url, _sa_engine_kwargs, _sa_type_for, _sa_table_from_struct,
|
|
76
|
+
> _structs_to_rows helpers for readability and single responsibility
|
|
77
|
+
> Map Python types to SA column types (_sa_type_for) with Optional unwrapping
|
|
78
|
+
> and collection → JSON fallback; mirrors _SCALAR_TYPE_MAP from introspection.py
|
|
79
|
+
> Mirror SessionManager pool defaults: pool_pre_ping, echo, pool_size,
|
|
80
|
+
> max_overflow, pool_timeout, pool_recycle, connect_args from config
|
|
81
|
+
> Replace msgspec.structs.asdict cast hack with direct call via _structs_to_rows
|
|
82
|
+
> Drop connection_string fallback — config contract is url only
|
|
83
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
84
|
+
|
|
85
|
+
- **streaming:** merge sink config from dsl and yaml
|
|
86
|
+
- **streaming:** move table sink into package
|
|
87
|
+
- **streaming:** resolve table sink config via context
|
|
88
|
+
- **streaming:** enforce typed table sink config
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
## ✅ Tests
|
|
93
|
+
### streaming
|
|
94
|
+
- **streaming:** add IntoTable SQLAlchemy integration tests against SQLite<br>
|
|
95
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
96
|
+
|
|
97
|
+
- **streaming:** cover resource manager session cache
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
## 🔖 Other
|
|
102
|
+
- Fix Bytewax step flat_map tests
|
|
103
|
+
- Refactor streaming validation helpers<br>
|
|
104
|
+
> --------
|
|
105
|
+
> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
1
110
|
# 🚀 Release 0.7.0 ([#25](https://github.com/the-reacher-data/loom-py/pull/25)) ([`0d8941a`](https://github.com/the-reacher-data/loom-py/commit/0d8941a724ec768b162a07e756bac3d53157ec85))
|
|
2
111
|
|
|
3
112
|
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# 🚀 Release 0.8.0 ([#30](https://github.com/the-reacher-data/loom-py/pull/30)) ([`702b99e`](https://github.com/the-reacher-data/loom-py/commit/702b99ec75a4130f273322f8eb488637a2f98a14))
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## ✨ Features
|
|
5
|
+
### streaming
|
|
6
|
+
- **streaming:** add IntoSink/SinkPartition protocols and Decompose node<br>
|
|
7
|
+
> Introduces the two-level contract that makes storage sinks extensible at
|
|
8
|
+
> the node level. Any frozen dataclass satisfying IntoSink is a first-class
|
|
9
|
+
> terminal node — no registration, no inheritance, no framework coupling.
|
|
10
|
+
> core/schema/: new shared module; SchemaMode promoted from ETL (ETL re-exports for backwards compat)
|
|
11
|
+
> nodes/_sink.py: SinkPartition (contravariant per-worker protocol) and IntoSink (runtime-checkable terminal protocol)
|
|
12
|
+
> nodes/_decompose.py: EntityDecomposer protocol and Decompose transformation node
|
|
13
|
+
> validate.py: _is_leaf_terminal() helper unifies all terminal checks; IntoSink recognised as terminal in shape and output validation; _node_output_shape refactored to dispatch map
|
|
14
|
+
> exports: IntoSink, SinkPartition, Decompose, EntityDecomposer in public API
|
|
15
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
16
|
+
|
|
17
|
+
- **streaming:** add IntoTable sink node and rename EntityDecomposer to PayloadExpander<br>
|
|
18
|
+
> IntoTable: frozen dataclass implementing IntoSink for SQLAlchemy and Delta backends
|
|
19
|
+
> Backend enum: SQLALCHEMY and DELTA variants
|
|
20
|
+
> _SQLAlchemyTablePartition: bulk-insert via engine.begin() per epoch batch
|
|
21
|
+
> _DeltaTablePartition: write via deltalake + polars with validated write mode
|
|
22
|
+
> Rename EntityDecomposer -> PayloadExpander, decompose() -> expand(), targets -> outputs
|
|
23
|
+
> Update both streaming.__init__ and streaming.nodes.__init__ public exports
|
|
24
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### streaming/compiler
|
|
28
|
+
- **streaming/compiler:** teach compiler to resolve IntoSink nodes<br>
|
|
29
|
+
> Add CompiledStorageSink to _plan: holds the IntoSink node and its
|
|
30
|
+
> pre-fetched streaming.sinks.<name> config section
|
|
31
|
+
> Add terminal_storage_sinks field to CompiledPlan (default empty dict
|
|
32
|
+
> keeps all existing tests green)
|
|
33
|
+
> Refactor _build_terminal_sinks and all branch builders to return
|
|
34
|
+
> (kafka_sinks, storage_sinks) tuple in a single walk — no duplicate
|
|
35
|
+
> traversal
|
|
36
|
+
> Add _build_storage_sink: resolves config by node.name or passes {}
|
|
37
|
+
> when name is empty (self-configured sinks)
|
|
38
|
+
> Add validate_storage_sinks phase: reports a clear error for every
|
|
39
|
+
> named IntoSink whose streaming.sinks.<name> section is absent
|
|
40
|
+
> Wire validate_storage_sinks into the compiler pipeline
|
|
41
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
42
|
+
|
|
43
|
+
- **streaming/compiler:** add Decompose shape and structural validation<br>
|
|
44
|
+
> Import Decompose in validate.py
|
|
45
|
+
> Add RECORD to _node_input_shape for Decompose — enforces that it
|
|
46
|
+
> receives individual events, not batches
|
|
47
|
+
> Add Decompose: StreamShape.RECORD to _FIXED_OUTPUT_SHAPES — its
|
|
48
|
+
> output feeds the Router as per-type records
|
|
49
|
+
> Add structural check in _validate_shape_sequence: Decompose must be
|
|
50
|
+
> immediately followed by a Router; clear error message when it is not
|
|
51
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
### streaming/bytewax
|
|
55
|
+
- **streaming/bytewax:** wire IntoSink nodes to Bytewax output operators<br>
|
|
56
|
+
> Add handlers/storage.py: _StorageSinkPartition wraps loom SinkPartition,
|
|
57
|
+
> extracting payload from Message envelopes; _StorageDynamicSink calls
|
|
58
|
+
> node.build_partition(config, worker_index, worker_count) once per
|
|
59
|
+
> Bytewax worker at startup; _apply_into_sink registers the DynamicSink
|
|
60
|
+
> via bw_output for any IntoSink node found in the compiled plan
|
|
61
|
+
> Register IntoSink in _NODE_HANDLERS dispatch map (dispatcher.py) so
|
|
62
|
+
> _wire_process routes any IntoSink node to _apply_into_sink
|
|
63
|
+
> Add IntoSink pass-through in _execute_router_node (routing.py)
|
|
64
|
+
> consistent with the IntoTopic/Drain pattern for inline Router execution
|
|
65
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
## ♻️ Refactor
|
|
73
|
+
### streaming
|
|
74
|
+
- **streaming:** improve _SQLAlchemyTablePartition with typed columns and pool config<br>
|
|
75
|
+
> Extract _require_sa_url, _sa_engine_kwargs, _sa_type_for, _sa_table_from_struct,
|
|
76
|
+
> _structs_to_rows helpers for readability and single responsibility
|
|
77
|
+
> Map Python types to SA column types (_sa_type_for) with Optional unwrapping
|
|
78
|
+
> and collection → JSON fallback; mirrors _SCALAR_TYPE_MAP from introspection.py
|
|
79
|
+
> Mirror SessionManager pool defaults: pool_pre_ping, echo, pool_size,
|
|
80
|
+
> max_overflow, pool_timeout, pool_recycle, connect_args from config
|
|
81
|
+
> Replace msgspec.structs.asdict cast hack with direct call via _structs_to_rows
|
|
82
|
+
> Drop connection_string fallback — config contract is url only
|
|
83
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
84
|
+
|
|
85
|
+
- **streaming:** merge sink config from dsl and yaml
|
|
86
|
+
- **streaming:** move table sink into package
|
|
87
|
+
- **streaming:** resolve table sink config via context
|
|
88
|
+
- **streaming:** enforce typed table sink config
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
## ✅ Tests
|
|
93
|
+
### streaming
|
|
94
|
+
- **streaming:** add IntoTable SQLAlchemy integration tests against SQLite<br>
|
|
95
|
+
> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
96
|
+
|
|
97
|
+
- **streaming:** cover resource manager session cache
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
## 🔖 Other
|
|
102
|
+
- Fix Bytewax step flat_map tests
|
|
103
|
+
- Refactor streaming validation helpers<br>
|
|
104
|
+
> --------
|
|
105
|
+
> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
106
|
+
|
|
107
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "loom-kernel"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.8.0"
|
|
4
4
|
description = "Loom Python project"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -220,7 +220,7 @@ markers = [
|
|
|
220
220
|
|
|
221
221
|
[tool.commitizen]
|
|
222
222
|
name = "cz_conventional_commits"
|
|
223
|
-
version = "0.
|
|
223
|
+
version = "0.8.0"
|
|
224
224
|
tag_format = "v$version"
|
|
225
225
|
version_files = [
|
|
226
226
|
"pyproject.toml:project.version",
|
{loom_kernel-0.7.0 → loom_kernel-0.8.0}/src/loom/core/repository/sqlalchemy/session_manager.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from collections.abc import AsyncIterator
|
|
3
|
+
from collections.abc import AsyncIterator, Mapping
|
|
4
4
|
from contextlib import asynccontextmanager
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
@@ -19,6 +19,46 @@ from loom.core.tracing import get_trace_id
|
|
|
19
19
|
class SessionManager:
|
|
20
20
|
"""Async SQLAlchemy session manager with pooling support."""
|
|
21
21
|
|
|
22
|
+
@classmethod
|
|
23
|
+
def from_config(
|
|
24
|
+
cls,
|
|
25
|
+
config: Mapping[str, Any],
|
|
26
|
+
*,
|
|
27
|
+
inject_trace_id: bool = True,
|
|
28
|
+
**engine_kwargs: object,
|
|
29
|
+
) -> SessionManager:
|
|
30
|
+
"""Build a session manager from a resolved SQLAlchemy config mapping.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
config: Resolved config mapping containing a ``url`` entry and
|
|
34
|
+
optional pool tuning keys.
|
|
35
|
+
inject_trace_id: When ``True``, prefixes SQL statements with the
|
|
36
|
+
active trace id when available.
|
|
37
|
+
**engine_kwargs: Additional keyword arguments forwarded to the
|
|
38
|
+
async engine constructor.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
A configured :class:`SessionManager`.
|
|
42
|
+
|
|
43
|
+
Raises:
|
|
44
|
+
ValueError: If ``url`` is missing or empty.
|
|
45
|
+
"""
|
|
46
|
+
url = config.get("url")
|
|
47
|
+
if not url:
|
|
48
|
+
raise ValueError("SQLAlchemy sink config requires a 'url'.")
|
|
49
|
+
return cls(
|
|
50
|
+
str(url),
|
|
51
|
+
echo=bool(config.get("echo", False)),
|
|
52
|
+
pool_pre_ping=bool(config.get("pool_pre_ping", True)),
|
|
53
|
+
pool_size=_optional_int(config.get("pool_size"), 10),
|
|
54
|
+
max_overflow=_optional_int(config.get("max_overflow"), 20),
|
|
55
|
+
pool_timeout=_optional_int(config.get("pool_timeout"), 30),
|
|
56
|
+
pool_recycle=_optional_int(config.get("pool_recycle"), 1800),
|
|
57
|
+
connect_args=dict(config.get("connect_args") or {}),
|
|
58
|
+
inject_trace_id=inject_trace_id,
|
|
59
|
+
**engine_kwargs,
|
|
60
|
+
)
|
|
61
|
+
|
|
22
62
|
def __init__(
|
|
23
63
|
self,
|
|
24
64
|
url: str,
|
|
@@ -139,3 +179,9 @@ def _register_trace_id_listener(async_engine: AsyncEngine) -> None:
|
|
|
139
179
|
if tid:
|
|
140
180
|
statement = f"/* trace_id={tid} */ " + statement
|
|
141
181
|
return statement, parameters
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def _optional_int(value: Any, default: int) -> int:
|
|
185
|
+
if value is None:
|
|
186
|
+
return default
|
|
187
|
+
return int(value)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Schema evolution mode shared by ETL and streaming layers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from enum import StrEnum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SchemaMode(StrEnum):
|
|
9
|
+
"""Schema evolution strategy applied before each write to a storage target.
|
|
10
|
+
|
|
11
|
+
Values:
|
|
12
|
+
STRICT: Fail on incompatible schema changes.
|
|
13
|
+
EVOLVE: Allow additive evolution where the backend supports it.
|
|
14
|
+
OVERWRITE: Replace the table schema with the incoming schema.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
STRICT = "strict"
|
|
18
|
+
EVOLVE = "evolve"
|
|
19
|
+
OVERWRITE = "overwrite"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
__all__ = ["SchemaMode"]
|
|
@@ -31,10 +31,12 @@ from loom.streaming.nodes._boundary import (
|
|
|
31
31
|
PartitionStrategy,
|
|
32
32
|
)
|
|
33
33
|
from loom.streaming.nodes._broadcast import Broadcast, BroadcastRoute
|
|
34
|
+
from loom.streaming.nodes._decompose import Explode, PayloadExpander
|
|
34
35
|
from loom.streaming.nodes._fork import Fork, ForkRoute
|
|
35
36
|
from loom.streaming.nodes._protocols import Predicate, Selector
|
|
36
37
|
from loom.streaming.nodes._router import Route, Router
|
|
37
38
|
from loom.streaming.nodes._shape import CollectBatch, Drain, ForEach, StreamShape, WindowStrategy
|
|
39
|
+
from loom.streaming.nodes._sink import IntoSink, SinkPartition
|
|
38
40
|
from loom.streaming.nodes._step import (
|
|
39
41
|
BatchExpandStep,
|
|
40
42
|
BatchStep,
|
|
@@ -44,6 +46,13 @@ from loom.streaming.nodes._step import (
|
|
|
44
46
|
Step,
|
|
45
47
|
StepContext,
|
|
46
48
|
)
|
|
49
|
+
from loom.streaming.nodes._table import (
|
|
50
|
+
Backend,
|
|
51
|
+
DeltaSinkConfig,
|
|
52
|
+
IntoTable,
|
|
53
|
+
SqlAlchemyDatabaseConfig,
|
|
54
|
+
SqlAlchemySinkConfig,
|
|
55
|
+
)
|
|
47
56
|
from loom.streaming.nodes._with import (
|
|
48
57
|
AsyncContextDependency,
|
|
49
58
|
ContextFactory,
|
|
@@ -57,45 +66,54 @@ from loom.streaming.nodes.refs import payload as payload
|
|
|
57
66
|
|
|
58
67
|
__all__ = [
|
|
59
68
|
"AsyncContextDependency",
|
|
69
|
+
"Backend",
|
|
60
70
|
"BatchExpandStep",
|
|
61
71
|
"BatchStep",
|
|
62
72
|
"Broadcast",
|
|
63
73
|
"BroadcastRoute",
|
|
64
74
|
"CollectBatch",
|
|
65
75
|
"ContextFactory",
|
|
76
|
+
"DeltaSinkConfig",
|
|
77
|
+
"Explode",
|
|
66
78
|
"Drain",
|
|
79
|
+
"PayloadExpander",
|
|
67
80
|
"ErrorEnvelope",
|
|
68
81
|
"ErrorKind",
|
|
69
82
|
"ErrorMessage",
|
|
70
83
|
"ErrorMessageMeta",
|
|
71
84
|
"ErrorRoute",
|
|
85
|
+
"ExpandStep",
|
|
72
86
|
"ForEach",
|
|
73
|
-
"FromMultiTypeTopic",
|
|
74
|
-
"FromTopic",
|
|
75
87
|
"Fork",
|
|
76
88
|
"ForkRoute",
|
|
77
|
-
"
|
|
89
|
+
"FromMultiTypeTopic",
|
|
90
|
+
"FromTopic",
|
|
91
|
+
"IntoSink",
|
|
92
|
+
"IntoTable",
|
|
78
93
|
"IntoTopic",
|
|
79
94
|
"Message",
|
|
80
95
|
"MessageMeta",
|
|
81
96
|
"PartitionGuarantee",
|
|
82
97
|
"PartitionPolicy",
|
|
83
98
|
"PartitionStrategy",
|
|
99
|
+
"Predicate",
|
|
84
100
|
"Process",
|
|
85
101
|
"ProcessNode",
|
|
86
|
-
"Predicate",
|
|
87
102
|
"RecordStep",
|
|
88
103
|
"ResourceFactory",
|
|
89
104
|
"ResourceScope",
|
|
90
105
|
"Route",
|
|
91
106
|
"Router",
|
|
92
107
|
"Selector",
|
|
108
|
+
"SinkPartition",
|
|
93
109
|
"StreamFlow",
|
|
94
110
|
"StreamShape",
|
|
95
|
-
"WindowStrategy",
|
|
96
111
|
"Step",
|
|
97
112
|
"StepContext",
|
|
98
113
|
"SyncContextDependency",
|
|
114
|
+
"SqlAlchemyDatabaseConfig",
|
|
115
|
+
"SqlAlchemySinkConfig",
|
|
116
|
+
"WindowStrategy",
|
|
99
117
|
"With",
|
|
100
118
|
"WithAsync",
|
|
101
119
|
"compile_flow",
|
|
@@ -287,6 +287,10 @@ class _BuildContext:
|
|
|
287
287
|
"""Get or create a resource manager for *node* at position *idx*."""
|
|
288
288
|
return self.resource_manager.manager_for(idx, node)
|
|
289
289
|
|
|
290
|
+
def session_manager_for(self, config: Any) -> Any:
|
|
291
|
+
"""Get or create a shared SQLAlchemy session manager for one config."""
|
|
292
|
+
return self.resource_manager.session_manager_for(config)
|
|
293
|
+
|
|
290
294
|
@property
|
|
291
295
|
def current_path(self) -> tuple[int, ...]:
|
|
292
296
|
"""Return the current wiring path inside the process tree."""
|