mostlyright-data 0.17.0__tar.gz → 0.17.1__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.
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/PKG-INFO +1 -1
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/pyproject.toml +1 -1
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/http.py +300 -32
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/compact_worker.py +127 -24
- mostlyright_data-0.17.1/src/mostlyright/data_harness/fetch_egress_smoke.py +107 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/formats.py +40 -1
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler.py +4 -2
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler_fetch.py +165 -6
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_run_worker.py +107 -12
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/inprocess_acquisition.py +143 -28
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_series.py +15 -8
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_subscription_feed.py +12 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_subscription_sealer.py +58 -14
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_subscription_worker.py +141 -38
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/studio_subscription_control.py +119 -2
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/table_parts.py +44 -9
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/activity.py +5 -3
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/stream_venue.py +10 -1
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/remediation.py +2 -1
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/.gitignore +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/README.md +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/skills/mr-data-build/SKILL.md +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/sandbox_bootstrap.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/bounded_scratch_sink.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/declared_checks.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_checks.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_classifier.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_persist.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_recompute.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/delta_rows.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_ingestion_worker.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/hosted_worker.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/incremental_slice_executor.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/incremental_worker.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/pipeline.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/plan_graph.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/himawari-hsd-b13-complete.zip +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/run_execution_v4.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/run_phase_timing.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_bootstrap.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_bundle_writer.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_history_candidate_child.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_history_transform_child.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_inventory.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_partition.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_raw_inventory.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/source_state_index.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/registry.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_order_vector.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_recovery_objects.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_segment_spill.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/studio_boundary.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/table_manifest.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/table_profile.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/router.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/ux/render.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_closed_source.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_recipe.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/v4_window.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mostlyright-data
|
|
3
|
-
Version: 0.17.
|
|
3
|
+
Version: 0.17.1
|
|
4
4
|
Summary: Mostly Right CLI for reproducible, reviewed Parquet datasets
|
|
5
5
|
Project-URL: Homepage, https://mostlyright.md/
|
|
6
6
|
Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
|
{mostlyright_data-0.17.0 → mostlyright_data-0.17.1}/src/mostlyright/data_harness/acquisition/http.py
RENAMED
|
@@ -6,6 +6,7 @@ import contextlib
|
|
|
6
6
|
import errno
|
|
7
7
|
import hashlib
|
|
8
8
|
import http.client
|
|
9
|
+
import ipaddress
|
|
9
10
|
import json
|
|
10
11
|
import math
|
|
11
12
|
import os
|
|
@@ -1127,6 +1128,10 @@ class TransportResponse:
|
|
|
1127
1128
|
connected_peer: str
|
|
1128
1129
|
tls_verified: bool
|
|
1129
1130
|
hostname_verified: bool
|
|
1131
|
+
proxy_endpoint_id: str | None = None
|
|
1132
|
+
proxy_config_digest: str | None = None
|
|
1133
|
+
gateway_peer: str | None = None
|
|
1134
|
+
tunnel_target: str | None = None
|
|
1130
1135
|
|
|
1131
1136
|
def header(self, name: str) -> str | None:
|
|
1132
1137
|
wanted = name.lower()
|
|
@@ -1171,6 +1176,10 @@ class StreamedTransportResponse:
|
|
|
1171
1176
|
connected_peer: str
|
|
1172
1177
|
tls_verified: bool
|
|
1173
1178
|
hostname_verified: bool
|
|
1179
|
+
proxy_endpoint_id: str | None = None
|
|
1180
|
+
proxy_config_digest: str | None = None
|
|
1181
|
+
gateway_peer: str | None = None
|
|
1182
|
+
tunnel_target: str | None = None
|
|
1174
1183
|
|
|
1175
1184
|
def header(self, name: str) -> str | None:
|
|
1176
1185
|
return TransportResponse(
|
|
@@ -1183,6 +1192,85 @@ class StreamedTransportResponse:
|
|
|
1183
1192
|
).header(name)
|
|
1184
1193
|
|
|
1185
1194
|
|
|
1195
|
+
@dataclass(frozen=True)
|
|
1196
|
+
class ConnectProxyMember:
|
|
1197
|
+
"""One trusted internal CONNECT gateway selected for a public acquisition."""
|
|
1198
|
+
|
|
1199
|
+
endpoint_id: str
|
|
1200
|
+
host: str
|
|
1201
|
+
port: int
|
|
1202
|
+
|
|
1203
|
+
def __post_init__(self) -> None:
|
|
1204
|
+
if (
|
|
1205
|
+
not isinstance(self.endpoint_id, str)
|
|
1206
|
+
or re.fullmatch(r"[a-z][a-z0-9-]{0,63}", self.endpoint_id) is None
|
|
1207
|
+
):
|
|
1208
|
+
raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy endpoint id is invalid")
|
|
1209
|
+
if not isinstance(self.host, str):
|
|
1210
|
+
raise AcquisitionSecurityError(
|
|
1211
|
+
"CONNECT_PROXY_CONFIG", "proxy host must be an IP literal"
|
|
1212
|
+
)
|
|
1213
|
+
try:
|
|
1214
|
+
address = ipaddress.ip_address(self.host)
|
|
1215
|
+
except ValueError:
|
|
1216
|
+
raise AcquisitionSecurityError(
|
|
1217
|
+
"CONNECT_PROXY_CONFIG", "proxy host must be an IP literal"
|
|
1218
|
+
) from None
|
|
1219
|
+
private_networks = (
|
|
1220
|
+
ipaddress.ip_network("10.0.0.0/8"),
|
|
1221
|
+
ipaddress.ip_network("172.16.0.0/12"),
|
|
1222
|
+
ipaddress.ip_network("192.168.0.0/16"),
|
|
1223
|
+
)
|
|
1224
|
+
if address.version != 4 or not any(address in network for network in private_networks):
|
|
1225
|
+
raise AcquisitionSecurityError(
|
|
1226
|
+
"CONNECT_PROXY_CONFIG", "proxy host must be a private IPv4 address"
|
|
1227
|
+
)
|
|
1228
|
+
if type(self.port) is not int or self.port != 3128:
|
|
1229
|
+
raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy port must be 3128")
|
|
1230
|
+
|
|
1231
|
+
|
|
1232
|
+
@dataclass(frozen=True)
|
|
1233
|
+
class ConnectProxyPool:
|
|
1234
|
+
"""Closed, trusted runtime configuration for the V4 public-fetch gateway pool."""
|
|
1235
|
+
|
|
1236
|
+
pool_id: str
|
|
1237
|
+
members: tuple[ConnectProxyMember, ...]
|
|
1238
|
+
config_digest: str
|
|
1239
|
+
|
|
1240
|
+
@classmethod
|
|
1241
|
+
def from_mapping(cls, value: Mapping[str, object]) -> ConnectProxyPool:
|
|
1242
|
+
expected = {"schema_version", "pool_id", "members", "selection"}
|
|
1243
|
+
if (
|
|
1244
|
+
set(value) != expected
|
|
1245
|
+
or value.get("schema_version") != "mostlyright-fetch-egress-pool.v1"
|
|
1246
|
+
):
|
|
1247
|
+
raise AcquisitionSecurityError(
|
|
1248
|
+
"CONNECT_PROXY_CONFIG", "proxy pool configuration is invalid"
|
|
1249
|
+
)
|
|
1250
|
+
if (
|
|
1251
|
+
value.get("pool_id") != "fetch-egress-v1"
|
|
1252
|
+
or value.get("selection") != "per-attempt-sticky"
|
|
1253
|
+
):
|
|
1254
|
+
raise AcquisitionSecurityError(
|
|
1255
|
+
"CONNECT_PROXY_CONFIG", "proxy pool identity or selection is invalid"
|
|
1256
|
+
)
|
|
1257
|
+
raw_members = value.get("members")
|
|
1258
|
+
if not isinstance(raw_members, list) or not 1 <= len(raw_members) <= 16:
|
|
1259
|
+
raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy pool members are invalid")
|
|
1260
|
+
members: list[ConnectProxyMember] = []
|
|
1261
|
+
for raw in raw_members:
|
|
1262
|
+
if not isinstance(raw, dict) or set(raw) != {"id", "host", "port"}:
|
|
1263
|
+
raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy member is invalid")
|
|
1264
|
+
members.append(ConnectProxyMember(raw["id"], raw["host"], raw["port"]))
|
|
1265
|
+
if len({member.endpoint_id for member in members}) != len(members):
|
|
1266
|
+
raise AcquisitionSecurityError(
|
|
1267
|
+
"CONNECT_PROXY_CONFIG", "proxy member ids must be unique"
|
|
1268
|
+
)
|
|
1269
|
+
if len({(member.host, member.port) for member in members}) != len(members):
|
|
1270
|
+
raise AcquisitionSecurityError("CONNECT_PROXY_CONFIG", "proxy endpoints must be unique")
|
|
1271
|
+
return cls("fetch-egress-v1", tuple(members), canonical_sha256(dict(value)))
|
|
1272
|
+
|
|
1273
|
+
|
|
1186
1274
|
class PinnedTransport(Protocol):
|
|
1187
1275
|
def request(
|
|
1188
1276
|
self,
|
|
@@ -1191,6 +1279,8 @@ class PinnedTransport(Protocol):
|
|
|
1191
1279
|
approved_ip: str,
|
|
1192
1280
|
headers: Mapping[str, str],
|
|
1193
1281
|
limits: RetrievalLimits,
|
|
1282
|
+
connect_proxy: ConnectProxyMember | None = None,
|
|
1283
|
+
connect_proxy_config_digest: str | None = None,
|
|
1194
1284
|
byte_range: ByteRange | None = None,
|
|
1195
1285
|
method: str = "GET",
|
|
1196
1286
|
body: bytes | None = None,
|
|
@@ -1348,12 +1438,16 @@ class RetrievalHop:
|
|
|
1348
1438
|
# set to rederive ``resolution_digest`` without either repeating the request or receiving the
|
|
1349
1439
|
# credential, so the pinned retriever retains it alongside (but not inside) ``to_dict``.
|
|
1350
1440
|
approved_ips: tuple[str, ...] = ()
|
|
1441
|
+
proxy_endpoint_id: str | None = None
|
|
1442
|
+
proxy_config_digest: str | None = None
|
|
1443
|
+
gateway_peer: str | None = None
|
|
1444
|
+
tunnel_target: str | None = None
|
|
1351
1445
|
|
|
1352
1446
|
def to_dict(self) -> dict[str, object]:
|
|
1353
1447
|
# Both range keys are always present, ``None`` when the hop ordered no slice, so a hop
|
|
1354
1448
|
# has exactly one shape rather than two and the digest below covers the same fields on
|
|
1355
1449
|
# every acquisition.
|
|
1356
|
-
|
|
1450
|
+
result: dict[str, object] = {
|
|
1357
1451
|
"url": self.url,
|
|
1358
1452
|
"resolution_digest": self.resolution_digest,
|
|
1359
1453
|
"connected_peer": self.connected_peer,
|
|
@@ -1367,6 +1461,14 @@ class RetrievalHop:
|
|
|
1367
1461
|
"last_modified": self.last_modified,
|
|
1368
1462
|
"peer_attempts": [attempt.to_dict() for attempt in self.peer_attempts],
|
|
1369
1463
|
}
|
|
1464
|
+
if self.proxy_endpoint_id is not None:
|
|
1465
|
+
result["connect_proxy"] = {
|
|
1466
|
+
"endpoint_id": self.proxy_endpoint_id,
|
|
1467
|
+
"config_digest": self.proxy_config_digest,
|
|
1468
|
+
"gateway_peer": self.gateway_peer,
|
|
1469
|
+
"tunnel_target": self.tunnel_target,
|
|
1470
|
+
}
|
|
1471
|
+
return result
|
|
1370
1472
|
|
|
1371
1473
|
def authenticated_attestation_dict(self) -> dict[str, object]:
|
|
1372
1474
|
"""Return the complete secret-free facts proved by the pinned HTTPS boundary."""
|
|
@@ -1689,6 +1791,8 @@ class PinnedHttpsRetriever:
|
|
|
1689
1791
|
egress_policy: EgressPolicy,
|
|
1690
1792
|
transport: PinnedTransport,
|
|
1691
1793
|
limits: RetrievalLimits,
|
|
1794
|
+
connect_proxy: ConnectProxyMember | None = None,
|
|
1795
|
+
connect_proxy_config_digest: str | None = None,
|
|
1692
1796
|
limiter: AcquisitionLimiter | None = None,
|
|
1693
1797
|
clock: Callable[[], float] = time.monotonic,
|
|
1694
1798
|
sleep: Callable[[float], None] = time.sleep,
|
|
@@ -1707,6 +1811,12 @@ class PinnedHttpsRetriever:
|
|
|
1707
1811
|
self._egress_policy = egress_policy
|
|
1708
1812
|
self._transport = transport
|
|
1709
1813
|
self._limits = limits
|
|
1814
|
+
if (connect_proxy is None) != (connect_proxy_config_digest is None):
|
|
1815
|
+
raise AcquisitionSecurityError(
|
|
1816
|
+
"CONNECT_PROXY_CONFIG", "proxy member and digest must be paired"
|
|
1817
|
+
)
|
|
1818
|
+
self._connect_proxy = connect_proxy
|
|
1819
|
+
self._connect_proxy_config_digest = connect_proxy_config_digest
|
|
1710
1820
|
self._limiter = limiter or AcquisitionLimiter(
|
|
1711
1821
|
max_concurrency=limits.max_concurrency,
|
|
1712
1822
|
min_interval_seconds=limits.min_interval_seconds,
|
|
@@ -1794,6 +1904,8 @@ class PinnedHttpsRetriever:
|
|
|
1794
1904
|
egress_policy=self._egress_policy,
|
|
1795
1905
|
transport=self._transport,
|
|
1796
1906
|
limits=effective,
|
|
1907
|
+
connect_proxy=self._connect_proxy,
|
|
1908
|
+
connect_proxy_config_digest=self._connect_proxy_config_digest,
|
|
1797
1909
|
limiter=self._limiter,
|
|
1798
1910
|
clock=self._clock,
|
|
1799
1911
|
)
|
|
@@ -1877,7 +1989,8 @@ class PinnedHttpsRetriever:
|
|
|
1877
1989
|
}
|
|
1878
1990
|
response: StreamedTransportResponse | None = None
|
|
1879
1991
|
attempts: list[PeerAttempt] = []
|
|
1880
|
-
|
|
1992
|
+
peer_candidates = self._peer_candidates(target)
|
|
1993
|
+
for ip in peer_candidates:
|
|
1881
1994
|
if requests >= self._limits.max_requests:
|
|
1882
1995
|
raise PeerAttemptError(
|
|
1883
1996
|
"REQUEST_LIMIT",
|
|
@@ -1917,7 +2030,7 @@ class PinnedHttpsRetriever:
|
|
|
1917
2030
|
)
|
|
1918
2031
|
if (
|
|
1919
2032
|
exc.code == "TRANSPORT_FAILURE"
|
|
1920
|
-
and ip !=
|
|
2033
|
+
and ip != peer_candidates[-1]
|
|
1921
2034
|
and aggregate < self._limits.max_aggregate_response_bytes
|
|
1922
2035
|
):
|
|
1923
2036
|
# A failed peer may already have copied an unauthenticated prefix to
|
|
@@ -1966,7 +2079,7 @@ class PinnedHttpsRetriever:
|
|
|
1966
2079
|
tuple(attempts),
|
|
1967
2080
|
hops=tuple(hops),
|
|
1968
2081
|
)
|
|
1969
|
-
peer =
|
|
2082
|
+
peer = self._require_response_peer(target, response, ip)
|
|
1970
2083
|
normalized = _validate_response_headers(response.headers)
|
|
1971
2084
|
content_length = response.header("content-length")
|
|
1972
2085
|
if content_length is not None and (
|
|
@@ -1999,6 +2112,10 @@ class PinnedHttpsRetriever:
|
|
|
1999
2112
|
last_modified=response.header("last-modified"),
|
|
2000
2113
|
peer_attempts=tuple(attempts),
|
|
2001
2114
|
approved_ips=target.approved_ips,
|
|
2115
|
+
proxy_endpoint_id=response.proxy_endpoint_id,
|
|
2116
|
+
proxy_config_digest=response.proxy_config_digest,
|
|
2117
|
+
gateway_peer=response.gateway_peer,
|
|
2118
|
+
tunnel_target=response.tunnel_target,
|
|
2002
2119
|
)
|
|
2003
2120
|
hops.append(hop)
|
|
2004
2121
|
if response.status in REDIRECT_STATUSES:
|
|
@@ -2264,7 +2381,8 @@ class PinnedHttpsRetriever:
|
|
|
2264
2381
|
headers[name] = value
|
|
2265
2382
|
peer_attempts: list[PeerAttempt] = []
|
|
2266
2383
|
response: TransportResponse | None = None
|
|
2267
|
-
|
|
2384
|
+
peer_candidates = self._peer_candidates(target)
|
|
2385
|
+
for approved_ip in peer_candidates:
|
|
2268
2386
|
if requests >= self._limits.max_requests:
|
|
2269
2387
|
raise PeerAttemptError(
|
|
2270
2388
|
"REQUEST_LIMIT",
|
|
@@ -2381,7 +2499,7 @@ class PinnedHttpsRetriever:
|
|
|
2381
2499
|
if (
|
|
2382
2500
|
failure_code == "TRANSPORT_FAILURE"
|
|
2383
2501
|
and not aggregate_exhausted
|
|
2384
|
-
and approved_ip !=
|
|
2502
|
+
and approved_ip != peer_candidates[-1]
|
|
2385
2503
|
):
|
|
2386
2504
|
continue
|
|
2387
2505
|
if failure_code == "TRANSPORT_FAILURE" and aggregate_exhausted:
|
|
@@ -2451,7 +2569,7 @@ class PinnedHttpsRetriever:
|
|
|
2451
2569
|
hops,
|
|
2452
2570
|
)
|
|
2453
2571
|
try:
|
|
2454
|
-
peer =
|
|
2572
|
+
peer = self._require_response_peer(target, response, approved_ip)
|
|
2455
2573
|
normalized_headers = _validate_response_headers(response.headers)
|
|
2456
2574
|
except AcquisitionSecurityError as exc:
|
|
2457
2575
|
self._raise_peer_failure(exc.code, exc.detail, peer_attempts, hops)
|
|
@@ -2543,6 +2661,10 @@ class PinnedHttpsRetriever:
|
|
|
2543
2661
|
),
|
|
2544
2662
|
peer_attempts=tuple(peer_attempts),
|
|
2545
2663
|
approved_ips=target.approved_ips,
|
|
2664
|
+
proxy_endpoint_id=response.proxy_endpoint_id,
|
|
2665
|
+
proxy_config_digest=response.proxy_config_digest,
|
|
2666
|
+
gateway_peer=response.gateway_peer,
|
|
2667
|
+
tunnel_target=response.tunnel_target,
|
|
2546
2668
|
)
|
|
2547
2669
|
)
|
|
2548
2670
|
raise NotModified(
|
|
@@ -2609,6 +2731,10 @@ class PinnedHttpsRetriever:
|
|
|
2609
2731
|
last_modified=self._response_header(response, "last-modified", peer_attempts, hops),
|
|
2610
2732
|
peer_attempts=tuple(peer_attempts),
|
|
2611
2733
|
approved_ips=target.approved_ips,
|
|
2734
|
+
proxy_endpoint_id=response.proxy_endpoint_id,
|
|
2735
|
+
proxy_config_digest=response.proxy_config_digest,
|
|
2736
|
+
gateway_peer=response.gateway_peer,
|
|
2737
|
+
tunnel_target=response.tunnel_target,
|
|
2612
2738
|
)
|
|
2613
2739
|
hops.append(hop)
|
|
2614
2740
|
# The delivery check. A slice is delivered only when the server answered 206,
|
|
@@ -2800,6 +2926,49 @@ class PinnedHttpsRetriever:
|
|
|
2800
2926
|
total_timeout_seconds=remaining,
|
|
2801
2927
|
)
|
|
2802
2928
|
|
|
2929
|
+
def _require_response_peer(
|
|
2930
|
+
self,
|
|
2931
|
+
target: ValidatedTarget,
|
|
2932
|
+
response: TransportResponse | StreamedTransportResponse,
|
|
2933
|
+
approved_ip: str,
|
|
2934
|
+
) -> str:
|
|
2935
|
+
"""Bind direct peers normally and gateway tunnels to the selected trusted member."""
|
|
2936
|
+
|
|
2937
|
+
if self._connect_proxy is None:
|
|
2938
|
+
if response.proxy_endpoint_id is not None:
|
|
2939
|
+
raise AcquisitionSecurityError(
|
|
2940
|
+
"CONNECT_PROXY_EVIDENCE", "direct transport reported proxy evidence"
|
|
2941
|
+
)
|
|
2942
|
+
return require_approved_peer(target, response.connected_peer)
|
|
2943
|
+
member = self._connect_proxy
|
|
2944
|
+
if (
|
|
2945
|
+
response.proxy_endpoint_id != member.endpoint_id
|
|
2946
|
+
or response.proxy_config_digest != self._connect_proxy_config_digest
|
|
2947
|
+
or response.gateway_peer != member.host
|
|
2948
|
+
or response.connected_peer != member.host
|
|
2949
|
+
or response.tunnel_target != approved_ip
|
|
2950
|
+
):
|
|
2951
|
+
raise AcquisitionSecurityError(
|
|
2952
|
+
"CONNECT_PROXY_EVIDENCE",
|
|
2953
|
+
"gateway tunnel evidence does not bind the selected proxy and target",
|
|
2954
|
+
)
|
|
2955
|
+
return member.host
|
|
2956
|
+
|
|
2957
|
+
def _peer_candidates(self, target: ValidatedTarget) -> tuple[str, ...]:
|
|
2958
|
+
"""The pinned peers this concrete transport can actually tunnel to."""
|
|
2959
|
+
|
|
2960
|
+
if self._connect_proxy is None:
|
|
2961
|
+
return target.approved_ips
|
|
2962
|
+
candidates = tuple(
|
|
2963
|
+
address for address in target.approved_ips if ipaddress.ip_address(address).version == 4
|
|
2964
|
+
)
|
|
2965
|
+
if not candidates:
|
|
2966
|
+
raise AcquisitionSecurityError(
|
|
2967
|
+
"CONNECT_PROXY_TARGET_FAMILY",
|
|
2968
|
+
"the selected IPv4 gateway cannot tunnel an IPv6-only target",
|
|
2969
|
+
)
|
|
2970
|
+
return candidates
|
|
2971
|
+
|
|
2803
2972
|
@staticmethod
|
|
2804
2973
|
def _raise_peer_failure(
|
|
2805
2974
|
code: str,
|
|
@@ -2885,10 +3054,60 @@ class _PinnedHTTPSConnection(http.client.HTTPSConnection):
|
|
|
2885
3054
|
raise
|
|
2886
3055
|
|
|
2887
3056
|
|
|
3057
|
+
class _PinnedProxyHTTPSConnection(http.client.HTTPSConnection):
|
|
3058
|
+
"""CONNECT through one private gateway to an exact resolver-approved IPv4 target."""
|
|
3059
|
+
|
|
3060
|
+
def __init__(
|
|
3061
|
+
self,
|
|
3062
|
+
*,
|
|
3063
|
+
hostname: str,
|
|
3064
|
+
approved_ip: str,
|
|
3065
|
+
proxy: ConnectProxyMember,
|
|
3066
|
+
timeout: float,
|
|
3067
|
+
context: ssl.SSLContext,
|
|
3068
|
+
) -> None:
|
|
3069
|
+
super().__init__(host=hostname, port=443, timeout=timeout, context=context)
|
|
3070
|
+
self._approved_ip = approved_ip
|
|
3071
|
+
self._proxy = proxy
|
|
3072
|
+
self.gateway_peer: str | None = None
|
|
3073
|
+
|
|
3074
|
+
def connect(self) -> None:
|
|
3075
|
+
raw_socket = socket.create_connection(
|
|
3076
|
+
(self._proxy.host, self._proxy.port), timeout=self.timeout
|
|
3077
|
+
)
|
|
3078
|
+
try:
|
|
3079
|
+
peer = ipaddress.ip_address(raw_socket.getpeername()[0]).compressed
|
|
3080
|
+
if peer != self._proxy.host:
|
|
3081
|
+
raise AcquisitionSecurityError(
|
|
3082
|
+
"CONNECT_PROXY_PEER", "gateway peer did not match selected proxy"
|
|
3083
|
+
)
|
|
3084
|
+
authority = f"{self._approved_ip}:443"
|
|
3085
|
+
raw_socket.sendall(
|
|
3086
|
+
f"CONNECT {authority} HTTP/1.1\r\nHost: {authority}\r\n\r\n".encode("ascii")
|
|
3087
|
+
)
|
|
3088
|
+
response = http.client.HTTPResponse(raw_socket)
|
|
3089
|
+
response.begin()
|
|
3090
|
+
if response.status != 200:
|
|
3091
|
+
raise AcquisitionSecurityError(
|
|
3092
|
+
"CONNECT_PROXY_STATUS", "gateway refused the pinned tunnel"
|
|
3093
|
+
)
|
|
3094
|
+
self.gateway_peer = peer
|
|
3095
|
+
self.sock = self._context.wrap_socket(raw_socket, server_hostname=self.host)
|
|
3096
|
+
except BaseException:
|
|
3097
|
+
raw_socket.close()
|
|
3098
|
+
raise
|
|
3099
|
+
|
|
3100
|
+
|
|
2888
3101
|
class StdlibPinnedTransport:
|
|
2889
3102
|
"""Production transport with no environment-proxy integration or connection pooling."""
|
|
2890
3103
|
|
|
2891
|
-
def __init__(
|
|
3104
|
+
def __init__(
|
|
3105
|
+
self,
|
|
3106
|
+
*,
|
|
3107
|
+
ssl_context: ssl.SSLContext | None = None,
|
|
3108
|
+
connect_proxy: ConnectProxyMember | None = None,
|
|
3109
|
+
connect_proxy_config_digest: str | None = None,
|
|
3110
|
+
) -> None:
|
|
2892
3111
|
self._context = ssl_context or ssl.create_default_context()
|
|
2893
3112
|
if (
|
|
2894
3113
|
self._context.check_hostname is not True
|
|
@@ -2898,6 +3117,54 @@ class StdlibPinnedTransport:
|
|
|
2898
3117
|
"TLS_CONTEXT",
|
|
2899
3118
|
"TLS context must require certificate and hostname verification",
|
|
2900
3119
|
)
|
|
3120
|
+
if (connect_proxy is None) != (connect_proxy_config_digest is None):
|
|
3121
|
+
raise AcquisitionSecurityError(
|
|
3122
|
+
"CONNECT_PROXY_CONFIG", "proxy member and digest must be paired"
|
|
3123
|
+
)
|
|
3124
|
+
self._connect_proxy = connect_proxy
|
|
3125
|
+
self._connect_proxy_config_digest = connect_proxy_config_digest
|
|
3126
|
+
|
|
3127
|
+
def _connection(
|
|
3128
|
+
self, target: ValidatedTarget, approved_ip: str, timeout: float
|
|
3129
|
+
) -> http.client.HTTPSConnection:
|
|
3130
|
+
if self._connect_proxy is None:
|
|
3131
|
+
return _PinnedHTTPSConnection(
|
|
3132
|
+
hostname=target.hostname,
|
|
3133
|
+
approved_ip=approved_ip,
|
|
3134
|
+
port=target.port,
|
|
3135
|
+
timeout=timeout,
|
|
3136
|
+
context=self._context,
|
|
3137
|
+
)
|
|
3138
|
+
return _PinnedProxyHTTPSConnection(
|
|
3139
|
+
hostname=target.hostname,
|
|
3140
|
+
approved_ip=approved_ip,
|
|
3141
|
+
proxy=self._connect_proxy,
|
|
3142
|
+
timeout=timeout,
|
|
3143
|
+
context=self._context,
|
|
3144
|
+
)
|
|
3145
|
+
|
|
3146
|
+
def _evidence(
|
|
3147
|
+
self, connection: http.client.HTTPSConnection, approved_ip: str
|
|
3148
|
+
) -> tuple[str, str | None, str | None, str | None, str | None]:
|
|
3149
|
+
if self._connect_proxy is None:
|
|
3150
|
+
peer = getattr(connection, "connected_peer", None)
|
|
3151
|
+
if peer is None:
|
|
3152
|
+
raise AcquisitionSecurityError(
|
|
3153
|
+
"PEER_ADDRESS", "transport did not record its connected peer"
|
|
3154
|
+
)
|
|
3155
|
+
return peer, None, None, None, None
|
|
3156
|
+
peer = getattr(connection, "gateway_peer", None)
|
|
3157
|
+
if peer is None:
|
|
3158
|
+
raise AcquisitionSecurityError(
|
|
3159
|
+
"CONNECT_PROXY_PEER", "transport did not record its gateway peer"
|
|
3160
|
+
)
|
|
3161
|
+
return (
|
|
3162
|
+
peer,
|
|
3163
|
+
self._connect_proxy.endpoint_id,
|
|
3164
|
+
self._connect_proxy_config_digest,
|
|
3165
|
+
peer,
|
|
3166
|
+
approved_ip,
|
|
3167
|
+
)
|
|
2901
3168
|
|
|
2902
3169
|
def request(
|
|
2903
3170
|
self,
|
|
@@ -2914,12 +3181,8 @@ class StdlibPinnedTransport:
|
|
|
2914
3181
|
if byte_range is not None:
|
|
2915
3182
|
outgoing["Range"] = byte_range.header_value
|
|
2916
3183
|
attempt_deadline = time.monotonic() + limits.total_timeout_seconds
|
|
2917
|
-
connection =
|
|
2918
|
-
|
|
2919
|
-
approved_ip=approved_ip,
|
|
2920
|
-
port=target.port,
|
|
2921
|
-
timeout=min(limits.connect_timeout_seconds, limits.total_timeout_seconds),
|
|
2922
|
-
context=self._context,
|
|
3184
|
+
connection = self._connection(
|
|
3185
|
+
target, approved_ip, min(limits.connect_timeout_seconds, limits.total_timeout_seconds)
|
|
2923
3186
|
)
|
|
2924
3187
|
total = 0
|
|
2925
3188
|
try:
|
|
@@ -2971,12 +3234,9 @@ class StdlibPinnedTransport:
|
|
|
2971
3234
|
"response exceeded the configured byte limit",
|
|
2972
3235
|
)
|
|
2973
3236
|
chunks.append(chunk)
|
|
2974
|
-
peer =
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
"PEER_ADDRESS",
|
|
2978
|
-
"transport did not record its connected peer",
|
|
2979
|
-
)
|
|
3237
|
+
peer, proxy_id, proxy_digest, gateway_peer, tunnel_target = self._evidence(
|
|
3238
|
+
connection, approved_ip
|
|
3239
|
+
)
|
|
2980
3240
|
return TransportResponse(
|
|
2981
3241
|
status=response.status,
|
|
2982
3242
|
headers=raw_headers,
|
|
@@ -2984,6 +3244,10 @@ class StdlibPinnedTransport:
|
|
|
2984
3244
|
connected_peer=peer,
|
|
2985
3245
|
tls_verified=True,
|
|
2986
3246
|
hostname_verified=True,
|
|
3247
|
+
proxy_endpoint_id=proxy_id,
|
|
3248
|
+
proxy_config_digest=proxy_digest,
|
|
3249
|
+
gateway_peer=gateway_peer,
|
|
3250
|
+
tunnel_target=tunnel_target,
|
|
2987
3251
|
)
|
|
2988
3252
|
except ssl.SSLError as exc:
|
|
2989
3253
|
raise AcquisitionSecurityError(
|
|
@@ -3030,12 +3294,8 @@ class StdlibPinnedTransport:
|
|
|
3030
3294
|
carried by ``TransportFailureError`` for retry accounting.
|
|
3031
3295
|
"""
|
|
3032
3296
|
deadline = time.monotonic() + limits.total_timeout_seconds
|
|
3033
|
-
connection =
|
|
3034
|
-
|
|
3035
|
-
approved_ip=approved_ip,
|
|
3036
|
-
port=target.port,
|
|
3037
|
-
timeout=min(limits.connect_timeout_seconds, limits.total_timeout_seconds),
|
|
3038
|
-
context=self._context,
|
|
3297
|
+
connection = self._connection(
|
|
3298
|
+
target, approved_ip, min(limits.connect_timeout_seconds, limits.total_timeout_seconds)
|
|
3039
3299
|
)
|
|
3040
3300
|
total = 0
|
|
3041
3301
|
digest = hashlib.sha256()
|
|
@@ -3079,13 +3339,21 @@ class StdlibPinnedTransport:
|
|
|
3079
3339
|
)
|
|
3080
3340
|
digest.update(chunk)
|
|
3081
3341
|
sink(chunk)
|
|
3082
|
-
peer =
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
"PEER_ADDRESS", "transport did not record its connected peer"
|
|
3086
|
-
)
|
|
3342
|
+
peer, proxy_id, proxy_digest, gateway_peer, tunnel_target = self._evidence(
|
|
3343
|
+
connection, approved_ip
|
|
3344
|
+
)
|
|
3087
3345
|
return StreamedTransportResponse(
|
|
3088
|
-
response.status,
|
|
3346
|
+
response.status,
|
|
3347
|
+
raw_headers,
|
|
3348
|
+
total,
|
|
3349
|
+
digest.hexdigest(),
|
|
3350
|
+
peer,
|
|
3351
|
+
True,
|
|
3352
|
+
True,
|
|
3353
|
+
proxy_id,
|
|
3354
|
+
proxy_digest,
|
|
3355
|
+
gateway_peer,
|
|
3356
|
+
tunnel_target,
|
|
3089
3357
|
)
|
|
3090
3358
|
except http.client.IncompleteRead as exc:
|
|
3091
3359
|
partial = exc.partial if isinstance(exc.partial, bytes) else bytes(exc.partial)
|