loom-kernel 0.5.0__tar.gz → 0.7.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.5.0 → loom_kernel-0.7.0}/CHANGELOG.md +216 -0
- loom_kernel-0.7.0/CHANGELOG_RELEASE.md +96 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/PKG-INFO +8 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/README.md +7 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/conf.py +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/etl/pipelines.md +9 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/etl/testing.md +2 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/examples-repo/index.md +9 -6
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/getting-started/etl.md +9 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/getting-started/rest.md +15 -6
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/getting-started/streaming.md +2 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/celery.md +9 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/etl.md +9 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/overview.md +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/etl.rst +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/celery.md +9 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/examples.md +9 -6
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/streaming/bytewax.md +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/pyproject.toml +2 -5
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/bootstrap.py +145 -79
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/config.py +27 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/runner.py +133 -79
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/service.py +27 -12
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/async_bridge.py +25 -7
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/abc/config.py +3 -1
- loom_kernel-0.7.0/src/loom/core/compiler.py +24 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/__init__.py +6 -0
- loom_kernel-0.7.0/src/loom/core/config/binder.py +100 -0
- loom_kernel-0.7.0/src/loom/core/config/context.py +232 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/keys.py +5 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/observability.py +2 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/config.py +11 -4
- loom_kernel-0.7.0/src/loom/core/observability/__init__.py +28 -0
- loom_kernel-0.7.0/src/loom/core/observability/config.py +102 -0
- loom_kernel-0.7.0/src/loom/core/observability/event.py +196 -0
- loom_kernel-0.7.0/src/loom/core/observability/observer/__init__.py +1 -0
- loom_kernel-0.7.0/src/loom/core/observability/observer/noop.py +27 -0
- loom_kernel-0.7.0/src/loom/core/observability/observer/otel.py +216 -0
- loom_kernel-0.7.0/src/loom/core/observability/observer/structlog.py +73 -0
- loom_kernel-0.7.0/src/loom/core/observability/protocol.py +34 -0
- loom_kernel-0.7.0/src/loom/core/observability/runtime.py +230 -0
- loom_kernel-0.7.0/src/loom/core/observability/topology.py +32 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/abc/query.py +11 -14
- loom_kernel-0.7.0/src/loom/core/runner.py +87 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/__init__.py +4 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_writer.py +6 -6
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/provider.py +15 -15
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_writer.py +5 -5
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/provider.py +15 -15
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_scope.py +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_validators_step.py +4 -3
- loom_kernel-0.7.0/src/loom/etl/declarative/expr/_predicate.py +103 -0
- loom_kernel-0.7.0/src/loom/etl/executor/__init__.py +10 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/executor/_executor.py +65 -44
- loom_kernel-0.7.0/src/loom/etl/lineage/__init__.py +5 -0
- loom_kernel-0.7.0/src/loom/etl/lineage/_config.py +43 -0
- loom_kernel-0.7.0/src/loom/etl/lineage/_observer.py +269 -0
- loom_kernel-0.5.0/src/loom/etl/observability/records.py → loom_kernel-0.7.0/src/loom/etl/lineage/_records.py +12 -23
- loom_kernel-0.7.0/src/loom/etl/lineage/sinks/__init__.py +17 -0
- loom_kernel-0.7.0/src/loom/etl/lineage/sinks/_protocol.py +44 -0
- loom_kernel-0.7.0/src/loom/etl/lineage/sinks/_table.py +34 -0
- loom_kernel-0.7.0/src/loom/etl/lineage/sinks/_writer.py +22 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_params.py +2 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/_providers.py +6 -6
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/_wiring.py +32 -11
- loom_kernel-0.7.0/src/loom/etl/runner/config_loader.py +37 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/core.py +35 -20
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/_config.py +8 -7
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/__init__.py +4 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/_stubs.py +99 -39
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/spark.py +16 -8
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/prometheus/__init__.py +4 -1
- loom_kernel-0.7.0/src/loom/prometheus/kafka.py +163 -0
- loom_kernel-0.7.0/src/loom/prometheus/lifecycle.py +125 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/app.py +15 -21
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/auto.py +57 -94
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/router_runtime.py +66 -26
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_adapter.py +87 -27
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_dlq.py +5 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_error_boundary.py +4 -10
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_runtime_io.py +11 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/_shared.py +45 -22
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/boundary.py +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/routing.py +12 -4
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/scopes.py +21 -6
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/shapes.py +2 -37
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/steps.py +41 -12
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/runner.py +88 -83
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/_bindings.py +42 -99
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/_compiler.py +30 -9
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/phases/build_plan.py +39 -58
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/phases/validate.py +4 -5
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/_errors.py +3 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/_message.py +2 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/__init__.py +0 -10
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_message.py +12 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_wire.py +6 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/client/_consumer.py +26 -8
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/client/_producer.py +49 -11
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/message/_consumer.py +37 -13
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/message/_producer.py +29 -11
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/message/_protocol.py +2 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_broadcast.py +4 -4
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/testing.py +54 -32
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +46 -21
- loom_kernel-0.7.0/tests/integration/core/bootstrap/test_bootstrap_integration.py +240 -0
- loom_kernel-0.7.0/tests/integration/core/rest/test_rest_error_mapping.py +248 -0
- loom_kernel-0.7.0/tests/integration/core/rest/test_rest_observability.py +238 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/etl/test_runner_integration.py +6 -5
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/conf.interfaces.yaml +5 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/conf.yaml +5 -3
- loom_kernel-0.7.0/tests/unit/celery_bootstrap/test_async_runtime.py +88 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_bootstrap/test_bootstrap.py +118 -71
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_jobs/test_celery_service.py +26 -5
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_jobs/test_config.py +49 -4
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_jobs/test_runner.py +193 -134
- loom_kernel-0.7.0/tests/unit/core/config/test_binder.py +147 -0
- loom_kernel-0.7.0/tests/unit/core/config/test_context.py +115 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/errors/test_errors.py +48 -81
- loom_kernel-0.7.0/tests/unit/core/logger/test_config.py +24 -0
- loom_kernel-0.7.0/tests/unit/core/observability/test_observers.py +363 -0
- loom_kernel-0.7.0/tests/unit/core/observability/test_runtime.py +179 -0
- loom_kernel-0.7.0/tests/unit/core/repository/abc/test_query.py +108 -0
- loom_kernel-0.7.0/tests/unit/core/test_compiler_contracts.py +27 -0
- loom_kernel-0.7.0/tests/unit/core/test_runner_contracts.py +121 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_step_execution.py +13 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_step_execution.py +13 -5
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_history_target.py +68 -197
- loom_kernel-0.7.0/tests/unit/etl/lineage/test_observer.py +187 -0
- loom_kernel-0.7.0/tests/unit/etl/lineage/test_records.py +101 -0
- loom_kernel-0.7.0/tests/unit/etl/lineage/test_store.py +74 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_backend_factory.py +36 -119
- loom_kernel-0.7.0/tests/unit/etl/storage/test_observability_and_protocols.py +118 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_config_loader.py +19 -11
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_executor.py +67 -18
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_module_contracts.py +8 -8
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_public_api_discovery.py +2 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_record_schema_coverage.py +2 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_runner.py +77 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/testing/test_scenario_and_stubs.py +91 -10
- loom_kernel-0.7.0/tests/unit/rest/test_fastapi_auto_logger.py +127 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_router_runtime.py +89 -9
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/conftest.py +12 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_adapter.py +10 -7
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +129 -83
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_collect_batch.py +1 -1
- loom_kernel-0.7.0/tests/unit/streaming/bytewax/test_dlq.py +259 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_error_boundary.py +3 -8
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_runner.py +121 -23
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_runtime_io.py +67 -4
- loom_kernel-0.7.0/tests/unit/streaming/bytewax/test_steps.py +221 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_async_walk.py +3 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_basics.py +7 -7
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_config_bindings.py +8 -8
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_multi_source.py +2 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_router.py +4 -4
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_window.py +2 -2
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_with.py +3 -3
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/test_compiler_examples.py +1 -1
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/test_flow_examples.py +4 -4
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/conftest.py +1 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_client.py +72 -4
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_message.py +14 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_message_client.py +53 -15
- loom_kernel-0.7.0/tests/unit/streaming/kafka/test_observability.py +158 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_wire.py +32 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/nodes/test_broadcast.py +3 -3
- loom_kernel-0.7.0/tests/unit/streaming/observability/cases.py +53 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/observability/test_observability_runner.py +22 -16
- loom_kernel-0.7.0/tests/unit/streaming/observability/test_protocols.py +81 -0
- loom_kernel-0.7.0/tests/unit/streaming/observability/test_structlog.py +79 -0
- loom_kernel-0.7.0/tests/unit/streaming/support/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/test_fork.py +2 -2
- loom_kernel-0.7.0/tests/unit/streaming/test_otel_observability.py +33 -0
- loom_kernel-0.7.0/tests/unit/testing/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/uv.lock +4 -4
- loom_kernel-0.5.0/CHANGELOG_RELEASE.md +0 -25
- loom_kernel-0.5.0/src/loom/celery/event_loop.py +0 -158
- loom_kernel-0.5.0/src/loom/core/observability.py +0 -59
- loom_kernel-0.5.0/src/loom/etl/declarative/expr/_predicate.py +0 -174
- loom_kernel-0.5.0/src/loom/etl/executor/__init__.py +0 -61
- loom_kernel-0.5.0/src/loom/etl/observability/__init__.py +0 -59
- loom_kernel-0.5.0/src/loom/etl/observability/config.py +0 -67
- loom_kernel-0.5.0/src/loom/etl/observability/factory.py +0 -52
- loom_kernel-0.5.0/src/loom/etl/observability/observers/__init__.py +0 -13
- loom_kernel-0.5.0/src/loom/etl/observability/observers/_labels.py +0 -57
- loom_kernel-0.5.0/src/loom/etl/observability/observers/composite.py +0 -62
- loom_kernel-0.5.0/src/loom/etl/observability/observers/noop.py +0 -36
- loom_kernel-0.5.0/src/loom/etl/observability/observers/otel.py +0 -263
- loom_kernel-0.5.0/src/loom/etl/observability/observers/protocol.py +0 -37
- loom_kernel-0.5.0/src/loom/etl/observability/observers/structlog.py +0 -100
- loom_kernel-0.5.0/src/loom/etl/observability/recording/__init__.py +0 -5
- loom_kernel-0.5.0/src/loom/etl/observability/recording/_recorder.py +0 -225
- loom_kernel-0.5.0/src/loom/etl/observability/sinks/__init__.py +0 -17
- loom_kernel-0.5.0/src/loom/etl/observability/sinks/_protocol.py +0 -44
- loom_kernel-0.5.0/src/loom/etl/observability/sinks/_table.py +0 -42
- loom_kernel-0.5.0/src/loom/etl/observability/sinks/_writer.py +0 -26
- loom_kernel-0.5.0/src/loom/etl/runner/config_loader.py +0 -45
- loom_kernel-0.5.0/src/loom/prometheus/kafka.py +0 -156
- loom_kernel-0.5.0/src/loom/streaming/bytewax/_output_wiring.py +0 -203
- loom_kernel-0.5.0/src/loom/streaming/observability/__init__.py +0 -29
- loom_kernel-0.5.0/src/loom/streaming/observability/config.py +0 -28
- loom_kernel-0.5.0/src/loom/streaming/observability/factory.py +0 -47
- loom_kernel-0.5.0/src/loom/streaming/observability/observers/__init__.py +0 -29
- loom_kernel-0.5.0/src/loom/streaming/observability/observers/composite.py +0 -125
- loom_kernel-0.5.0/src/loom/streaming/observability/observers/noop.py +0 -58
- loom_kernel-0.5.0/src/loom/streaming/observability/observers/otel.py +0 -232
- loom_kernel-0.5.0/src/loom/streaming/observability/observers/protocol.py +0 -174
- loom_kernel-0.5.0/src/loom/streaming/observability/observers/structlog.py +0 -158
- loom_kernel-0.5.0/tests/integration/etl/test_runtime_contracts.py +0 -455
- loom_kernel-0.5.0/tests/unit/celery_bootstrap/test_event_loop.py +0 -182
- loom_kernel-0.5.0/tests/unit/core/repository/abc/test_query.py +0 -44
- loom_kernel-0.5.0/tests/unit/etl/storage/test_observability_and_protocols.py +0 -149
- loom_kernel-0.5.0/tests/unit/etl/test_observer.py +0 -351
- loom_kernel-0.5.0/tests/unit/etl/test_observer_internals.py +0 -448
- loom_kernel-0.5.0/tests/unit/rest/test_fastapi_auto_logger.py +0 -157
- loom_kernel-0.5.0/tests/unit/streaming/kafka/test_observability.py +0 -162
- loom_kernel-0.5.0/tests/unit/streaming/observability/cases.py +0 -139
- loom_kernel-0.5.0/tests/unit/streaming/observability/test_protocols.py +0 -78
- loom_kernel-0.5.0/tests/unit/streaming/observability/test_structlog.py +0 -139
- loom_kernel-0.5.0/tests/unit/streaming/test_otel_observability.py +0 -216
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.github/workflows/ci-main.yml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.github/workflows/ci-pr.yml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.github/workflows/docs.yml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.github/workflows/release.yml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.gitignore +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.pre-commit-config.yaml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.readthedocs.yaml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/LICENSE +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/Makefile +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/codecov.yml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/_static/.gitkeep +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/_static/custom.css +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/_static/logo-transparent.png +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/_static/logo.svg +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/architecture/adr/README.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/architecture/clean-architecture.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/architecture/overview.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/etl/examples.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/autocrud.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/fake-repo-examples.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/quickstart.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/use-case-dsl.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/index.rst +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/core.rst +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/repository.rst +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/rest.rst +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/streaming.rst +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/testing.rst +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/index.rst +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/requirements.txt +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/autocrud.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/testing.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/use-case-dsl.md +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/sonar-project.properties +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/auto.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/constants.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/backend/sqlalchemy.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/bootstrap/kernel.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/gateway.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/repository.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/base.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/field.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/loader.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/resolver.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/di/container.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/base.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/manifest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/compiler.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/executor.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/errors/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/errors/codes.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/errors/errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/context.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/job.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/service.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/base.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/field.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/types.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/response/base.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/uow/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/uow/context.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_binding.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_compiler.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/filtering.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/compiler.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/constants.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/_plan.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/golden.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/runner.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/golden/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/golden/baselines/.gitkeep +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/golden/outputs/.gitkeep +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/golden/plans/.gitkeep +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/helpers/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/celery_bootstrap/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/integration/core/repository → loom_kernel-0.7.0/tests/integration/core/bootstrap}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/integration/core/repository/sqlalchemy → loom_kernel-0.7.0/tests/integration/core/repository}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/integration/core/rest → loom_kernel-0.7.0/tests/integration/core/repository/sqlalchemy}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
- {loom_kernel-0.5.0/tests/integration/core/use_case → loom_kernel-0.7.0/tests/integration/core/rest}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
- {loom_kernel-0.5.0/tests/integration/fake_repo → loom_kernel-0.7.0/tests/integration/core/use_case}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/etl/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/integration/fake_repo/product/category → loom_kernel-0.7.0/tests/integration/fake_repo}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/main.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/manifest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/integration/fake_repo/product/review → loom_kernel-0.7.0/tests/integration/fake_repo/product/category}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/category/model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/category/schemas.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/interface.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/jobs.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/relations.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/repository.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/repository_contract.py +0 -0
- {loom_kernel-0.5.0/tests/unit → loom_kernel-0.7.0/tests/integration/fake_repo/product/review}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/review/model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/review/schemas.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/schemas.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/use_cases.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/support/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/support/logical_repo_fixtures.py +0 -0
- {loom_kernel-0.5.0/tests/unit/celery_bootstrap → loom_kernel-0.7.0/tests/unit}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/celery_jobs → loom_kernel-0.7.0/tests/unit/celery_bootstrap}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core → loom_kernel-0.7.0/tests/unit/celery_jobs}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_jobs/test_auto.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/backend → loom_kernel-0.7.0/tests/unit/core}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/bootstrap → loom_kernel-0.7.0/tests/unit/core/backend}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/backend/test_backend_compiler.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/cache → loom_kernel-0.7.0/tests/unit/core/bootstrap}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/bootstrap/test_kernel.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/command → loom_kernel-0.7.0/tests/unit/core/cache}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/cache/test_cached_repository.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/config → loom_kernel-0.7.0/tests/unit/core/command}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/command/test_command_base.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/command/test_command_field.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/command/test_command_patch.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/command/test_introspection.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/di → loom_kernel-0.7.0/tests/unit/core/config}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/config/test_config.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/config/test_configurable.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/discovery → loom_kernel-0.7.0/tests/unit/core/di}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/di/test_container.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/engine → loom_kernel-0.7.0/tests/unit/core/discovery}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/discovery/test_manifest.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/errors → loom_kernel-0.7.0/tests/unit/core/engine}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_compiler.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_executor.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_executor_trace.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_executor_uow.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_metrics.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_plan.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/expr → loom_kernel-0.7.0/tests/unit/core/errors}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/job → loom_kernel-0.7.0/tests/unit/core/expr}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/expr/test_expr.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/logger → loom_kernel-0.7.0/tests/unit/core/job}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_callback.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_context.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_handle.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_inline_service.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_job.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/model → loom_kernel-0.7.0/tests/unit/core/logger}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/logger/test_registry.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/projection → loom_kernel-0.7.0/tests/unit/core/model}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/model/test_model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/model/test_struct.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/model/test_timestamped.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/repository → loom_kernel-0.7.0/tests/unit/core/observability}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/repository/abc → loom_kernel-0.7.0/tests/unit/core/projection}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/projection/test_runtime.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/repository/sqlalchemy → loom_kernel-0.7.0/tests/unit/core/repository}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/routing → loom_kernel-0.7.0/tests/unit/core/repository/abc}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/abc/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/tracing → loom_kernel-0.7.0/tests/unit/core/repository/sqlalchemy}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/uow → loom_kernel-0.7.0/tests/unit/core/routing}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/routing/test_routing.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/test_async_bridge.py +0 -0
- {loom_kernel-0.5.0/tests/unit/core/use_case → loom_kernel-0.7.0/tests/unit/core/tracing}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/tracing/test_context.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl → loom_kernel-0.7.0/tests/unit/core/uow}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/uow/test_executor_uow.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/uow/test_uow_protocols.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/backends → loom_kernel-0.7.0/tests/unit/core/use_case}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_compute.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_factory.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_field_ref.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_invoker.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_markers.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_rule.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_use_case.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/backends/test_polars → loom_kernel-0.7.0/tests/unit/etl}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/backends/test_spark → loom_kernel-0.7.0/tests/unit/etl/backends}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/_historify_contract.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_historify_common.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/checkpoint → loom_kernel-0.7.0/tests/unit/etl/backends/test_polars}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/checkpoint/backends → loom_kernel-0.7.0/tests/unit/etl/backends/test_spark}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/compiler → loom_kernel-0.7.0/tests/unit/etl/checkpoint}/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/io → loom_kernel-0.7.0/tests/unit/etl/checkpoint/backends}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/checkpoint/test_cleaners.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/checkpoint/test_store.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/schema → loom_kernel-0.7.0/tests/unit/etl/compiler}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_compiler.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_step_validator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_structural.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/conftest.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/sql → loom_kernel-0.7.0/tests/unit/etl/io}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_source.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_source_json.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_source_options.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_target.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_utils.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_variants.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/pipeline/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/pipeline/test_proxy.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/pipeline/test_step.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/storage → loom_kernel-0.7.0/tests/unit/etl/schema}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/schema/test_contract.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/schema/test_schema.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/schema/test_table.py +0 -0
- {loom_kernel-0.5.0/tests/unit/etl/testing → loom_kernel-0.7.0/tests/unit/etl/sql}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/sql/test_merge.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/sql/test_predicate.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
- {loom_kernel-0.5.0/tests/unit/prometheus → loom_kernel-0.7.0/tests/unit/etl/storage}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_io_protocols.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_locator.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_route_build.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_schema_readers.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_storage_config.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_format_registry.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_runner_errors.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_spark_testing.py +0 -0
- {loom_kernel-0.5.0/tests/unit/rest → loom_kernel-0.7.0/tests/unit/etl/testing}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/testing/test_runners.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
- {loom_kernel-0.5.0/tests/unit/streaming/bytewax → loom_kernel-0.7.0/tests/unit/prometheus}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/prometheus/test_adapter.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/prometheus/test_middleware.py +0 -0
- {loom_kernel-0.5.0/tests/unit/streaming/compiler → loom_kernel-0.7.0/tests/unit/rest}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_autocrud.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_middleware.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_pydantic_adapter.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_response.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_rest_adapter.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_rest_compiler.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_rest_model.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/__init__.py +0 -0
- {loom_kernel-0.5.0/tests/unit/streaming/contracts → loom_kernel-0.7.0/tests/unit/streaming/bytewax}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/cases.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_operators.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
- {loom_kernel-0.5.0/tests/unit/streaming/nodes → loom_kernel-0.7.0/tests/unit/streaming/compiler}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/cases.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/conftest.py +0 -0
- {loom_kernel-0.5.0/tests/unit/streaming/observability → loom_kernel-0.7.0/tests/unit/streaming/contracts}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/cases.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/test_boundary.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/test_message.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/test_steps.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/batch.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/fork.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/router.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/shared.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/simple.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/cases.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/fakes.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_config.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_settings.py +0 -0
- {loom_kernel-0.5.0/tests/unit/streaming/support → loom_kernel-0.7.0/tests/unit/streaming/nodes}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/nodes/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/nodes/test_logging.py +0 -0
- {loom_kernel-0.5.0/tests/unit/testing → loom_kernel-0.7.0/tests/unit/streaming/observability}/__init__.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/observability/conftest.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/observability/test_registry.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/support/flow_cases.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/test_routing.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/test_with.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/testing/test_golden.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/testing/test_http_harness.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/testing/test_in_memory.py +0 -0
- {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/testing/test_runner.py +0 -0
|
@@ -1,3 +1,219 @@
|
|
|
1
|
+
# 🚀 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
|
+
|
|
3
|
+
|
|
4
|
+
## ✨ Features
|
|
5
|
+
### config
|
|
6
|
+
- **config:** add StructBinder and migrate streaming binding resolution<br>
|
|
7
|
+
> Introduces StructBinder in core/config/binder.py — a Strategy that
|
|
8
|
+
> injects constructor arguments from a config mapping via msgspec.convert,
|
|
9
|
+
> covering primitives, Literal constraints, and LoomFrozenStruct subclasses.
|
|
10
|
+
> Migrates streaming _instantiate_binding to use it, removing ~30 lines of
|
|
11
|
+
> private helpers and adding typed ConfigError on resolution failures.
|
|
12
|
+
|
|
13
|
+
- **config:** add ConfigContext for typed section extraction and binding resolution<br>
|
|
14
|
+
> Single entry-point for runner and bootstrap code to read config:
|
|
15
|
+
> section() extracts typed sub-trees, bind() injects constructor args
|
|
16
|
+
> from a config path + overrides, resolve() materializes ConfigBinding
|
|
17
|
+
> declarations. Accepts an optional StructBinder for strict-mode control.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## 🐛 Fixes
|
|
22
|
+
### core
|
|
23
|
+
- **core:** clean async bridge timeout and celery typing
|
|
24
|
+
|
|
25
|
+
### etl
|
|
26
|
+
- **etl:** align missing storage error with config contract
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
## ♻️ Refactor
|
|
32
|
+
### model
|
|
33
|
+
- **model:** migrate public config structs to LoomFrozenStruct
|
|
34
|
+
|
|
35
|
+
### streaming
|
|
36
|
+
- **streaming:** clean up _instantiate_binding before extraction<br>
|
|
37
|
+
> Replace mutable dict() + .update() with a single dict unpacking
|
|
38
|
+
> Remove the dead param.annotation fallback (get_type_hints already
|
|
39
|
+
> resolves all forward refs; the fallback silently passed strings to
|
|
40
|
+
> _is_struct_annotation which always returned False)
|
|
41
|
+
> Extract _SKIP_KINDS constant to name the variadic-parameter guard
|
|
42
|
+
> Raise ConfigError instead of TypeError for missing required struct
|
|
43
|
+
> params (semantically a config error, not a type error; both are
|
|
44
|
+
> caught by the enclosing _resolve_binding handler so no behaviour
|
|
45
|
+
> change in streaming)
|
|
46
|
+
> All 7 binding tests pass.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### core
|
|
50
|
+
- **core:** homogenize config and runner boundaries
|
|
51
|
+
- **core:** add runner and compiler protocols
|
|
52
|
+
- **core:** apply runner lifecycle protocols
|
|
53
|
+
- **core:** harden runner lifecycle abstraction<br>
|
|
54
|
+
> shutdown_runner/flush_runner now catch and log exceptions instead of
|
|
55
|
+
> propagating, preserving the original exception when called from finally
|
|
56
|
+
> blocks; contract updated in docstrings and covered by new tests
|
|
57
|
+
> CompilerProtocol drops @runtime_checkable — no production isinstance
|
|
58
|
+
> usage existed; Protocol remains valid for static typing
|
|
59
|
+
> StreamingRunner.prepare_run() calls shutdown_runner(self) before
|
|
60
|
+
> overwriting self._shutdown, preventing resource leaks on double calls
|
|
61
|
+
> _build_backend_options extracted from loom.celery.config into
|
|
62
|
+
> loom.core.async_bridge.build_backend_options, eliminating duplication
|
|
63
|
+
> between the Celery and streaming domains
|
|
64
|
+
> _CeleryAsyncRuntime._signals_connected ClassVar removed; the
|
|
65
|
+
> module-level _SIGNALS_CONNECTED flag is the single source of truth
|
|
66
|
+
> for the process-level signal guard
|
|
67
|
+
> ETLRunner.flush() delegates to ETLExecutor.flush(), which checks
|
|
68
|
+
> SupportsFlush via isinstance instead of getattr duck-typing
|
|
69
|
+
> TypeVars in compiler.py renamed to _RequestT/_PlanT to signal they
|
|
70
|
+
> are implementation details of the Protocol, not public API
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
### etl
|
|
74
|
+
- **etl:** make flush an optional runner capability
|
|
75
|
+
|
|
76
|
+
### celery
|
|
77
|
+
- **celery:** adopt runner shutdown helper
|
|
78
|
+
- **celery:** replace _SIGNALS_CONNECTED sentinel with dispatch_uid<br>
|
|
79
|
+
> Eliminates the module-level mutable boolean that violated the no-global-
|
|
80
|
+
> mutable-state architecture rule. Idempotency is now handled by Celery's
|
|
81
|
+
> dispatch_uid mechanism: disconnect+connect on each call ensures the most-
|
|
82
|
+
> recently registered closure is always active, so a second bootstrap_worker
|
|
83
|
+
> call wires up fresh dependencies rather than leaving stale closures from
|
|
84
|
+
> the first call.
|
|
85
|
+
> This is strictly better than the sentinel: no global state, no race
|
|
86
|
+
> condition between threads calling bootstrap_worker concurrently, and
|
|
87
|
+
> correct closure replacement when called multiple times in tests.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
### rest
|
|
91
|
+
- **rest:** use observability config directly
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
# 🚀 Release 0.6.0 ([#22](https://github.com/the-reacher-data/loom-py/pull/22)) ([`5146569`](https://github.com/the-reacher-data/loom-py/commit/51465697115036ed05f620a1099272e4fd216501))
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
## ✨ Features
|
|
103
|
+
### core
|
|
104
|
+
- **core:** add unified ObservabilityRuntime<br>
|
|
105
|
+
> Introduces the core observability package: LifecycleEvent, LifecycleObserver
|
|
106
|
+
> protocol, ObservabilityConfig, and ObservabilityRuntime as a single fan-out
|
|
107
|
+
> engine replacing the fragmented per-module observer wiring. Adds
|
|
108
|
+
> StructlogLifecycleObserver, OtelLifecycleObserver, NoopObserver, and
|
|
109
|
+
> PrometheusLifecycleAdapter (with Pushgateway support for ETL batch jobs).
|
|
110
|
+
> Backward-compat re-exports (safe_observe, notify_observers) kept for the
|
|
111
|
+
> streaming composite observer until the legacy cleanup commit.
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
## 🐛 Fixes
|
|
116
|
+
### observability
|
|
117
|
+
- **observability:** restore default bootstraps
|
|
118
|
+
|
|
119
|
+
### rest
|
|
120
|
+
- **rest:** correct camel-to-snake conversion for acronyms in filter fields
|
|
121
|
+
|
|
122
|
+
### streaming
|
|
123
|
+
- **streaming:** propagate trace ids through bytewax paths
|
|
124
|
+
- **streaming:** keep input trace ids through the micro
|
|
125
|
+
- **streaming:** bridge otel trace ids from messages
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## 📖 Documentation
|
|
129
|
+
- align yaml config and dummy repo links
|
|
130
|
+
- restore dummy repo urls
|
|
131
|
+
- fix markdown links for streaming dummies
|
|
132
|
+
|
|
133
|
+
### prometheus
|
|
134
|
+
- **prometheus:** update KafkaPrometheusMetrics docstring metric names
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
## ♻️ Refactor
|
|
139
|
+
### observability
|
|
140
|
+
- **observability:** simplify otel log correlation
|
|
141
|
+
- **observability:** simplify otel exporter imports
|
|
142
|
+
- **observability:** expose ObservabilityRuntime in public API and clean architecture debt<br>
|
|
143
|
+
> Export ObservabilityRuntime and LifecycleStatus from loom.core.observability package
|
|
144
|
+
> Compute dict(meta) once in span() instead of three separate allocations
|
|
145
|
+
> Replace _SIGNALS_CONNECTED module-level global with ClassVar on _CeleryAsyncRuntime
|
|
146
|
+
> Add RuntimeError to bootstrap_worker Raises docstring
|
|
147
|
+
> Fix TraceIdMiddleware docstring example (removed spurious ObservabilityRuntime reference)
|
|
148
|
+
> Add missing observability_runtime param to _make_handler docstring
|
|
149
|
+
|
|
150
|
+
- **observability:** unify runtime across services
|
|
151
|
+
- **observability:** clean up dead code and docs
|
|
152
|
+
|
|
153
|
+
### streaming
|
|
154
|
+
- **streaming:** migrate to unified ObservabilityRuntime<br>
|
|
155
|
+
> Replace StreamingObservabilityConfig and the manual observer construction
|
|
156
|
+
> in _load_observability_runtime() with ObservabilityRuntime.from_config().
|
|
157
|
+
> Observability config now lives under streaming.runtime.observability in YAML,
|
|
158
|
+
> eliminating the separate streaming.observability section.
|
|
159
|
+
> Delete src/loom/streaming/_observability.py (StreamingObservabilityConfig)
|
|
160
|
+
> Delete src/loom/streaming/observability/ directory (old observer stack)
|
|
161
|
+
> Add observability: ObservabilityConfig field to BytewaxRuntimeConfig
|
|
162
|
+
> StreamingRunner.from_config() calls ObservabilityRuntime.from_config() directly
|
|
163
|
+
> StreamingTestRunner defaults to ObservabilityRuntime.noop(); callers pass
|
|
164
|
+
> observability_runtime= explicitly when needed
|
|
165
|
+
> Update tests to use new config shape and ObservabilityRuntime([observer])
|
|
166
|
+
|
|
167
|
+
- **streaming:** replace KafkaStreamingObserver with LifecycleEvent/TRANSPORT<br>
|
|
168
|
+
> Eliminates the parallel KafkaStreamingObserver protocol hierarchy (NoopKafkaObserver,
|
|
169
|
+
> StructlogKafkaObserver) and models all Kafka transport events as LifecycleEvent with
|
|
170
|
+
> Scope.TRANSPORT. KafkaPrometheusMetrics now implements the LifecycleObserver protocol
|
|
171
|
+
> via a single on_event() dispatcher instead of four typed callback methods.
|
|
172
|
+
|
|
173
|
+
- **streaming:** preserve trace lineage across boundaries
|
|
174
|
+
|
|
175
|
+
### prometheus
|
|
176
|
+
- **prometheus:** add KafkaMetricName enum and drop loom_ prefix<br>
|
|
177
|
+
> Extracts Prometheus metric names into a public KafkaMetricName StrEnum so
|
|
178
|
+
> callers can reference metric names without magic strings. Removes the loom_
|
|
179
|
+
> namespace prefix from all four Kafka instruments (produced_total,
|
|
180
|
+
> consumed_total, encode_duration_seconds, decode_duration_seconds).
|
|
181
|
+
|
|
182
|
+
- **prometheus:** drop loom prefix from lifecycle metrics
|
|
183
|
+
|
|
184
|
+
### rest
|
|
185
|
+
- **rest:** use core observability runtime
|
|
186
|
+
- **rest:** read prometheus from observability config
|
|
187
|
+
|
|
188
|
+
### celery
|
|
189
|
+
- **celery:** adopt async bridge and runtime config
|
|
190
|
+
|
|
191
|
+
### etl
|
|
192
|
+
- **etl:** make spark pytest plugin opt-in
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
## ✅ Tests
|
|
197
|
+
### kafka
|
|
198
|
+
- **kafka:** update metric name assertions after loom_ prefix removal
|
|
199
|
+
|
|
200
|
+
### observability
|
|
201
|
+
- **observability:** cover lineage and runtime branches
|
|
202
|
+
|
|
203
|
+
### integration
|
|
204
|
+
- **integration:** add in-memory REST, observability, and bootstrap integration tests
|
|
205
|
+
|
|
206
|
+
### etl
|
|
207
|
+
- **etl:** cover prometheus flush on runner shutdown
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
## 🛠 Chores
|
|
211
|
+
### deps
|
|
212
|
+
- **deps:** bump click to 8.3.3
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
1
217
|
# 🚀 Release 0.5.0 ([#20](https://github.com/the-reacher-data/loom-py/pull/20)) ([`70f7cf8`](https://github.com/the-reacher-data/loom-py/commit/70f7cf85275fcc1f590e06f980dfac91cad50893))
|
|
2
218
|
|
|
3
219
|
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# 🚀 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
|
+
|
|
3
|
+
|
|
4
|
+
## ✨ Features
|
|
5
|
+
### config
|
|
6
|
+
- **config:** add StructBinder and migrate streaming binding resolution<br>
|
|
7
|
+
> Introduces StructBinder in core/config/binder.py — a Strategy that
|
|
8
|
+
> injects constructor arguments from a config mapping via msgspec.convert,
|
|
9
|
+
> covering primitives, Literal constraints, and LoomFrozenStruct subclasses.
|
|
10
|
+
> Migrates streaming _instantiate_binding to use it, removing ~30 lines of
|
|
11
|
+
> private helpers and adding typed ConfigError on resolution failures.
|
|
12
|
+
|
|
13
|
+
- **config:** add ConfigContext for typed section extraction and binding resolution<br>
|
|
14
|
+
> Single entry-point for runner and bootstrap code to read config:
|
|
15
|
+
> section() extracts typed sub-trees, bind() injects constructor args
|
|
16
|
+
> from a config path + overrides, resolve() materializes ConfigBinding
|
|
17
|
+
> declarations. Accepts an optional StructBinder for strict-mode control.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## 🐛 Fixes
|
|
22
|
+
### core
|
|
23
|
+
- **core:** clean async bridge timeout and celery typing
|
|
24
|
+
|
|
25
|
+
### etl
|
|
26
|
+
- **etl:** align missing storage error with config contract
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
## ♻️ Refactor
|
|
32
|
+
### model
|
|
33
|
+
- **model:** migrate public config structs to LoomFrozenStruct
|
|
34
|
+
|
|
35
|
+
### streaming
|
|
36
|
+
- **streaming:** clean up _instantiate_binding before extraction<br>
|
|
37
|
+
> Replace mutable dict() + .update() with a single dict unpacking
|
|
38
|
+
> Remove the dead param.annotation fallback (get_type_hints already
|
|
39
|
+
> resolves all forward refs; the fallback silently passed strings to
|
|
40
|
+
> _is_struct_annotation which always returned False)
|
|
41
|
+
> Extract _SKIP_KINDS constant to name the variadic-parameter guard
|
|
42
|
+
> Raise ConfigError instead of TypeError for missing required struct
|
|
43
|
+
> params (semantically a config error, not a type error; both are
|
|
44
|
+
> caught by the enclosing _resolve_binding handler so no behaviour
|
|
45
|
+
> change in streaming)
|
|
46
|
+
> All 7 binding tests pass.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### core
|
|
50
|
+
- **core:** homogenize config and runner boundaries
|
|
51
|
+
- **core:** add runner and compiler protocols
|
|
52
|
+
- **core:** apply runner lifecycle protocols
|
|
53
|
+
- **core:** harden runner lifecycle abstraction<br>
|
|
54
|
+
> shutdown_runner/flush_runner now catch and log exceptions instead of
|
|
55
|
+
> propagating, preserving the original exception when called from finally
|
|
56
|
+
> blocks; contract updated in docstrings and covered by new tests
|
|
57
|
+
> CompilerProtocol drops @runtime_checkable — no production isinstance
|
|
58
|
+
> usage existed; Protocol remains valid for static typing
|
|
59
|
+
> StreamingRunner.prepare_run() calls shutdown_runner(self) before
|
|
60
|
+
> overwriting self._shutdown, preventing resource leaks on double calls
|
|
61
|
+
> _build_backend_options extracted from loom.celery.config into
|
|
62
|
+
> loom.core.async_bridge.build_backend_options, eliminating duplication
|
|
63
|
+
> between the Celery and streaming domains
|
|
64
|
+
> _CeleryAsyncRuntime._signals_connected ClassVar removed; the
|
|
65
|
+
> module-level _SIGNALS_CONNECTED flag is the single source of truth
|
|
66
|
+
> for the process-level signal guard
|
|
67
|
+
> ETLRunner.flush() delegates to ETLExecutor.flush(), which checks
|
|
68
|
+
> SupportsFlush via isinstance instead of getattr duck-typing
|
|
69
|
+
> TypeVars in compiler.py renamed to _RequestT/_PlanT to signal they
|
|
70
|
+
> are implementation details of the Protocol, not public API
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
### etl
|
|
74
|
+
- **etl:** make flush an optional runner capability
|
|
75
|
+
|
|
76
|
+
### celery
|
|
77
|
+
- **celery:** adopt runner shutdown helper
|
|
78
|
+
- **celery:** replace _SIGNALS_CONNECTED sentinel with dispatch_uid<br>
|
|
79
|
+
> Eliminates the module-level mutable boolean that violated the no-global-
|
|
80
|
+
> mutable-state architecture rule. Idempotency is now handled by Celery's
|
|
81
|
+
> dispatch_uid mechanism: disconnect+connect on each call ensures the most-
|
|
82
|
+
> recently registered closure is always active, so a second bootstrap_worker
|
|
83
|
+
> call wires up fresh dependencies rather than leaving stale closures from
|
|
84
|
+
> the first call.
|
|
85
|
+
> This is strictly better than the sentinel: no global state, no race
|
|
86
|
+
> condition between threads calling bootstrap_worker concurrently, and
|
|
87
|
+
> correct closure replacement when called multiple times in tests.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
### rest
|
|
91
|
+
- **rest:** use observability config directly
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: loom-kernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: Loom Python project
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -396,8 +396,13 @@ app:
|
|
|
396
396
|
database:
|
|
397
397
|
url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
|
|
398
398
|
|
|
399
|
-
|
|
400
|
-
|
|
399
|
+
observability:
|
|
400
|
+
log:
|
|
401
|
+
enabled: false
|
|
402
|
+
otel:
|
|
403
|
+
enabled: false
|
|
404
|
+
prometheus:
|
|
405
|
+
enabled: false
|
|
401
406
|
```
|
|
402
407
|
|
|
403
408
|
```python
|
|
@@ -329,8 +329,13 @@ app:
|
|
|
329
329
|
database:
|
|
330
330
|
url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
|
|
331
331
|
|
|
332
|
-
|
|
333
|
-
|
|
332
|
+
observability:
|
|
333
|
+
log:
|
|
334
|
+
enabled: false
|
|
335
|
+
otel:
|
|
336
|
+
enabled: false
|
|
337
|
+
prometheus:
|
|
338
|
+
enabled: false
|
|
334
339
|
```
|
|
335
340
|
|
|
336
341
|
```python
|
|
@@ -69,7 +69,7 @@ def _skip_duplicate_reexports(
|
|
|
69
69
|
("loom.core.errors", "RuleViolations"),
|
|
70
70
|
("loom.core.use_case", "RuleViolation"),
|
|
71
71
|
("loom.core.use_case", "RuleViolations"),
|
|
72
|
-
("loom.etl.
|
|
72
|
+
("loom.etl.lineage", "ETLObservabilityConfig"),
|
|
73
73
|
("loom.testing", "CompilationError"),
|
|
74
74
|
("loom.rest.model", "PaginationMode"),
|
|
75
75
|
}
|
|
@@ -165,9 +165,15 @@ storage:
|
|
|
165
165
|
tmp_root: /var/lib/loom/lake/_tmp
|
|
166
166
|
|
|
167
167
|
observability:
|
|
168
|
-
log:
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
log:
|
|
169
|
+
enabled: true
|
|
170
|
+
otel:
|
|
171
|
+
enabled: false
|
|
172
|
+
prometheus:
|
|
173
|
+
enabled: true
|
|
174
|
+
pushgateway_url: ${oc.env:PUSHGATEWAY_URL,http://127.0.0.1:9091}
|
|
175
|
+
lineage:
|
|
176
|
+
enabled: true
|
|
171
177
|
# Choose exactly one destination:
|
|
172
178
|
root: /var/lib/loom/lake/_runs
|
|
173
179
|
# database: ops
|
|
@@ -42,7 +42,8 @@ def test_double_amount(loom_polars_runner):
|
|
|
42
42
|
result.assert_count(2)
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
Pytest fixtures
|
|
45
|
+
Pytest fixtures: `loom_polars_runner`. Import `loom.etl.testing.spark` or
|
|
46
|
+
register it explicitly in Spark-enabled suites to use `loom_spark_runner`.
|
|
46
47
|
|
|
47
48
|
## Spark integration tests
|
|
48
49
|
|
|
@@ -578,12 +578,15 @@ app:
|
|
|
578
578
|
database:
|
|
579
579
|
url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///./store.db}
|
|
580
580
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
581
|
+
observability:
|
|
582
|
+
log:
|
|
583
|
+
enabled: true
|
|
584
|
+
otel:
|
|
585
|
+
enabled: false
|
|
586
|
+
prometheus:
|
|
587
|
+
enabled: ${oc.decode:${oc.env:METRICS_ENABLED,true}}
|
|
588
|
+
config:
|
|
589
|
+
path: /metrics
|
|
587
590
|
```
|
|
588
591
|
|
|
589
592
|
### Manifest mode (explicit registry)
|
|
@@ -90,9 +90,15 @@ storage:
|
|
|
90
90
|
tmp_root: /var/lib/loom/lake/_tmp
|
|
91
91
|
|
|
92
92
|
observability:
|
|
93
|
-
log:
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
log:
|
|
94
|
+
enabled: true
|
|
95
|
+
otel:
|
|
96
|
+
enabled: false
|
|
97
|
+
prometheus:
|
|
98
|
+
enabled: true
|
|
99
|
+
pushgateway_url: ${oc.env:PUSHGATEWAY_URL,http://127.0.0.1:9091}
|
|
100
|
+
lineage:
|
|
101
|
+
enabled: true
|
|
96
102
|
root: /var/lib/loom/lake/_runs
|
|
97
103
|
```
|
|
98
104
|
|
|
@@ -58,6 +58,12 @@ app:
|
|
|
58
58
|
|
|
59
59
|
database:
|
|
60
60
|
url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
|
|
61
|
+
|
|
62
|
+
observability:
|
|
63
|
+
log:
|
|
64
|
+
enabled: false
|
|
65
|
+
otel:
|
|
66
|
+
enabled: false
|
|
61
67
|
```
|
|
62
68
|
|
|
63
69
|
```python
|
|
@@ -330,12 +336,15 @@ app:
|
|
|
330
336
|
database:
|
|
331
337
|
url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
|
|
332
338
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
+
observability:
|
|
340
|
+
log:
|
|
341
|
+
enabled: true
|
|
342
|
+
otel:
|
|
343
|
+
enabled: false
|
|
344
|
+
prometheus:
|
|
345
|
+
enabled: true
|
|
346
|
+
config:
|
|
347
|
+
path: /metrics
|
|
339
348
|
```
|
|
340
349
|
|
|
341
350
|
```python
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
steps, batching, branching, and transport wiring.
|
|
5
5
|
|
|
6
6
|
The companion demo repository for this subsystem is
|
|
7
|
-
|
|
7
|
+
[dummy-loom-streaming](https://github.com/the-reacher-data/dummy-loom-streaming).
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
@@ -94,4 +94,4 @@ Use `loom.streaming.nodes`, `loom.streaming.kafka`, and
|
|
|
94
94
|
surface.
|
|
95
95
|
|
|
96
96
|
For a runnable end-to-end example, see the companion repository:
|
|
97
|
-
|
|
97
|
+
[dummy-loom-streaming](https://github.com/the-reacher-data/dummy-loom-streaming).
|
|
@@ -282,6 +282,12 @@ celery:
|
|
|
282
282
|
|
|
283
283
|
# For integration tests: run tasks synchronously in the calling process.
|
|
284
284
|
task_always_eager: false
|
|
285
|
+
|
|
286
|
+
# Async bridge settings used by async jobs/callbacks.
|
|
287
|
+
runtime:
|
|
288
|
+
backend: asyncio # asyncio or trio
|
|
289
|
+
use_uvloop: true # only applies to asyncio on supported platforms
|
|
290
|
+
shutdown_timeout_ms: 10000
|
|
285
291
|
```
|
|
286
292
|
|
|
287
293
|
(per-job-overrides-from-yaml)=
|
|
@@ -497,6 +503,9 @@ celery:
|
|
|
497
503
|
broker_url: "redis://localhost:6379/15"
|
|
498
504
|
result_backend: "redis://localhost:6379/15"
|
|
499
505
|
task_always_eager: true
|
|
506
|
+
runtime:
|
|
507
|
+
backend: asyncio
|
|
508
|
+
use_uvloop: false
|
|
500
509
|
```
|
|
501
510
|
|
|
502
511
|
Or patch it in a pytest fixture:
|
|
@@ -165,9 +165,15 @@ storage:
|
|
|
165
165
|
tmp_root: /var/lib/loom/lake/_tmp
|
|
166
166
|
|
|
167
167
|
observability:
|
|
168
|
-
log:
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
log:
|
|
169
|
+
enabled: true
|
|
170
|
+
otel:
|
|
171
|
+
enabled: false
|
|
172
|
+
prometheus:
|
|
173
|
+
enabled: true
|
|
174
|
+
pushgateway_url: ${oc.env:PUSHGATEWAY_URL,http://127.0.0.1:9091}
|
|
175
|
+
lineage:
|
|
176
|
+
enabled: true
|
|
171
177
|
# Choose exactly one destination:
|
|
172
178
|
root: /var/lib/loom/lake/_runs
|
|
173
179
|
# database: ops
|
|
@@ -19,7 +19,7 @@ design rules:
|
|
|
19
19
|
- prefer explicit contracts over reflection-heavy magic
|
|
20
20
|
|
|
21
21
|
The companion demo repository for the streaming subsystem is
|
|
22
|
-
|
|
22
|
+
[dummy-loom-streaming](https://github.com/the-reacher-data/dummy-loom-streaming).
|
|
23
23
|
|
|
24
24
|
## At a glance
|
|
25
25
|
|
|
@@ -282,6 +282,12 @@ celery:
|
|
|
282
282
|
|
|
283
283
|
# For integration tests: run tasks synchronously in the calling process.
|
|
284
284
|
task_always_eager: false
|
|
285
|
+
|
|
286
|
+
# Async bridge settings used by async jobs/callbacks.
|
|
287
|
+
runtime:
|
|
288
|
+
backend: asyncio # asyncio or trio
|
|
289
|
+
use_uvloop: true # only applies to asyncio on supported platforms
|
|
290
|
+
shutdown_timeout_ms: 10000
|
|
285
291
|
```
|
|
286
292
|
|
|
287
293
|
(rest-per-job-overrides-from-yaml)=
|
|
@@ -497,6 +503,9 @@ celery:
|
|
|
497
503
|
broker_url: "redis://localhost:6379/15"
|
|
498
504
|
result_backend: "redis://localhost:6379/15"
|
|
499
505
|
task_always_eager: true
|
|
506
|
+
runtime:
|
|
507
|
+
backend: asyncio
|
|
508
|
+
use_uvloop: false
|
|
500
509
|
```
|
|
501
510
|
|
|
502
511
|
Or patch it in a pytest fixture:
|
|
@@ -578,12 +578,15 @@ app:
|
|
|
578
578
|
database:
|
|
579
579
|
url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///./store.db}
|
|
580
580
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
581
|
+
observability:
|
|
582
|
+
log:
|
|
583
|
+
enabled: false
|
|
584
|
+
otel:
|
|
585
|
+
enabled: false
|
|
586
|
+
prometheus:
|
|
587
|
+
enabled: ${oc.decode:${oc.env:METRICS_ENABLED,true}}
|
|
588
|
+
config:
|
|
589
|
+
path: /metrics
|
|
587
590
|
```
|
|
588
591
|
|
|
589
592
|
### Manifest mode (explicit registry)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
`StreamFlow` into a real Bytewax dataflow.
|
|
5
5
|
|
|
6
6
|
For a runnable end-to-end reference implementation, see:
|
|
7
|
-
|
|
7
|
+
[dummy-loom-streaming](https://github.com/the-reacher-data/dummy-loom-streaming).
|
|
8
8
|
|
|
9
9
|
## What it does
|
|
10
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "loom-kernel"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.7.0"
|
|
4
4
|
description = "Loom Python project"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -79,9 +79,6 @@ celery = [
|
|
|
79
79
|
"redis>=5.0,<6.0",
|
|
80
80
|
]
|
|
81
81
|
|
|
82
|
-
[project.entry-points.pytest11]
|
|
83
|
-
loom-spark = "loom.etl.testing.spark"
|
|
84
|
-
|
|
85
82
|
[project.entry-points."loom.etl.backends"]
|
|
86
83
|
polars = "loom.etl.backends.polars.provider:PolarsProvider"
|
|
87
84
|
spark = "loom.etl.backends.spark.provider:SparkProvider"
|
|
@@ -223,7 +220,7 @@ markers = [
|
|
|
223
220
|
|
|
224
221
|
[tool.commitizen]
|
|
225
222
|
name = "cz_conventional_commits"
|
|
226
|
-
version = "0.
|
|
223
|
+
version = "0.7.0"
|
|
227
224
|
tag_format = "v$version"
|
|
228
225
|
version_files = [
|
|
229
226
|
"pyproject.toml:project.version",
|