mostlyright-data 0.15.1__tar.gz → 0.15.2__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.15.1 → mostlyright_data-0.15.2}/PKG-INFO +1 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/pyproject.toml +1 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/skills/mr-data-build/SKILL.md +20 -3
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/http.py +360 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/parsing.py +602 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/sandbox.py +908 -65
- mostlyright_data-0.15.2/src/mostlyright/data_harness/bounded_scratch_sink.py +223 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/compact_worker.py +371 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/declared_checks.py +166 -54
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/formats.py +2 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_bootstrap.py +4 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler.py +27 -2
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler_fetch.py +42 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_run_worker.py +3314 -136
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +24 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_worker.py +13 -2
- mostlyright_data-0.15.2/src/mostlyright/data_harness/incremental_slice_executor.py +815 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/incremental_worker.py +524 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/inprocess_acquisition.py +347 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/linux_process_boundary.py +168 -3
- mostlyright_data-0.15.2/src/mostlyright/data_harness/part_check_evidence.py +348 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/pipeline.py +40 -14
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/plan_graph.py +53 -12
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/run_execution_v4.py +807 -18
- mostlyright_data-0.15.2/src/mostlyright/data_harness/source_bootstrap.py +238 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/source_bundle_writer.py +602 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/source_history_candidate_child.py +188 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/source_history_transform_child.py +151 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/source_inventory.py +162 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/source_raw_inventory.py +243 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/source_state_index.py +543 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/_adapter_steps.py +19 -3
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/contracts.py +3 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/registry.py +183 -11
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream.py +13 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_capture_session.py +67 -8
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connector.py +119 -23
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_transport.py +14 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sql_transform_engine.py +523 -15
- mostlyright_data-0.15.2/src/mostlyright/data_harness/stream_order_vector.py +136 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/stream_recovery_objects.py +256 -0
- mostlyright_data-0.15.2/src/mostlyright/data_harness/stream_segment_spill.py +275 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/stream_subscription_feed.py +82 -6
- mostlyright_data-0.15.2/src/mostlyright/data_harness/stream_subscription_sealer.py +1440 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/stream_subscription_worker.py +975 -94
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/stream_venue_staging.py +310 -59
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/studio_boundary.py +2 -2
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/studio_subscription_control.py +331 -9
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/table_manifest.py +203 -10
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/table_parts.py +236 -26
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/recipe.py +81 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4.py +39 -16
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_datasets.py +174 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_runs.py +8 -3
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_tables.py +1 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/remediation.py +16 -1
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/render.py +1 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_acquisition.py +88 -4
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_recipe.py +307 -2
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_window.py +126 -0
- mostlyright_data-0.15.1/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -689
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/.gitignore +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/README.md +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/table_profile.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/router.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_closed_source.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/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.15.
|
|
3
|
+
Version: 0.15.2
|
|
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/
|
|
@@ -516,8 +516,7 @@ the ones above. Spell out the names a reader would search for -- the place, the
|
|
|
516
516
|
every common form, the programme and the publisher -- once each, in the opening sentences and
|
|
517
517
|
never as a keyword list. The opening sentences double as the summary cards and search engines
|
|
518
518
|
show, so they must stand alone. A one-line description is a defect to fix in the revision, not a
|
|
519
|
-
style choice. Give `table.description` the grain and the window
|
|
520
|
-
description a reader can act on.
|
|
519
|
+
style choice. Give `table.description` the grain and the window.
|
|
521
520
|
|
|
522
521
|
**Every dataset gets a cover before its first run is presented.** Once the description is
|
|
523
522
|
written, generate one with
|
|
@@ -545,7 +544,17 @@ years are already in their names.
|
|
|
545
544
|
Leaving it out is a defect in the same way a one-line dataset description is: the source is then
|
|
546
545
|
drawn with its endpoint alone, and a reader is left to guess from a query string.
|
|
547
546
|
|
|
548
|
-
### Say what each column shows
|
|
547
|
+
### Say what each column is, and what it shows
|
|
548
|
+
|
|
549
|
+
**Every column carries a `description`, and every column that measures a physical quantity carries
|
|
550
|
+
a `units` entry.** The description is one sentence saying what the column means, written for
|
|
551
|
+
somebody who has never seen the source — `The highest air temperature recorded that day.` — and it
|
|
552
|
+
is what the dataset page, the schema and everybody reading the table downstream go on. The
|
|
553
|
+
units entry names the code that column's numbers are in, and a temperature, a distance, a duration
|
|
554
|
+
or a rate that arrives without one is a number nobody can convert or compare. Neither member is
|
|
555
|
+
work to leave for later: a recipe that leaves a column undescribed or a measurement unitless is not
|
|
556
|
+
one to start a run on, and a run already built from one is not finished, however well its checks
|
|
557
|
+
reported.
|
|
549
558
|
|
|
550
559
|
Decide, per column, what a reader should see, and write it on the column as `presentation`. This is
|
|
551
560
|
your judgement about the data and nobody else can make it: the Builder can see the values but not
|
|
@@ -808,6 +817,14 @@ required check that fails ends the run with `failure_code: CHECK_FAILED`.
|
|
|
808
817
|
`mr-data diff RUN_A RUN_B` compares two runs — columns added, removed and retyped, row counts, the
|
|
809
818
|
coverage window and the data fingerprint. `--columns-only` narrows what is compared to the schema.
|
|
810
819
|
|
|
820
|
+
**Then read the columns against the document, because an undescribed column is a revision rather
|
|
821
|
+
than a caveat.** `peek` names the columns the run sealed; the recipe is where their descriptions
|
|
822
|
+
and units are, so this is a reading of the document rather than a judgement about the data: every
|
|
823
|
+
column has a `description`, and every column that measures a physical quantity has a `units`
|
|
824
|
+
entry. A run whose recipe leaves either out is not finished — the table arrives with nothing
|
|
825
|
+
beside it to say what its numbers mean or what they are measured in — so it is a revision, which
|
|
826
|
+
is stage 7, and it is registered again before anything is presented.
|
|
827
|
+
|
|
811
828
|
### 7. Fix — revise the document and register it again
|
|
812
829
|
|
|
813
830
|
Change the document and send it again. Same dataset, same table, new digest:
|
{mostlyright_data-0.15.1 → mostlyright_data-0.15.2}/src/mostlyright/data_harness/acquisition/http.py
RENAMED
|
@@ -1088,6 +1088,34 @@ class TransportResponse:
|
|
|
1088
1088
|
return values[0] if values else None
|
|
1089
1089
|
|
|
1090
1090
|
|
|
1091
|
+
@dataclass(frozen=True)
|
|
1092
|
+
class StreamedTransportResponse:
|
|
1093
|
+
"""A transport response whose body was copied to a coordinator-owned sink.
|
|
1094
|
+
|
|
1095
|
+
The body deliberately has no representation here. Callers get the facts needed for the
|
|
1096
|
+
same pinned-peer receipt as ``TransportResponse`` without an opportunity to re-materialise
|
|
1097
|
+
a large source in coordinator memory.
|
|
1098
|
+
"""
|
|
1099
|
+
|
|
1100
|
+
status: int
|
|
1101
|
+
headers: tuple[tuple[str, str], ...]
|
|
1102
|
+
body_size_bytes: int
|
|
1103
|
+
body_sha256: str
|
|
1104
|
+
connected_peer: str
|
|
1105
|
+
tls_verified: bool
|
|
1106
|
+
hostname_verified: bool
|
|
1107
|
+
|
|
1108
|
+
def header(self, name: str) -> str | None:
|
|
1109
|
+
return TransportResponse(
|
|
1110
|
+
self.status,
|
|
1111
|
+
self.headers,
|
|
1112
|
+
b"",
|
|
1113
|
+
self.connected_peer,
|
|
1114
|
+
self.tls_verified,
|
|
1115
|
+
self.hostname_verified,
|
|
1116
|
+
).header(name)
|
|
1117
|
+
|
|
1118
|
+
|
|
1091
1119
|
class PinnedTransport(Protocol):
|
|
1092
1120
|
def request(
|
|
1093
1121
|
self,
|
|
@@ -1109,6 +1137,17 @@ class PinnedTransport(Protocol):
|
|
|
1109
1137
|
can influence character by character.
|
|
1110
1138
|
"""
|
|
1111
1139
|
|
|
1140
|
+
def request_to_sink(
|
|
1141
|
+
self,
|
|
1142
|
+
target: ValidatedTarget,
|
|
1143
|
+
*,
|
|
1144
|
+
approved_ip: str,
|
|
1145
|
+
headers: Mapping[str, str],
|
|
1146
|
+
limits: RetrievalLimits,
|
|
1147
|
+
sink: Callable[[bytes], None],
|
|
1148
|
+
) -> StreamedTransportResponse:
|
|
1149
|
+
"""Stream one response into ``sink`` while retaining only bounded receipt facts."""
|
|
1150
|
+
|
|
1112
1151
|
|
|
1113
1152
|
class TransportFailureError(AcquisitionSecurityError):
|
|
1114
1153
|
"""Retryable transport failure with exact response-body bytes already consumed."""
|
|
@@ -1391,6 +1430,33 @@ class RetrievedBytes:
|
|
|
1391
1430
|
)
|
|
1392
1431
|
|
|
1393
1432
|
|
|
1433
|
+
@dataclass(frozen=True)
|
|
1434
|
+
class RetrievedSink:
|
|
1435
|
+
"""Receipt facts for a retrieval copied directly into a caller-owned file descriptor."""
|
|
1436
|
+
|
|
1437
|
+
source_url: str
|
|
1438
|
+
final_url: str
|
|
1439
|
+
media_type: str
|
|
1440
|
+
content_sha256: str
|
|
1441
|
+
content_size_bytes: int
|
|
1442
|
+
hops: tuple[RetrievalHop, ...]
|
|
1443
|
+
transport_evidence_digest: str
|
|
1444
|
+
|
|
1445
|
+
@property
|
|
1446
|
+
def total_response_body_size_bytes(self) -> int:
|
|
1447
|
+
"""Every response byte consumed, including failed peer attempts."""
|
|
1448
|
+
|
|
1449
|
+
return sum(
|
|
1450
|
+
hop.response_body_size_bytes
|
|
1451
|
+
+ sum(
|
|
1452
|
+
attempt.response_body_size_bytes
|
|
1453
|
+
for attempt in hop.peer_attempts[:-1]
|
|
1454
|
+
if attempt.outcome == "transport_failure"
|
|
1455
|
+
)
|
|
1456
|
+
for hop in self.hops
|
|
1457
|
+
)
|
|
1458
|
+
|
|
1459
|
+
|
|
1394
1460
|
def probe_transport_for(retrieved: RetrievedBytes) -> ProbeTransport:
|
|
1395
1461
|
"""Seal what the terminal response of one retrieval stated.
|
|
1396
1462
|
|
|
@@ -1653,6 +1719,209 @@ class PinnedHttpsRetriever:
|
|
|
1653
1719
|
validators=validators,
|
|
1654
1720
|
)
|
|
1655
1721
|
|
|
1722
|
+
def retrieve_to_sink(
|
|
1723
|
+
self,
|
|
1724
|
+
url: str,
|
|
1725
|
+
*,
|
|
1726
|
+
sink: Callable[[bytes], None],
|
|
1727
|
+
reset_sink: Callable[[], None] | None = None,
|
|
1728
|
+
) -> RetrievedSink:
|
|
1729
|
+
"""Fetch a public whole CSV while streaming its terminal body to ``sink``.
|
|
1730
|
+
|
|
1731
|
+
Redirect bodies are discarded after their digest is measured. A peer retry starts a
|
|
1732
|
+
fresh request only after the failed attempt records its consumed bytes; the caller must
|
|
1733
|
+
therefore use a fresh staging file per acquisition and discard it on any exception.
|
|
1734
|
+
"""
|
|
1735
|
+
if not callable(sink):
|
|
1736
|
+
raise AcquisitionSecurityError("STREAM_SINK", "stream sink must be callable")
|
|
1737
|
+
started = float(self._clock())
|
|
1738
|
+
current_url = url
|
|
1739
|
+
hops: list[RetrievalHop] = []
|
|
1740
|
+
aggregate = 0
|
|
1741
|
+
requests = 0
|
|
1742
|
+
for redirect_count in range(self._limits.max_redirects + 1):
|
|
1743
|
+
self._check_total_timeout(started)
|
|
1744
|
+
target = validate_public_https_url(
|
|
1745
|
+
current_url, resolver=self._resolver, egress_policy=self._egress_policy
|
|
1746
|
+
)
|
|
1747
|
+
headers = {
|
|
1748
|
+
"Accept": _accept_header(self._limits),
|
|
1749
|
+
"Accept-Encoding": "identity",
|
|
1750
|
+
"Connection": "close",
|
|
1751
|
+
"Host": urlsplit(target.normalized_url).netloc,
|
|
1752
|
+
"User-Agent": self._limits.user_agent,
|
|
1753
|
+
}
|
|
1754
|
+
response: StreamedTransportResponse | None = None
|
|
1755
|
+
attempts: list[PeerAttempt] = []
|
|
1756
|
+
for ip in target.approved_ips:
|
|
1757
|
+
if requests >= self._limits.max_requests:
|
|
1758
|
+
raise PeerAttemptError(
|
|
1759
|
+
"REQUEST_LIMIT",
|
|
1760
|
+
"retrieval exceeded its request budget",
|
|
1761
|
+
tuple(attempts),
|
|
1762
|
+
hops=tuple(hops),
|
|
1763
|
+
)
|
|
1764
|
+
requests += 1
|
|
1765
|
+
remaining = self._limits.max_aggregate_response_bytes - aggregate
|
|
1766
|
+
try:
|
|
1767
|
+
limits = self._remaining_attempt_limits(
|
|
1768
|
+
started + self._limits.total_timeout_seconds,
|
|
1769
|
+
remaining_aggregate_bytes=remaining,
|
|
1770
|
+
)
|
|
1771
|
+
# Only the terminal body reaches the supplied fd. Redirect bytes are still
|
|
1772
|
+
# fully consumed and evidenced, but are never retained.
|
|
1773
|
+
with self._limiter.acquire(
|
|
1774
|
+
target.hostname, deadline=started + self._limits.total_timeout_seconds
|
|
1775
|
+
):
|
|
1776
|
+
response = self._transport.request_to_sink(
|
|
1777
|
+
target, approved_ip=ip, headers=headers, limits=limits, sink=sink
|
|
1778
|
+
)
|
|
1779
|
+
except AcquisitionSecurityError as exc:
|
|
1780
|
+
consumed = (
|
|
1781
|
+
exc.response_body_size_bytes
|
|
1782
|
+
if isinstance(exc, TransportFailureError)
|
|
1783
|
+
else 0
|
|
1784
|
+
)
|
|
1785
|
+
aggregate += consumed
|
|
1786
|
+
attempts.append(
|
|
1787
|
+
PeerAttempt(
|
|
1788
|
+
approved_ip=ip,
|
|
1789
|
+
outcome="transport_failure",
|
|
1790
|
+
failure_code=exc.code,
|
|
1791
|
+
response_body_size_bytes=consumed,
|
|
1792
|
+
)
|
|
1793
|
+
)
|
|
1794
|
+
if (
|
|
1795
|
+
exc.code == "TRANSPORT_FAILURE"
|
|
1796
|
+
and ip != target.approved_ips[-1]
|
|
1797
|
+
and aggregate < self._limits.max_aggregate_response_bytes
|
|
1798
|
+
):
|
|
1799
|
+
# A failed peer may already have copied an unauthenticated prefix to
|
|
1800
|
+
# the caller-owned staging file. A second peer answers a fresh whole
|
|
1801
|
+
# representation, so it can proceed only after that prefix is removed.
|
|
1802
|
+
if reset_sink is None:
|
|
1803
|
+
raise PeerAttemptError(
|
|
1804
|
+
"STREAM_SINK",
|
|
1805
|
+
"retrying a streamed retrieval requires a resettable sink",
|
|
1806
|
+
tuple(attempts),
|
|
1807
|
+
hops=tuple(hops),
|
|
1808
|
+
) from None
|
|
1809
|
+
reset_sink()
|
|
1810
|
+
continue
|
|
1811
|
+
raise PeerAttemptError(
|
|
1812
|
+
exc.code, exc.detail, tuple(attempts), hops=tuple(hops)
|
|
1813
|
+
) from None
|
|
1814
|
+
attempts.append(
|
|
1815
|
+
PeerAttempt(
|
|
1816
|
+
approved_ip=ip,
|
|
1817
|
+
outcome="response",
|
|
1818
|
+
failure_code=None,
|
|
1819
|
+
response_body_size_bytes=response.body_size_bytes,
|
|
1820
|
+
)
|
|
1821
|
+
)
|
|
1822
|
+
break
|
|
1823
|
+
if response is None:
|
|
1824
|
+
raise PeerAttemptError(
|
|
1825
|
+
"TRANSPORT_FAILURE",
|
|
1826
|
+
"all resolver-approved peers failed",
|
|
1827
|
+
tuple(attempts),
|
|
1828
|
+
hops=tuple(hops),
|
|
1829
|
+
)
|
|
1830
|
+
aggregate += response.body_size_bytes
|
|
1831
|
+
if aggregate > self._limits.max_aggregate_response_bytes:
|
|
1832
|
+
raise PeerAttemptError(
|
|
1833
|
+
"AGGREGATE_RESPONSE_LIMIT",
|
|
1834
|
+
"response bodies exceeded aggregate budget",
|
|
1835
|
+
tuple(attempts),
|
|
1836
|
+
hops=tuple(hops),
|
|
1837
|
+
)
|
|
1838
|
+
if not response.tls_verified or not response.hostname_verified:
|
|
1839
|
+
raise PeerAttemptError(
|
|
1840
|
+
"TLS_VERIFICATION",
|
|
1841
|
+
"transport did not prove TLS verification",
|
|
1842
|
+
tuple(attempts),
|
|
1843
|
+
hops=tuple(hops),
|
|
1844
|
+
)
|
|
1845
|
+
peer = require_approved_peer(target, response.connected_peer)
|
|
1846
|
+
normalized = _validate_response_headers(response.headers)
|
|
1847
|
+
content_length = response.header("content-length")
|
|
1848
|
+
if content_length is not None and (
|
|
1849
|
+
not _DECIMAL_ONLY.fullmatch(content_length)
|
|
1850
|
+
or int(content_length) != response.body_size_bytes
|
|
1851
|
+
):
|
|
1852
|
+
raise PeerAttemptError(
|
|
1853
|
+
"CONTENT_LENGTH",
|
|
1854
|
+
"response bytes do not match declared content length",
|
|
1855
|
+
tuple(attempts),
|
|
1856
|
+
hops=tuple(hops),
|
|
1857
|
+
)
|
|
1858
|
+
encoding = (response.header("content-encoding") or "").lower().strip()
|
|
1859
|
+
if encoding not in _ALLOWED_RESPONSE_ENCODINGS:
|
|
1860
|
+
raise PeerAttemptError(
|
|
1861
|
+
"CONTENT_ENCODING",
|
|
1862
|
+
"compressed network responses are disabled",
|
|
1863
|
+
tuple(attempts),
|
|
1864
|
+
hops=tuple(hops),
|
|
1865
|
+
)
|
|
1866
|
+
hop = RetrievalHop(
|
|
1867
|
+
url=target.normalized_url,
|
|
1868
|
+
resolution_digest=target.resolution_digest,
|
|
1869
|
+
connected_peer=peer,
|
|
1870
|
+
status=response.status,
|
|
1871
|
+
response_headers_digest=canonical_sha256(normalized),
|
|
1872
|
+
response_body_size_bytes=response.body_size_bytes,
|
|
1873
|
+
response_body_sha256=response.body_sha256,
|
|
1874
|
+
etag=response.header("etag"),
|
|
1875
|
+
last_modified=response.header("last-modified"),
|
|
1876
|
+
peer_attempts=tuple(attempts),
|
|
1877
|
+
approved_ips=target.approved_ips,
|
|
1878
|
+
)
|
|
1879
|
+
hops.append(hop)
|
|
1880
|
+
if response.status in REDIRECT_STATUSES:
|
|
1881
|
+
location = response.header(_REDIRECT_HEADER)
|
|
1882
|
+
if not location or redirect_count >= self._limits.max_redirects:
|
|
1883
|
+
raise PeerAttemptError(
|
|
1884
|
+
"REDIRECT_LIMIT",
|
|
1885
|
+
"response redirect is outside the admitted limit",
|
|
1886
|
+
tuple(attempts),
|
|
1887
|
+
hops=tuple(hops),
|
|
1888
|
+
)
|
|
1889
|
+
current_url = urljoin(target.normalized_url, location)
|
|
1890
|
+
# The redirect entity is evidence, never source content. A file-backed caller
|
|
1891
|
+
# truncates its coordinator staging descriptor here before the next hop.
|
|
1892
|
+
if reset_sink is None:
|
|
1893
|
+
raise AcquisitionSecurityError(
|
|
1894
|
+
"STREAM_SINK", "redirecting streamed retrieval requires a resettable sink"
|
|
1895
|
+
)
|
|
1896
|
+
reset_sink()
|
|
1897
|
+
continue
|
|
1898
|
+
if response.status == NOT_FOUND_STATUS or not 200 <= response.status <= 299:
|
|
1899
|
+
raise PeerAttemptError(
|
|
1900
|
+
"HTTP_STATUS",
|
|
1901
|
+
f"source returned HTTP status {response.status}",
|
|
1902
|
+
tuple(attempts),
|
|
1903
|
+
hops=tuple(hops),
|
|
1904
|
+
http_status=response.status,
|
|
1905
|
+
)
|
|
1906
|
+
media_type = _media_type(response.header("content-type"))
|
|
1907
|
+
if media_type not in self._limits.allowed_media_types:
|
|
1908
|
+
raise PeerAttemptError(
|
|
1909
|
+
"MEDIA_TYPE",
|
|
1910
|
+
"response media type is not allowlisted",
|
|
1911
|
+
tuple(attempts),
|
|
1912
|
+
hops=tuple(hops),
|
|
1913
|
+
)
|
|
1914
|
+
return RetrievedSink(
|
|
1915
|
+
source_url=url,
|
|
1916
|
+
final_url=target.normalized_url,
|
|
1917
|
+
media_type=media_type,
|
|
1918
|
+
content_sha256=response.body_sha256,
|
|
1919
|
+
content_size_bytes=response.body_size_bytes,
|
|
1920
|
+
hops=tuple(hops),
|
|
1921
|
+
transport_evidence_digest=canonical_sha256([hop.to_dict() for hop in hops]),
|
|
1922
|
+
)
|
|
1923
|
+
raise AcquisitionSecurityError("REDIRECT_LIMIT", "redirect loop did not terminate")
|
|
1924
|
+
|
|
1656
1925
|
def retrieve_datagov_v4(
|
|
1657
1926
|
self,
|
|
1658
1927
|
url: str,
|
|
@@ -2613,6 +2882,97 @@ class StdlibPinnedTransport:
|
|
|
2613
2882
|
finally:
|
|
2614
2883
|
connection.close()
|
|
2615
2884
|
|
|
2885
|
+
def request_to_sink(
|
|
2886
|
+
self,
|
|
2887
|
+
target: ValidatedTarget,
|
|
2888
|
+
*,
|
|
2889
|
+
approved_ip: str,
|
|
2890
|
+
headers: Mapping[str, str],
|
|
2891
|
+
limits: RetrievalLimits,
|
|
2892
|
+
sink: Callable[[bytes], None],
|
|
2893
|
+
) -> StreamedTransportResponse:
|
|
2894
|
+
"""The production no-buffer variant of :meth:`request`.
|
|
2895
|
+
|
|
2896
|
+
The size check happens before every write. A rejected response can therefore leave a
|
|
2897
|
+
partial staging file, but never an admitted result; its exact consumed byte count is
|
|
2898
|
+
carried by ``TransportFailureError`` for retry accounting.
|
|
2899
|
+
"""
|
|
2900
|
+
deadline = time.monotonic() + limits.total_timeout_seconds
|
|
2901
|
+
connection = _PinnedHTTPSConnection(
|
|
2902
|
+
hostname=target.hostname,
|
|
2903
|
+
approved_ip=approved_ip,
|
|
2904
|
+
port=target.port,
|
|
2905
|
+
timeout=min(limits.connect_timeout_seconds, limits.total_timeout_seconds),
|
|
2906
|
+
context=self._context,
|
|
2907
|
+
)
|
|
2908
|
+
total = 0
|
|
2909
|
+
digest = hashlib.sha256()
|
|
2910
|
+
try:
|
|
2911
|
+
connection.request("GET", target.request_target, headers=dict(headers))
|
|
2912
|
+
if connection.sock is not None:
|
|
2913
|
+
connection.sock.settimeout(
|
|
2914
|
+
_remaining_socket_timeout(deadline, configured=limits.read_timeout_seconds)
|
|
2915
|
+
)
|
|
2916
|
+
response = connection.getresponse()
|
|
2917
|
+
raw_headers = tuple(
|
|
2918
|
+
(key.lower(), value.strip()) for key, value in response.getheaders()
|
|
2919
|
+
)
|
|
2920
|
+
_validate_response_headers(raw_headers)
|
|
2921
|
+
content_length = next(
|
|
2922
|
+
(value for key, value in raw_headers if key == "content-length"), None
|
|
2923
|
+
)
|
|
2924
|
+
if content_length is not None:
|
|
2925
|
+
try:
|
|
2926
|
+
if int(content_length) > limits.max_response_bytes:
|
|
2927
|
+
raise AcquisitionSecurityError(
|
|
2928
|
+
"RESPONSE_LIMIT",
|
|
2929
|
+
"declared response length exceeds the configured limit",
|
|
2930
|
+
)
|
|
2931
|
+
except ValueError:
|
|
2932
|
+
raise AcquisitionSecurityError(
|
|
2933
|
+
"CONTENT_LENGTH", "response content length is invalid"
|
|
2934
|
+
) from None
|
|
2935
|
+
while True:
|
|
2936
|
+
if connection.sock is not None:
|
|
2937
|
+
connection.sock.settimeout(
|
|
2938
|
+
_remaining_socket_timeout(deadline, configured=limits.read_timeout_seconds)
|
|
2939
|
+
)
|
|
2940
|
+
chunk = response.read(min(65_536, limits.max_response_bytes + 1 - total))
|
|
2941
|
+
if not chunk:
|
|
2942
|
+
break
|
|
2943
|
+
total += len(chunk)
|
|
2944
|
+
if total > limits.max_response_bytes:
|
|
2945
|
+
raise AcquisitionSecurityError(
|
|
2946
|
+
"RESPONSE_LIMIT", "response exceeded the configured byte limit"
|
|
2947
|
+
)
|
|
2948
|
+
digest.update(chunk)
|
|
2949
|
+
sink(chunk)
|
|
2950
|
+
peer = connection.connected_peer
|
|
2951
|
+
if peer is None:
|
|
2952
|
+
raise AcquisitionSecurityError(
|
|
2953
|
+
"PEER_ADDRESS", "transport did not record its connected peer"
|
|
2954
|
+
)
|
|
2955
|
+
return StreamedTransportResponse(
|
|
2956
|
+
response.status, raw_headers, total, digest.hexdigest(), peer, True, True
|
|
2957
|
+
)
|
|
2958
|
+
except http.client.IncompleteRead as exc:
|
|
2959
|
+
partial = exc.partial if isinstance(exc.partial, bytes) else bytes(exc.partial)
|
|
2960
|
+
raise TransportFailureError(
|
|
2961
|
+
f"HTTPS peer disconnected during a response: {type(exc).__name__}",
|
|
2962
|
+
response_body_size_bytes=total + len(partial),
|
|
2963
|
+
) from None
|
|
2964
|
+
except http.client.RemoteDisconnected as exc:
|
|
2965
|
+
raise TransportFailureError(
|
|
2966
|
+
f"HTTPS peer disconnected before a response: {type(exc).__name__}",
|
|
2967
|
+
response_body_size_bytes=total,
|
|
2968
|
+
) from None
|
|
2969
|
+
except OSError as exc:
|
|
2970
|
+
raise TransportFailureError(
|
|
2971
|
+
f"HTTPS transport failed: {type(exc).__name__}", response_body_size_bytes=total
|
|
2972
|
+
) from None
|
|
2973
|
+
finally:
|
|
2974
|
+
connection.close()
|
|
2975
|
+
|
|
2616
2976
|
|
|
2617
2977
|
def _remaining_socket_timeout(deadline: float, *, configured: float) -> float:
|
|
2618
2978
|
remaining = deadline - time.monotonic()
|