mostlyright-data 0.16.0__tar.gz → 0.16.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.16.0 → mostlyright_data-0.16.2}/PKG-INFO +1 -1
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/pyproject.toml +1 -1
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/http.py +54 -12
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/parsing.py +209 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/sandbox.py +34 -8
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/formats.py +36 -10
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler_fetch.py +12 -3
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +2 -1
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_run_worker.py +1247 -111
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/incremental_slice_executor.py +87 -28
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/inprocess_acquisition.py +160 -44
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/run_execution_v4.py +140 -14
- mostlyright_data-0.16.2/src/mostlyright/data_harness/run_phase_timing.py +57 -0
- mostlyright_data-0.16.2/src/mostlyright/data_harness/source_collection_bundle.py +154 -0
- mostlyright_data-0.16.2/src/mostlyright/data_harness/source_collection_contract.py +62 -0
- mostlyright_data-0.16.2/src/mostlyright/data_harness/source_collection_inputs.py +148 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/registry.py +11 -1
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sql_transform_engine.py +28 -2
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/studio_boundary.py +1 -1
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_closed_source.py +3 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_stream_recording.py +249 -37
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/.gitignore +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/README.md +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/skills/mr-data-build/SKILL.md +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/sandbox_bootstrap.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/bounded_scratch_sink.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/compact_worker.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/declared_checks.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_ingestion_worker.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/hosted_worker.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/incremental_worker.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/pipeline.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/plan_graph.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_bootstrap.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_bundle_writer.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_history_candidate_child.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_history_transform_child.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_inventory.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_partition.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_raw_inventory.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/source_state_index.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_order_vector.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_recovery_objects.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_segment_spill.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/table_manifest.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/table_parts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/table_profile.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/router.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/remediation.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/ux/render.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_recipe.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/v4_window.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.16.0 → mostlyright_data-0.16.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.16.
|
|
3
|
+
Version: 0.16.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/
|
{mostlyright_data-0.16.0 → mostlyright_data-0.16.2}/src/mostlyright/data_harness/acquisition/http.py
RENAMED
|
@@ -7,6 +7,7 @@ import errno
|
|
|
7
7
|
import hashlib
|
|
8
8
|
import http.client
|
|
9
9
|
import json
|
|
10
|
+
import math
|
|
10
11
|
import os
|
|
11
12
|
import re
|
|
12
13
|
import socket
|
|
@@ -1479,6 +1480,7 @@ class AcquisitionLimiter:
|
|
|
1479
1480
|
self,
|
|
1480
1481
|
*,
|
|
1481
1482
|
max_concurrency: int,
|
|
1483
|
+
max_concurrency_per_host: int | None = None,
|
|
1482
1484
|
min_interval_seconds: float,
|
|
1483
1485
|
clock: Callable[[], float] = time.monotonic,
|
|
1484
1486
|
sleep: Callable[[float], None] = time.sleep,
|
|
@@ -1493,11 +1495,21 @@ class AcquisitionLimiter:
|
|
|
1493
1495
|
"min_interval_seconds must be in [0, 3600]",
|
|
1494
1496
|
)
|
|
1495
1497
|
self._semaphore = threading.BoundedSemaphore(max_concurrency)
|
|
1498
|
+
if max_concurrency_per_host is not None and (
|
|
1499
|
+
type(max_concurrency_per_host) is not int
|
|
1500
|
+
or not 1 <= max_concurrency_per_host <= max_concurrency
|
|
1501
|
+
):
|
|
1502
|
+
raise AcquisitionSecurityError(
|
|
1503
|
+
"CONCURRENCY_LIMIT",
|
|
1504
|
+
"max_concurrency_per_host must be an integer in [1, max_concurrency]",
|
|
1505
|
+
)
|
|
1506
|
+
self._max_concurrency_per_host = max_concurrency_per_host
|
|
1496
1507
|
self._min_interval_seconds = float(min_interval_seconds)
|
|
1497
1508
|
self._clock = clock
|
|
1498
1509
|
self._sleep = sleep
|
|
1499
1510
|
self._lock = threading.Lock()
|
|
1500
1511
|
self._last_request: dict[str, float] = {}
|
|
1512
|
+
self._active_by_host: dict[str, int] = {}
|
|
1501
1513
|
|
|
1502
1514
|
@property
|
|
1503
1515
|
def clock(self) -> Callable[[], float]:
|
|
@@ -1509,11 +1521,10 @@ class AcquisitionLimiter:
|
|
|
1509
1521
|
def acquire(self, hostname: str, *, deadline: float) -> Iterator[None]:
|
|
1510
1522
|
"""Hold a concurrency slot, waiting out this host's minimum interval first.
|
|
1511
1523
|
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
healthy source into a failed run.
|
|
1524
|
+
The global concurrency semaphore fails fast: more work is in flight than this process
|
|
1525
|
+
admitted, which is a bug on our side. An optional per-host concurrency cap and the
|
|
1526
|
+
per-host interval wait: both describe a healthy source boundary, and an immediate
|
|
1527
|
+
refusal would turn temporary occupancy into a failed run.
|
|
1517
1528
|
|
|
1518
1529
|
``deadline`` is an absolute instant on this limiter's own clock -- the retrieval
|
|
1519
1530
|
passes its start plus the ``total_timeout_seconds`` it already measures itself
|
|
@@ -1523,17 +1534,40 @@ class AcquisitionLimiter:
|
|
|
1523
1534
|
up front as ``TOTAL_TIMEOUT`` rather than slept past and regretted afterwards.
|
|
1524
1535
|
"""
|
|
1525
1536
|
|
|
1526
|
-
if type(deadline) not in {int, float} or
|
|
1537
|
+
if type(deadline) not in {int, float} or not math.isfinite(float(deadline)):
|
|
1527
1538
|
raise AcquisitionSecurityError(
|
|
1528
1539
|
"TOTAL_TIMEOUT",
|
|
1529
1540
|
"a wait must be bounded by a deadline on the retrieval's own clock",
|
|
1530
1541
|
)
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
"CONCURRENCY_LIMIT",
|
|
1534
|
-
"acquisition concurrency limit is exhausted",
|
|
1535
|
-
)
|
|
1542
|
+
host_slot = False
|
|
1543
|
+
global_slot = False
|
|
1536
1544
|
try:
|
|
1545
|
+
if self._max_concurrency_per_host is not None:
|
|
1546
|
+
while True:
|
|
1547
|
+
with self._lock:
|
|
1548
|
+
active = self._active_by_host.get(hostname, 0)
|
|
1549
|
+
if active < self._max_concurrency_per_host:
|
|
1550
|
+
self._active_by_host[hostname] = active + 1
|
|
1551
|
+
host_slot = True
|
|
1552
|
+
break
|
|
1553
|
+
now = float(self._clock())
|
|
1554
|
+
remaining = float(deadline) - now
|
|
1555
|
+
if remaining <= 0:
|
|
1556
|
+
raise AcquisitionSecurityError(
|
|
1557
|
+
"TOTAL_TIMEOUT",
|
|
1558
|
+
"the wait for this host's concurrency slot outlived "
|
|
1559
|
+
"the retrieval budget",
|
|
1560
|
+
)
|
|
1561
|
+
# The caller's clock owns the deadline. Keep every individual wait short so
|
|
1562
|
+
# a sibling's release is observed promptly, while the loop itself remains
|
|
1563
|
+
# bounded by that same deadline (and test clocks can advance deterministically).
|
|
1564
|
+
self._sleep(min(remaining, 0.01))
|
|
1565
|
+
if not self._semaphore.acquire(blocking=False):
|
|
1566
|
+
raise AcquisitionSecurityError(
|
|
1567
|
+
"CONCURRENCY_LIMIT",
|
|
1568
|
+
"acquisition concurrency limit is exhausted",
|
|
1569
|
+
)
|
|
1570
|
+
global_slot = True
|
|
1537
1571
|
now = float(self._clock())
|
|
1538
1572
|
with self._lock:
|
|
1539
1573
|
last = self._last_request.get(hostname)
|
|
@@ -1553,7 +1587,15 @@ class AcquisitionLimiter:
|
|
|
1553
1587
|
self._sleep(scheduled - now)
|
|
1554
1588
|
yield
|
|
1555
1589
|
finally:
|
|
1556
|
-
|
|
1590
|
+
if global_slot:
|
|
1591
|
+
self._semaphore.release()
|
|
1592
|
+
if host_slot:
|
|
1593
|
+
with self._lock:
|
|
1594
|
+
remaining = self._active_by_host[hostname] - 1
|
|
1595
|
+
if remaining:
|
|
1596
|
+
self._active_by_host[hostname] = remaining
|
|
1597
|
+
else:
|
|
1598
|
+
del self._active_by_host[hostname]
|
|
1557
1599
|
|
|
1558
1600
|
|
|
1559
1601
|
class PinnedHttpsRetriever:
|
|
@@ -442,6 +442,215 @@ def parse_csv_evidence(
|
|
|
442
442
|
)
|
|
443
443
|
|
|
444
444
|
|
|
445
|
+
def parse_ndjson_evidence(
|
|
446
|
+
content: bytes,
|
|
447
|
+
*,
|
|
448
|
+
media_type: str,
|
|
449
|
+
filename: str,
|
|
450
|
+
limits: ParseLimits,
|
|
451
|
+
) -> ParsedTabularEvidence:
|
|
452
|
+
"""Stream one NDJSON verification pass: the admissions of the drained parse, record by record.
|
|
453
|
+
|
|
454
|
+
The second streaming pass, and the reason :data:`STREAMED_EVIDENCE_FORMATS` is a table rather
|
|
455
|
+
than the word ``csv``. It serves NDJSON acquired over public or authenticated HTTPS, which is
|
|
456
|
+
the lane that reaches ``InProcessPublicHttpsAdapter._confined_read``, and a replayed WebSocket
|
|
457
|
+
capture, which reaches it through ``v4_stream_recording.RecordedStreamAdapter``. That second
|
|
458
|
+
caller still needs rows, but only one per sealed batch, so it drains each batch on its own
|
|
459
|
+
and reads the concatenation through this pass alone.
|
|
460
|
+
|
|
461
|
+
WHAT IT ACTUALLY BUYS, MEASURED INSIDE THIS FUNCTION WITH ``tracemalloc``, WHICH IS NOT THE
|
|
462
|
+
SAME QUANTITY THE BENCHMARK REPORTS. Every figure in this paragraph is the peak of the Python
|
|
463
|
+
objects THIS PASS allocates. It is deliberately not the number
|
|
464
|
+
``evidence/acquisition-ceiling-benchmark.macos-arm64.json`` carries: that file records the
|
|
465
|
+
CHILD'S peak resident set (``ru_maxrss``), which also holds the interpreter, the PyArrow
|
|
466
|
+
import and the allocator's own slack. The two registers are reconciled at the end of this
|
|
467
|
+
paragraph, because reading one as the other is how a later change came to claim a memory win
|
|
468
|
+
twice the size of the real one.
|
|
469
|
+
|
|
470
|
+
No list of decoded records and no tuple of rows is ever built, where the drained
|
|
471
|
+
``_parse_json`` holds BOTH at once. On a four-column order-book shape that is 2.87x the
|
|
472
|
+
source against 10.95x at 320k records, and the ratio is what moves rather than the growth:
|
|
473
|
+
this pass is NOT constant in the number of records and saying so would be false.
|
|
474
|
+
``text.splitlines()`` materialises every line of the document, so the peak grows linearly with
|
|
475
|
+
the row count exactly as the drained parse's does -- 2.89x at 50k records and 2.87x at 320k,
|
|
476
|
+
against 11.12x and 10.95x drained. It is flat from 50k up rather than at every size: at 5k
|
|
477
|
+
records the pass's own constant costs are still visible and it reads 3.46x. The shape moves
|
|
478
|
+
it too -- the benchmark's seven-column frame reads 2.38x against 9.04x at 320k -- so the pair
|
|
479
|
+
is quoted together or neither number means anything.
|
|
480
|
+
|
|
481
|
+
RECONCILING THE TWO REGISTERS, ONCE, HERE. Function-level 2.87x and the child's 7.33x for the
|
|
482
|
+
same read are both honest: the child's reading adds a large fixed cost that no source byte
|
|
483
|
+
pays for. That cost is common to BOTH operations, so it raises both multipliers and
|
|
484
|
+
COMPRESSES the ratio between them -- this pass is worth 3.8x at the function level and 2.0x
|
|
485
|
+
measured as the child's peak on the order-book shape. A caller sizing a confined read wants
|
|
486
|
+
the child's number; a reader asking what this function holds wants this one.
|
|
487
|
+
|
|
488
|
+
THE LINE LIST IS REQUIRED, NOT AN OVERSIGHT. ``_parse_json`` numbers its records by
|
|
489
|
+
``str.splitlines()``, which breaks on U+2028, U+0085 and the vertical tab as well as on the
|
|
490
|
+
newline. A reader that split the bytes on ``\n`` would find a different number of records in
|
|
491
|
+
the same document and refuse at different record numbers, which is the parity this pass exists
|
|
492
|
+
to hold. So the trade is deliberate: the same line list, and just over a quarter of what this
|
|
493
|
+
function allocates, at a fetch ceiling 2.25 times higher. Both halves of that trade are in
|
|
494
|
+
the ``tracemalloc`` register named above; the child-level statement of the same trade is the
|
|
495
|
+
one in ``sandbox.py`` beside ``STREAMING_OPERATIONS``, and it is the one to quote when the
|
|
496
|
+
question is what a confined read costs.
|
|
497
|
+
|
|
498
|
+
THE REFUSALS ARE ``_parse_json``'s OWN, AT THE SAME RECORDS, IN THE SAME ORDER, and preserving
|
|
499
|
+
that order is most of this function. The drained parse reads every line into a list before it
|
|
500
|
+
asks a single question about shape, so its refusals fall in four groups that do not interleave:
|
|
501
|
+
the per-line group (the row budget, then a line that is not JSON), then the whole-document
|
|
502
|
+
group (an empty document, then a member that is not an object), then the per-record group (the
|
|
503
|
+
nesting budget, the first-record schema, the field budget), then the table group (the cell
|
|
504
|
+
budget). A pass that raised each fault where it found it would report the SECOND group's
|
|
505
|
+
fault only when no later line carried a FIRST group's, and would report a third-group fault
|
|
506
|
+
that the drained parse never reaches at all.
|
|
507
|
+
|
|
508
|
+
So only the per-line group raises where it is found -- it is the group the drained parse also
|
|
509
|
+
resolves before anything else -- and every later group is recorded and raised after the last
|
|
510
|
+
line has been read, in the drained parse's own order. That is the same deferral
|
|
511
|
+
:func:`parse_csv_evidence` applies to the total-cell budget, applied to three more groups
|
|
512
|
+
because NDJSON has three more questions that are asked about the document rather than the row.
|
|
513
|
+
|
|
514
|
+
The row digest is fed to the hash incrementally, by the framing
|
|
515
|
+
:func:`row_digest_for` uses, for the reason stated there.
|
|
516
|
+
"""
|
|
517
|
+
|
|
518
|
+
_admit_tabular_input(content, data_format="ndjson", media_type=media_type, filename=filename)
|
|
519
|
+
if not content or len(content) > limits.max_input_bytes:
|
|
520
|
+
raise AcquisitionSecurityError(
|
|
521
|
+
"PARSE_INPUT_LIMIT",
|
|
522
|
+
"source bytes are empty or exceed the parser input budget",
|
|
523
|
+
)
|
|
524
|
+
if any(content.startswith(magic) for magic in _ARCHIVE_OR_EXECUTABLE_MAGICS):
|
|
525
|
+
raise AcquisitionSecurityError(
|
|
526
|
+
"PARSE_FORBIDDEN_CONTAINER",
|
|
527
|
+
"archives, executables, documents, and nested containers are forbidden",
|
|
528
|
+
)
|
|
529
|
+
# No NUL check, deliberately. ``_parse_csv`` makes one and ``_parse_json`` does not, so a
|
|
530
|
+
# NUL inside an NDJSON string reaches the decoder in the drained parse and must reach it
|
|
531
|
+
# here; adding the CSV check would refuse a document the drained read admits.
|
|
532
|
+
text = _strict_utf8(content)
|
|
533
|
+
decoder = json.JSONDecoder(
|
|
534
|
+
object_pairs_hook=_unique_object,
|
|
535
|
+
parse_constant=lambda value: _invalid_json_number(value),
|
|
536
|
+
)
|
|
537
|
+
|
|
538
|
+
columns: tuple[str, ...] = ()
|
|
539
|
+
expected: set[str] = set()
|
|
540
|
+
observed_types: list[set[str]] = []
|
|
541
|
+
row_hash = hashlib.sha256()
|
|
542
|
+
row_count = 0
|
|
543
|
+
hashed_rows = 0
|
|
544
|
+
# The deferred groups, in the order the drained parse resolves them. ``not_an_object`` and
|
|
545
|
+
# an exhausted loop with ``row_count`` still zero are the whole-document group; the two
|
|
546
|
+
# ``AcquisitionSecurityError`` slots hold a refusal that is RE-RAISED rather than rebuilt, so
|
|
547
|
+
# the sentence a person is told is the drained parse's own down to the record number in it.
|
|
548
|
+
not_an_object = False
|
|
549
|
+
no_columns: AcquisitionSecurityError | None = None
|
|
550
|
+
record_refusal: AcquisitionSecurityError | None = None
|
|
551
|
+
over_cell_budget = False
|
|
552
|
+
canonical_error: CanonicalJSONError | None = None
|
|
553
|
+
|
|
554
|
+
for line_number, line in enumerate(text.splitlines(), start=1):
|
|
555
|
+
if not line.strip():
|
|
556
|
+
continue
|
|
557
|
+
if row_count >= limits.max_rows:
|
|
558
|
+
raise AcquisitionSecurityError("PARSE_ROW_LIMIT", "NDJSON exceeds the row budget")
|
|
559
|
+
try:
|
|
560
|
+
record = decoder.decode(line)
|
|
561
|
+
except json.JSONDecodeError:
|
|
562
|
+
raise AcquisitionSecurityError(
|
|
563
|
+
"PARSE_JSON",
|
|
564
|
+
f"NDJSON line {line_number} is malformed",
|
|
565
|
+
) from None
|
|
566
|
+
row_count += 1
|
|
567
|
+
if not isinstance(record, dict):
|
|
568
|
+
not_an_object = True
|
|
569
|
+
# Nothing below this line can win against a fault already recorded above it, so the work
|
|
570
|
+
# is skipped rather than done and discarded. That is what keeps the deferral from costing
|
|
571
|
+
# a full validation pass over a document whose first question already has an answer.
|
|
572
|
+
if not_an_object or no_columns is not None or record_refusal is not None:
|
|
573
|
+
continue
|
|
574
|
+
if not columns:
|
|
575
|
+
try:
|
|
576
|
+
columns = _columns(list(record), limits)
|
|
577
|
+
except AcquisitionSecurityError as error:
|
|
578
|
+
no_columns = error
|
|
579
|
+
continue
|
|
580
|
+
expected = set(columns)
|
|
581
|
+
observed_types = [set() for _ in columns]
|
|
582
|
+
row_hash.update(b'{"columns":' + canonical_json_bytes(list(columns)) + b',"rows":[')
|
|
583
|
+
try:
|
|
584
|
+
_validate_json_value(record, depth=1, limits=limits)
|
|
585
|
+
if set(record) != expected:
|
|
586
|
+
raise AcquisitionSecurityError(
|
|
587
|
+
"PARSE_ROW_SCHEMA",
|
|
588
|
+
f"JSON row {row_count} does not match the first-row schema",
|
|
589
|
+
)
|
|
590
|
+
row = tuple(record[column] for column in columns)
|
|
591
|
+
_validate_row(row, limits)
|
|
592
|
+
except AcquisitionSecurityError as error:
|
|
593
|
+
record_refusal = error
|
|
594
|
+
continue
|
|
595
|
+
if row_count * len(columns) > limits.max_total_cells:
|
|
596
|
+
over_cell_budget = True
|
|
597
|
+
# A value the canonical encoder refuses keeps the position the one-shot digest gave it:
|
|
598
|
+
# after every parse refusal and the cell budget, never mid-loop. The hash is dead on that
|
|
599
|
+
# path, so it stops accumulating with the first error.
|
|
600
|
+
if canonical_error is None:
|
|
601
|
+
try:
|
|
602
|
+
encoded_row = canonical_json_bytes(list(row))
|
|
603
|
+
except CanonicalJSONError as error:
|
|
604
|
+
canonical_error = error
|
|
605
|
+
else:
|
|
606
|
+
if hashed_rows:
|
|
607
|
+
row_hash.update(b",")
|
|
608
|
+
row_hash.update(encoded_row)
|
|
609
|
+
hashed_rows += 1
|
|
610
|
+
for index, value in enumerate(row):
|
|
611
|
+
observed_types[index].add("null" if value is None else type(value).__name__)
|
|
612
|
+
|
|
613
|
+
if not_an_object:
|
|
614
|
+
raise AcquisitionSecurityError("PARSE_JSON_SHAPE", "every JSON row must be an object")
|
|
615
|
+
if not row_count:
|
|
616
|
+
raise AcquisitionSecurityError(
|
|
617
|
+
"PARSE_JSON_SHAPE",
|
|
618
|
+
"JSON tabular input must be a non-empty array of objects",
|
|
619
|
+
)
|
|
620
|
+
if no_columns is not None:
|
|
621
|
+
raise no_columns
|
|
622
|
+
if record_refusal is not None:
|
|
623
|
+
raise record_refusal
|
|
624
|
+
if over_cell_budget:
|
|
625
|
+
raise AcquisitionSecurityError("PARSE_CELL_LIMIT", "table exceeds the cell budget")
|
|
626
|
+
if canonical_error is not None:
|
|
627
|
+
# TYPED, LIKE EVERY OTHER PARSE REFUSAL HERE, and for the reason ``parse_csv_evidence``
|
|
628
|
+
# states at its own copy of this branch: raised bare it leaves this boundary as an
|
|
629
|
+
# exception nothing above can name.
|
|
630
|
+
raise AcquisitionSecurityError(
|
|
631
|
+
"PARSE_VALUE", "parsed field contains a non-canonical value"
|
|
632
|
+
) from canonical_error
|
|
633
|
+
row_hash.update(b"]}")
|
|
634
|
+
|
|
635
|
+
return ParsedTabularEvidence(
|
|
636
|
+
data_format="ndjson",
|
|
637
|
+
input_sha256=sha256_bytes(content),
|
|
638
|
+
columns=columns,
|
|
639
|
+
row_count=row_count,
|
|
640
|
+
schema_digest=canonical_sha256(
|
|
641
|
+
{
|
|
642
|
+
"data_format": "ndjson",
|
|
643
|
+
"columns": list(columns),
|
|
644
|
+
"types": [
|
|
645
|
+
"|".join(sorted(observed)) if observed else "empty"
|
|
646
|
+
for observed in observed_types
|
|
647
|
+
],
|
|
648
|
+
}
|
|
649
|
+
),
|
|
650
|
+
row_digest=row_hash.hexdigest(),
|
|
651
|
+
)
|
|
652
|
+
|
|
653
|
+
|
|
445
654
|
def parse_csv_evidence_to_file(
|
|
446
655
|
source: BinaryIO,
|
|
447
656
|
destination: BinaryIO,
|
|
@@ -53,6 +53,7 @@ from mostlyright.data_harness.acquisition.parsing import (
|
|
|
53
53
|
ParseLimits,
|
|
54
54
|
parse_csv_evidence,
|
|
55
55
|
parse_csv_evidence_to_file,
|
|
56
|
+
parse_ndjson_evidence,
|
|
56
57
|
parse_streaming_csv_window,
|
|
57
58
|
parse_tabular_bytes,
|
|
58
59
|
prime_parquet_support,
|
|
@@ -147,6 +148,9 @@ SANDBOX_OPERATIONS = frozenset(
|
|
|
147
148
|
# bounded by the number of columns rather than by the size of the source. ``parse`` holds both
|
|
148
149
|
# and is measured at roughly twenty-one times the source bytes for it; the streaming pass is
|
|
149
150
|
# measured at roughly eight, and that difference is the entire reason this operation exists.
|
|
151
|
+
# ``parse_evidence`` reads two encodings, and the set is still per operation rather than per
|
|
152
|
+
# encoding: the budgets below bound what a CHILD may be asked for, and a child asked for the
|
|
153
|
+
# streaming read holds one record whichever pass reads it.
|
|
150
154
|
#
|
|
151
155
|
# It is a set rather than a flag because two independent budgets read it -- the per-operation
|
|
152
156
|
# request ceiling below and the container-boundary admission in ``_invoke`` -- and a second
|
|
@@ -2358,14 +2362,36 @@ def _execute_worker_request(request: dict[str, Any]) -> dict[str, Any]:
|
|
|
2358
2362
|
# The streaming pass, and the whole point of the operation: the same admissions and
|
|
2359
2363
|
# the same refusals at the same rows as the drained parse, holding one row at a time.
|
|
2360
2364
|
# The table is never built, so nothing here is released later -- there is nothing to
|
|
2361
|
-
# release.
|
|
2362
|
-
#
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
2365
|
+
# release.
|
|
2366
|
+
#
|
|
2367
|
+
# TWO PASSES NOW, AND THE DISPATCH IS EXHAUSTIVE OVER THE ATTESTED LIST RATHER THAN A
|
|
2368
|
+
# DEFAULT. ``data_format`` was already held to this operation's attested formats
|
|
2369
|
+
# above, so the branch below can only be reached by a name
|
|
2370
|
+
# ``STREAMED_EVIDENCE_FORMATS`` admits; an ``else`` that fell through to one of the
|
|
2371
|
+
# two passes would hand a third encoding's bytes to whichever pass was written last,
|
|
2372
|
+
# and the evidence it returned would attest a reader that never ran. That is the same
|
|
2373
|
+
# refusal ``_parse_tabular`` makes for the same reason, and it is a loud failure until
|
|
2374
|
+
# a pass is written rather than a silent misparse.
|
|
2375
|
+
if data_format == "csv":
|
|
2376
|
+
evidence = parse_csv_evidence(
|
|
2377
|
+
content,
|
|
2378
|
+
media_type=media_type,
|
|
2379
|
+
filename=filename,
|
|
2380
|
+
limits=limits,
|
|
2381
|
+
)
|
|
2382
|
+
elif data_format == "ndjson":
|
|
2383
|
+
evidence = parse_ndjson_evidence(
|
|
2384
|
+
content,
|
|
2385
|
+
media_type=media_type,
|
|
2386
|
+
filename=filename,
|
|
2387
|
+
limits=limits,
|
|
2388
|
+
)
|
|
2389
|
+
else:
|
|
2390
|
+
raise AcquisitionSecurityError(
|
|
2391
|
+
"PARSE_FORMAT_UNHANDLED",
|
|
2392
|
+
f"data format {data_format!r} is attested for the streaming read but no "
|
|
2393
|
+
"streaming pass claims it",
|
|
2394
|
+
)
|
|
2369
2395
|
base["evidence"] = _evidence_dict(evidence)
|
|
2370
2396
|
return base
|
|
2371
2397
|
parsed = parse_tabular_bytes(
|
|
@@ -71,17 +71,43 @@ READER_WORKER_MEMORY_BYTES = 512 * 1024 * 1024
|
|
|
71
71
|
# families, not encodings a parser is ever handed.
|
|
72
72
|
READER_OUTPUT_FORMATS: tuple[str, ...] = ("csv",)
|
|
73
73
|
|
|
74
|
-
# Encodings
|
|
74
|
+
# Encodings the INLINE confined interpretation may read one row at a time.
|
|
75
75
|
#
|
|
76
76
|
# This is a third question, and it must not be answered by either table above. ``DATA_FORMATS``
|
|
77
77
|
# says what may arrive on the wire and ``READER_OUTPUT_FORMATS`` says what a decoder may emit;
|
|
78
|
-
# this one says what the streaming verification
|
|
79
|
-
# read without materialising the table.
|
|
80
|
-
#
|
|
81
|
-
#
|
|
82
|
-
#
|
|
83
|
-
#
|
|
84
|
-
|
|
78
|
+
# this one says what the streaming verification passes in ``acquisition.parsing`` can actually
|
|
79
|
+
# read without materialising the table. It is spelled separately from ``READER_OUTPUT_FORMATS``
|
|
80
|
+
# because the two were equal by coincidence rather than by rule, and NDJSON is the event that
|
|
81
|
+
# separated them.
|
|
82
|
+
#
|
|
83
|
+
# WHICH LANES THIS SERVES. NDJSON acquired over public or authenticated HTTPS -- the sources that
|
|
84
|
+
# reach ``InProcessPublicHttpsAdapter._confined_read`` -- and, since the recording adapter was
|
|
85
|
+
# taught to order both reads, a replayed WebSocket capture as well. A Recorder seals one frame to
|
|
86
|
+
# a line, so ``v4_stream_recording.RecordedStreamAdapter`` reads the whole concatenation through
|
|
87
|
+
# this table's NDJSON pass for the facts a receipt states, and drains ONE SEALED BATCH AT A TIME
|
|
88
|
+
# for the frame each batch's ``recorder_position`` is spelled out of. Its confined peak is
|
|
89
|
+
# therefore a function of the largest batch rather than of the recording, which is what moved the
|
|
90
|
+
# order-book memory ceiling. Both lanes order the same pair, so both pin the same composition.
|
|
91
|
+
#
|
|
92
|
+
# THIS TABLE IS DIGEST-BEARING AND ITS SCOPE IS THE INLINE READ ALONE. It is embedded in the
|
|
93
|
+
# policy document of ``parse_evidence`` through ``PARSER_FORMATS_BY_OPERATION`` below, so adding
|
|
94
|
+
# to it rotates that operation's attestation -- which is the intended cost of teaching the inline
|
|
95
|
+
# pass a second encoding. It used to be the value of three registry entries, and widening it
|
|
96
|
+
# then would have rotated three attestations to describe one new pass: the two descriptor-backed
|
|
97
|
+
# operations read CSV through ``csv.reader`` and gain nothing from an encoding they cannot parse.
|
|
98
|
+
# They now name ``STREAMED_DESCRIPTOR_FORMATS`` instead, so each table moves the operations it
|
|
99
|
+
# actually describes.
|
|
100
|
+
STREAMED_EVIDENCE_FORMATS: tuple[str, ...] = ("csv", "ndjson")
|
|
101
|
+
|
|
102
|
+
# Encodings the DESCRIPTOR-BACKED confined interpretations may read one row at a time.
|
|
103
|
+
#
|
|
104
|
+
# Split from the table above rather than shared with it, because the two answer different
|
|
105
|
+
# questions about different code. ``parse_evidence_file`` and ``parse_streaming_csv_window``
|
|
106
|
+
# take an opened descriptor and drive ``csv.reader`` over a strict-UTF-8 text wrapper; there is
|
|
107
|
+
# no NDJSON branch behind either, and a format list that admitted one would attest a pass that
|
|
108
|
+
# does not exist. Writing a descriptor-backed NDJSON pass would move this table alone, exactly
|
|
109
|
+
# as writing the inline one moved the table above alone.
|
|
110
|
+
STREAMED_DESCRIPTOR_FORMATS: tuple[str, ...] = ("csv",)
|
|
85
111
|
|
|
86
112
|
# The ordered parser table. Order is digest-load-bearing: this exact sequence is
|
|
87
113
|
# embedded in the sandbox policy document built by
|
|
@@ -294,8 +320,8 @@ PARSER_FORMATS_BY_OPERATION: Mapping[str, tuple[str, ...]] = MappingProxyType(
|
|
|
294
320
|
{
|
|
295
321
|
"parse": PARSER_FORMAT_ORDER,
|
|
296
322
|
"parse_evidence": STREAMED_EVIDENCE_FORMATS,
|
|
297
|
-
"parse_evidence_file":
|
|
298
|
-
"parse_streaming_csv_window":
|
|
323
|
+
"parse_evidence_file": STREAMED_DESCRIPTOR_FORMATS,
|
|
324
|
+
"parse_streaming_csv_window": STREAMED_DESCRIPTOR_FORMATS,
|
|
299
325
|
"retrieve_and_parse": PARSER_FORMAT_ORDER,
|
|
300
326
|
"decode_and_parse": READER_OUTPUT_FORMATS,
|
|
301
327
|
"retrieve_decode_and_parse": READER_OUTPUT_FORMATS,
|
|
@@ -39,7 +39,16 @@ _OPENLIGADB_LIMITER = AcquisitionLimiter(
|
|
|
39
39
|
max_concurrency=2,
|
|
40
40
|
min_interval_seconds=1.0,
|
|
41
41
|
)
|
|
42
|
-
|
|
42
|
+
# The worker's cgroup scheduler admits at most three public-source children, each of which can
|
|
43
|
+
# issue at most two ranged requests. Eight global slots leave bounded headroom; per-host slots
|
|
44
|
+
# are the provider-facing limit and wait within the retrieval deadline when temporarily occupied.
|
|
45
|
+
PUBLIC_HTTPS_MAX_CONCURRENCY = 8
|
|
46
|
+
PUBLIC_HTTPS_MAX_CONCURRENCY_PER_HOST = 2
|
|
47
|
+
_PUBLIC_HTTPS_LIMITER = AcquisitionLimiter(
|
|
48
|
+
max_concurrency=PUBLIC_HTTPS_MAX_CONCURRENCY,
|
|
49
|
+
max_concurrency_per_host=PUBLIC_HTTPS_MAX_CONCURRENCY_PER_HOST,
|
|
50
|
+
min_interval_seconds=1.0,
|
|
51
|
+
)
|
|
43
52
|
|
|
44
53
|
# The ranged bulk-fetch envelope for capacity-constrained public origins (EPA AirData is
|
|
45
54
|
# the motivating case: a 60-80 MB archive on a single-IP Apache origin that advertises
|
|
@@ -162,7 +171,7 @@ def _public_https_retriever(
|
|
|
162
171
|
connect_timeout_seconds=5.0,
|
|
163
172
|
read_timeout_seconds=read_timeout_seconds,
|
|
164
173
|
total_timeout_seconds=total_timeout_seconds,
|
|
165
|
-
max_concurrency=
|
|
174
|
+
max_concurrency=PUBLIC_HTTPS_MAX_CONCURRENCY,
|
|
166
175
|
min_interval_seconds=1.0,
|
|
167
176
|
allowed_media_types=_public_expected_media_types(request.query),
|
|
168
177
|
user_agent=PUBLIC_HTTPS_USER_AGENT,
|
|
@@ -236,7 +245,7 @@ def _revalidation_retriever(hostname: str) -> PinnedHttpsRetriever:
|
|
|
236
245
|
connect_timeout_seconds=5.0,
|
|
237
246
|
read_timeout_seconds=REVALIDATION_READ_TIMEOUT_SECONDS,
|
|
238
247
|
total_timeout_seconds=REVALIDATION_TOTAL_TIMEOUT_SECONDS,
|
|
239
|
-
max_concurrency=
|
|
248
|
+
max_concurrency=PUBLIC_HTTPS_MAX_CONCURRENCY,
|
|
240
249
|
min_interval_seconds=1.0,
|
|
241
250
|
allowed_media_types=REVALIDATION_MEDIA_TYPES,
|
|
242
251
|
user_agent=PUBLIC_HTTPS_USER_AGENT,
|
|
@@ -90,7 +90,8 @@ PUBLIC_HTTPS_EGRESS_POLICY: dict[str, Any] = {
|
|
|
90
90
|
# is the meaningful ceiling for a bulk fetch.
|
|
91
91
|
"read_timeout_milliseconds": 120_000,
|
|
92
92
|
"total_timeout_milliseconds": 600_000,
|
|
93
|
-
"max_concurrency":
|
|
93
|
+
"max_concurrency": 8,
|
|
94
|
+
"max_concurrency_per_host": 2,
|
|
94
95
|
"min_interval_milliseconds": 1_000,
|
|
95
96
|
# A bulk object whose 0-0 probe names a total above threshold_bytes is fetched as
|
|
96
97
|
# consecutive range_bytes slices, at most `parallelism` in flight, each slice under
|