mostlyright-data 0.18.0__tar.gz → 0.18.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.18.0 → mostlyright_data-0.18.2}/PKG-INFO +5 -5
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/README.md +1 -1
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/pyproject.toml +4 -4
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connector.py +14 -5
- mostlyright_data-0.18.2/src/mostlyright/data_harness/sources/stream_numbers.py +338 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_segment_spill.py +27 -5
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_subscription_feed.py +78 -6
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_subscription_worker.py +99 -3
- mostlyright_data-0.18.0/src/mostlyright/data_harness/sources/stream_numbers.py +0 -93
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/.gitignore +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/skills/mr-data-build/SKILL.md +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/http.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/sandbox_bootstrap.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/bounded_scratch_sink.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/compact_worker.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/declared_checks.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_checks.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_classifier.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_persist.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_recompute.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/delta_rows.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/fetch_egress_smoke.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/formats.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_ingestion_worker.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_run_worker.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/hosted_worker.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/incremental_slice_executor.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/incremental_worker.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/legacy_table_recovery.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/legacy_table_recovery_contract.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/page_coverage.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/pipeline.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/plan_graph.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/configurable_delimited.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/2.0.0/publisher_preamble/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/delimited_text/2.0.0/publisher_preamble/indices.csv +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.1.0/article_text_order/article.html +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.1.0/article_text_order/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.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.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/run_execution_v4.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/run_phase_timing.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_bootstrap.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_bundle_writer.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_history_candidate_child.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_history_transform_child.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_inventory.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_partition.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_raw_inventory.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/source_state_index.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/page_collections.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/registry.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.array-frames.v4.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.json-keepalive.v4.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.loose-frames.v4.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/fixture.text-keepalive.v4.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_order_vector.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_recovery_objects.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/studio_boundary.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/table_manifest.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/table_parts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/table_profile.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/activity.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/categories.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/collection_plan.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/dataset-categories-v1.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/router.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/user_agent.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_catalog.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/remediation.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/ux/render.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_closed_source.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_recipe.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/v4_window.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.18.0 → mostlyright_data-0.18.2}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mostlyright-data
|
|
3
|
-
Version: 0.18.
|
|
3
|
+
Version: 0.18.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/
|
|
7
|
-
Requires-Python:
|
|
7
|
+
Requires-Python: >=3.13
|
|
8
8
|
Provides-Extra: build
|
|
9
9
|
Requires-Dist: hatchling==1.28.0; extra == 'build'
|
|
10
10
|
Requires-Dist: uv-build==0.11.3; extra == 'build'
|
|
@@ -42,7 +42,7 @@ Requires-Dist: protobuf==7.35.1; extra == 'dev'
|
|
|
42
42
|
Requires-Dist: pyarrow==23.0.1; extra == 'dev'
|
|
43
43
|
Requires-Dist: pyclipper==1.4.0; extra == 'dev'
|
|
44
44
|
Requires-Dist: pycparser==3.0; extra == 'dev'
|
|
45
|
-
Requires-Dist: pyhdf==0.11.7; ((sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64')) and extra == 'dev'
|
|
45
|
+
Requires-Dist: pyhdf==0.11.7; ((sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64' and python_full_version < '3.14')) and extra == 'dev'
|
|
46
46
|
Requires-Dist: pypdfium2==5.13.0; extra == 'dev'
|
|
47
47
|
Requires-Dist: pypublicdecompwt==2.8.1.6; extra == 'dev'
|
|
48
48
|
Requires-Dist: pyreadstat==1.3.6; extra == 'dev'
|
|
@@ -155,7 +155,7 @@ Requires-Dist: eccodeslib==2.48.0.26; (sys_platform != 'win32') and extra == 'sc
|
|
|
155
155
|
Requires-Dist: h5py==3.16.0; extra == 'scientific'
|
|
156
156
|
Requires-Dist: netcdf4==1.7.4; extra == 'scientific'
|
|
157
157
|
Requires-Dist: pillow==12.3.0; extra == 'scientific'
|
|
158
|
-
Requires-Dist: pyhdf==0.11.7; ((sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64')) and extra == 'scientific'
|
|
158
|
+
Requires-Dist: pyhdf==0.11.7; ((sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64' and python_full_version < '3.14')) and extra == 'scientific'
|
|
159
159
|
Requires-Dist: pypublicdecompwt==2.8.1.6; extra == 'scientific'
|
|
160
160
|
Requires-Dist: rasterio==1.5.1; extra == 'scientific'
|
|
161
161
|
Requires-Dist: zarr==3.3.0; extra == 'scientific'
|
|
@@ -173,7 +173,7 @@ they finish.
|
|
|
173
173
|
|
|
174
174
|
## Requirements
|
|
175
175
|
|
|
176
|
-
Use CPython 3.13.
|
|
176
|
+
Use CPython 3.13 or newer. The retired local execution lane (`[local,scientific]` extras) still needs 3.13.
|
|
177
177
|
|
|
178
178
|
## Install
|
|
179
179
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mostlyright-data"
|
|
3
|
-
version = "0.18.
|
|
3
|
+
version = "0.18.2"
|
|
4
4
|
description = "Mostly Right CLI for reproducible, reviewed Parquet datasets"
|
|
5
5
|
readme = "README.md"
|
|
6
|
-
requires-python = ">=3.13
|
|
6
|
+
requires-python = ">=3.13"
|
|
7
7
|
# The base distribution IS the thin client (ADR 0021): pure Python, no compiled extension anywhere
|
|
8
8
|
# in the install closure, and -- as it turns out -- no third-party package at all. Every runtime
|
|
9
9
|
# dependency this project had was reached only from the local execution lane, so all of them moved
|
|
@@ -50,7 +50,7 @@ mostlyright-grib = [
|
|
|
50
50
|
antlr4-python3-runtime = { path = "vendor/wheels/antlr4_python3_runtime-4.9.3-py3-none-any.whl" }
|
|
51
51
|
mostlyright-studio-client-v3 = { path = "vendor/wheels/mostlyright_studio_client_v3-3.0.0-py3-none-any.whl" }
|
|
52
52
|
pyhdf = [
|
|
53
|
-
{ path = "vendor/wheels/pyhdf-0.11.7-cp313-cp313-macosx_15_0_arm64.whl", marker = "sys_platform == 'darwin' and platform_machine == 'arm64'" },
|
|
53
|
+
{ path = "vendor/wheels/pyhdf-0.11.7-cp313-cp313-macosx_15_0_arm64.whl", marker = "sys_platform == 'darwin' and platform_machine == 'arm64' and python_full_version < '3.14'" },
|
|
54
54
|
]
|
|
55
55
|
|
|
56
56
|
[project.scripts]
|
|
@@ -198,7 +198,7 @@ scientific = [
|
|
|
198
198
|
"netCDF4==1.7.4",
|
|
199
199
|
# Linux resolves the exact upstream wheel. macOS arm64 uses the reviewed source build,
|
|
200
200
|
# because upstream's CP313 wheel is built with an unsupported macOS 26 deployment floor.
|
|
201
|
-
"pyhdf==0.11.7; (sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64')",
|
|
201
|
+
"pyhdf==0.11.7; (sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'darwin' and platform_machine == 'arm64' and python_full_version < '3.14')",
|
|
202
202
|
"Pillow==12.3.0",
|
|
203
203
|
"pypublicdecompwt==2.8.1.6",
|
|
204
204
|
"rasterio==1.5.1",
|
|
@@ -57,7 +57,6 @@ from mostlyright.data_harness.canonical import (
|
|
|
57
57
|
CanonicalJSONError,
|
|
58
58
|
canonical_json_bytes,
|
|
59
59
|
canonical_sha256,
|
|
60
|
-
parse_json,
|
|
61
60
|
)
|
|
62
61
|
from mostlyright.data_harness.sources.authenticated_https import _canonical_origin
|
|
63
62
|
from mostlyright.data_harness.sources.authenticated_https_v2 import (
|
|
@@ -69,7 +68,7 @@ from mostlyright.data_harness.sources.authenticated_https_v2 import (
|
|
|
69
68
|
_parse_request,
|
|
70
69
|
)
|
|
71
70
|
from mostlyright.data_harness.sources.contracts import SourceContractError
|
|
72
|
-
from mostlyright.data_harness.sources.stream_numbers import
|
|
71
|
+
from mostlyright.data_harness.sources.stream_numbers import parse_frame_json
|
|
73
72
|
|
|
74
73
|
STREAM_CONNECTOR_VERSION = "harness-stream-connector.v1"
|
|
75
74
|
STREAM_CONNECTOR_VERSION_V2 = "harness-stream-connector.v2"
|
|
@@ -860,11 +859,21 @@ class StreamConnectorConfig:
|
|
|
860
859
|
The single reader every caller that reads a frame of this venue picks up, so a capture, a
|
|
861
860
|
credential acknowledgement and a probe cannot disagree about whether ``0.5`` is a message
|
|
862
861
|
or a decode error.
|
|
862
|
+
|
|
863
|
+
BOTH READINGS GO THROUGH THE FRAME READER, which differs from the document reader in one
|
|
864
|
+
bound and one only: how many JSON members one frame may carry. A frame is bounded by bytes
|
|
865
|
+
where it was assembled, and a venue asked about a large roster answers the whole roster in
|
|
866
|
+
one array; the canonical member ceiling was written for what this build seals, and applying
|
|
867
|
+
it here refused an answer this build had asked for. Whether that array IS a batch is this
|
|
868
|
+
document's word (``frame_shape``), and the reader is told it, because a batch is sealed
|
|
869
|
+
element by element and a single message is sealed whole: each is held at the read to what
|
|
870
|
+
its seal will hold it to. See
|
|
871
|
+
:func:`~mostlyright.data_harness.sources.stream_numbers.parse_frame_json`.
|
|
863
872
|
"""
|
|
864
873
|
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
874
|
+
return parse_frame_json(
|
|
875
|
+
text, numbers_as_text=self.numbers == NUMBERS_TEXT, batches=self.admits_array_frames
|
|
876
|
+
)
|
|
868
877
|
|
|
869
878
|
@property
|
|
870
879
|
def ignores_untyped_messages(self) -> bool:
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"""Read a venue frame, in either number reading, under the bounds a frame actually has.
|
|
2
|
+
|
|
3
|
+
The text reading is a third reading beside :func:`parse_json` and :func:`parse_foreign_json`, for
|
|
4
|
+
a document whose numbers have to survive being sealed. A venue that writes a price as ``0.5``
|
|
5
|
+
writes a fractional number, and :func:`parse_json` refuses one because nothing fractional may
|
|
6
|
+
reach a digest;
|
|
7
|
+
:func:`parse_foreign_json` reads it as a float, which may be inspected but never written, so a frame
|
|
8
|
+
read that way could not become a recorded line. Neither answer is available to a reader whose
|
|
9
|
+
whole job is to keep the frame.
|
|
10
|
+
|
|
11
|
+
So the number is kept as the literal its sender wrote. ``parse_int`` and ``parse_float`` are
|
|
12
|
+
handed the exact text JSON's own grammar matched -- ``0.5``, ``-3``, ``1e9`` -- and that text is the
|
|
13
|
+
value. No precision is chosen, because none is computed: the string that comes back is the string
|
|
14
|
+
that went in, so ``0.10`` and ``0.1`` stay the two different things the venue said them as, and a
|
|
15
|
+
seventy-seven-digit integer keeps all seventy-seven digits. The result holds a string wherever a
|
|
16
|
+
number stood and is therefore an ordinary value of the canonical data model:
|
|
17
|
+
:func:`~mostlyright.data_harness.canonical.canonical_json_bytes` seals it and :func:`parse_json`
|
|
18
|
+
reads it back unchanged.
|
|
19
|
+
|
|
20
|
+
Everything else is exactly as strict as the canonical reader. ``NaN`` and ``Infinity`` are still
|
|
21
|
+
refused, and so are duplicate object keys, byte-order marks, non-strict UTF-8, unpaired surrogates,
|
|
22
|
+
and the depth and string-length bounds. The reader lives beside the canonical module rather than
|
|
23
|
+
inside it because that module's bytes are a cross-system pin.
|
|
24
|
+
|
|
25
|
+
THE MEMBER BOUND IS THE ONE THING A FRAME DOES NOT SHARE WITH A DOCUMENT, and
|
|
26
|
+
:func:`parse_frame_json` is the reader that says so, for BOTH number readings. A frame is already
|
|
27
|
+
bounded, by bytes, at the transport that assembled it; the canonical member ceiling was written for
|
|
28
|
+
what this build seals and digests, where a hundred thousand members is far past anything authored
|
|
29
|
+
here. A venue asked about a roster of sixteen hundred members answers all sixteen hundred in one
|
|
30
|
+
array, and a count written for a different kind of document refused the answer it had been asked
|
|
31
|
+
for. See :data:`MAX_FRAME_MEMBERS` for where the frame's ceiling comes from instead, and
|
|
32
|
+
:func:`parse_frame_json` for why nothing it admits is ever sealed as one value.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
from __future__ import annotations
|
|
36
|
+
|
|
37
|
+
import json
|
|
38
|
+
import math
|
|
39
|
+
from collections.abc import Callable
|
|
40
|
+
from typing import Any
|
|
41
|
+
|
|
42
|
+
from mostlyright.data_harness.canonical import (
|
|
43
|
+
MAX_CANONICAL_DEPTH,
|
|
44
|
+
MAX_CANONICAL_INTEGER,
|
|
45
|
+
MAX_CANONICAL_MEMBERS,
|
|
46
|
+
MAX_CANONICAL_STRING_LENGTH,
|
|
47
|
+
CanonicalJSONError,
|
|
48
|
+
_parse_integer,
|
|
49
|
+
_reject_constant,
|
|
50
|
+
_reject_duplicate_pairs,
|
|
51
|
+
_reject_fraction,
|
|
52
|
+
_validate_unicode,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
__all__ = [
|
|
56
|
+
"MAX_FRAME_MEMBERS",
|
|
57
|
+
"MAX_MESSAGE_MEMBERS",
|
|
58
|
+
"RECORDED_LINE_WRAPPER_MEMBERS",
|
|
59
|
+
"parse_frame_json",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
#: The largest number of JSON members one frame off a socket may be read as.
|
|
63
|
+
#:
|
|
64
|
+
#: A FRAME IS NOT A DOCUMENT THIS BUILD WRITES, and the canonical member ceiling was written for
|
|
65
|
+
#: one that is. :data:`~mostlyright.data_harness.canonical.MAX_CANONICAL_MEMBERS` bounds what may
|
|
66
|
+
#: be sealed, digested and read back, where a hundred thousand members is already far past
|
|
67
|
+
#: anything this repository authors. A frame is a venue's own answer to a subscription, and a
|
|
68
|
+
#: venue that is asked about sixteen hundred members may answer all sixteen hundred in one array,
|
|
69
|
+
#: each an object of a few dozen members with nested sides of its own. That frame is bounded
|
|
70
|
+
#: already -- by bytes, at the transport, where an assembled message past
|
|
71
|
+
#: ``MAX_MESSAGE_BYTES`` is refused before a reader ever sees it -- and bounding it a second time
|
|
72
|
+
#: by a count written for a different kind of document refuses an answer the venue was asked for.
|
|
73
|
+
#:
|
|
74
|
+
#: So the ceiling here is DERIVED FROM THE BOUND THAT ALREADY HOLDS rather than chosen: the
|
|
75
|
+
#: smallest JSON member is two bytes (``[]`` is one member in one pair of bytes, and every member
|
|
76
|
+
#: inside a container costs at least a delimiter and a character), so a frame of at most N bytes
|
|
77
|
+
#: cannot hold more than N // 2 members. The count therefore adds no capacity the byte bound did
|
|
78
|
+
#: not already grant -- it stays a real ceiling for a reader walking a value that is not bytes,
|
|
79
|
+
#: while never being the bound that decides a frame. The relationship is asserted against the
|
|
80
|
+
#: transport's own constant in the connector's tests; it is not imported, because the reader of a
|
|
81
|
+
#: frame's bytes has no business reaching the socket that assembled them.
|
|
82
|
+
MAX_FRAME_MEMBERS = (8 * 1024 * 1024) // 2
|
|
83
|
+
|
|
84
|
+
#: How many JSON members the WIDEST line this build writes adds around the message it carries.
|
|
85
|
+
#:
|
|
86
|
+
#: A venue message is written down more than once on its way to a table. The capture session
|
|
87
|
+
#: and the segment recorder write it as ``{"epoch": …, "message": …, "received_at": …}``, three
|
|
88
|
+
#: members it did not bring; the Recorder then seals it as one line of exactly the members
|
|
89
|
+
#: ``sources.stream.SEALED_FRAME_KEYS`` names -- the line object and seven scalar siblings
|
|
90
|
+
#: beside ``message`` -- which is eight. The ceiling below is derived from the widest of those,
|
|
91
|
+
#: because a message that fits the first line and not the last is admitted at the read and
|
|
92
|
+
#: refused at the seal, which is the failure this module exists to remove. The number is stated
|
|
93
|
+
#: here rather than imported, for the reason the frame ceiling states its own: this reader has
|
|
94
|
+
#: no business reaching the Recorder, and the tests hold the two equal so a key added to the
|
|
95
|
+
#: sealed line moves this or fails the build.
|
|
96
|
+
RECORDED_LINE_WRAPPER_MEMBERS = 8
|
|
97
|
+
|
|
98
|
+
#: The largest number of JSON members ONE MESSAGE may carry and still be sealed as one line.
|
|
99
|
+
#:
|
|
100
|
+
#: The frame ceiling above is about what a venue may answer with; this is about what this build
|
|
101
|
+
#: may write down, and it is the canonical ceiling less the widest line's wrapper. A message is
|
|
102
|
+
#: sealed by the canonical writer as one recorded line and read back by the strict reader as one,
|
|
103
|
+
#: so a message past this count is one the seal refuses whatever the read admitted. THE READ
|
|
104
|
+
#: THEREFORE HOLDS IT TOO: a frame that is one message is read under this ceiling exactly as it
|
|
105
|
+
#: always was, and a batch frame's elements are each read under it, because each becomes one
|
|
106
|
+
#: line. Only the batch as a whole may exceed it, up to the frame ceiling, because a batch is
|
|
107
|
+
#: never sealed whole. Nothing this reader admits is refused one step later for its size.
|
|
108
|
+
MAX_MESSAGE_MEMBERS = MAX_CANONICAL_MEMBERS - RECORDED_LINE_WRAPPER_MEMBERS
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def parse_frame_json(
|
|
112
|
+
value: str | bytes | bytearray | memoryview, *, numbers_as_text: bool, batches: bool
|
|
113
|
+
) -> Any:
|
|
114
|
+
"""Read ONE FRAME off a socket, in either number reading, bounded the way a frame is bounded.
|
|
115
|
+
|
|
116
|
+
The two readings are the same reader here on purpose. Whether ``0.5`` is a message or a decode
|
|
117
|
+
error is the venue document's statement and is answered by ``numbers_as_text``; how large an
|
|
118
|
+
answer a venue may give is not a number-reading question at all, and a frame ceiling that
|
|
119
|
+
applied to only one of the two readings would be a build where a venue's answer was admitted
|
|
120
|
+
or refused according to how its prices are spelled.
|
|
121
|
+
|
|
122
|
+
EVERY OTHER BOUND IS THE CANONICAL ONE, UNCHANGED: duplicate object keys, byte-order marks,
|
|
123
|
+
non-strict UTF-8, ``NaN``/``Infinity``, out-of-range integers, unpaired surrogates, the
|
|
124
|
+
sixty-four-level nesting bound and the string-length bound all refuse exactly what they refuse
|
|
125
|
+
for a document. Only the member count differs, and it differs by what will be sealed.
|
|
126
|
+
|
|
127
|
+
``batches`` is the document's word on whether an array frame is a batch of messages, and it
|
|
128
|
+
decides which ceiling holds over what. A frame that is ONE MESSAGE is read under
|
|
129
|
+
:data:`MAX_MESSAGE_MEMBERS`, because it becomes one recorded line and a line past the canonical
|
|
130
|
+
ceiling is one the seal refuses -- which is the count a frame was always read under, less the
|
|
131
|
+
widest line's wrapper. A frame that is a BATCH is read under :data:`MAX_FRAME_MEMBERS` as a
|
|
132
|
+
whole and under :data:`MAX_MESSAGE_MEMBERS` per element, because ``_admit_batch``
|
|
133
|
+
and the hosted feed's ``_frame_messages`` write each element as its own line with its own
|
|
134
|
+
sequence and the frame's arrival time, and the strict reader that reads a recording back
|
|
135
|
+
(``stream_recorder``) reads those LINES, one message each. So a frame carrying a venue's whole
|
|
136
|
+
roster becomes a thousand-odd ordinary documents, every one of them under the canonical
|
|
137
|
+
member ceiling, and that ceiling goes on holding over everything this build writes and
|
|
138
|
+
digests. A refusal for size is raised HERE, at the read every lane already guards, and
|
|
139
|
+
never one step later at a write no lane guards; the transport bounds the bytes, and every
|
|
140
|
+
place a frame is written down afterwards holds whatever the transport admitted.
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
return _read(
|
|
144
|
+
value,
|
|
145
|
+
number=_number_literal if numbers_as_text else None,
|
|
146
|
+
max_members=MAX_MESSAGE_MEMBERS,
|
|
147
|
+
batch_ceiling=MAX_FRAME_MEMBERS if batches else None,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def _read(
|
|
152
|
+
value: str | bytes | bytearray | memoryview,
|
|
153
|
+
*,
|
|
154
|
+
number: Callable[[str], str] | None,
|
|
155
|
+
max_members: int,
|
|
156
|
+
batch_ceiling: int | None = None,
|
|
157
|
+
) -> Any:
|
|
158
|
+
"""The one reading both entry points are, differing only in numbers and in member ceiling.
|
|
159
|
+
|
|
160
|
+
``max_members`` bounds whatever is read as ONE VALUE: a document, a message, or one element
|
|
161
|
+
of a batch. With a ``batch_ceiling``, a top-level array is a batch -- walked one element at a
|
|
162
|
+
time, each under ``max_members`` with a count of its own, and the array as a whole held to
|
|
163
|
+
the batch ceiling beside them; anything that is not a top-level array is one value as
|
|
164
|
+
before. The paths and the depth are exactly what one walk over the whole array would have
|
|
165
|
+
named, so a refusal reads the same whichever way the array was walked.
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
if isinstance(value, str):
|
|
169
|
+
text = value
|
|
170
|
+
elif isinstance(value, (bytes, bytearray, memoryview)):
|
|
171
|
+
raw = bytes(value)
|
|
172
|
+
if raw.startswith(b"\xef\xbb\xbf"):
|
|
173
|
+
raise CanonicalJSONError("JSON_BOM", "$", "UTF-8 byte-order marks are not allowed")
|
|
174
|
+
try:
|
|
175
|
+
text = raw.decode("utf-8", errors="strict")
|
|
176
|
+
except UnicodeDecodeError as exc:
|
|
177
|
+
raise CanonicalJSONError(
|
|
178
|
+
"JSON_UTF8",
|
|
179
|
+
"$",
|
|
180
|
+
f"input is not strict UTF-8 at byte {exc.start}",
|
|
181
|
+
) from None
|
|
182
|
+
else:
|
|
183
|
+
raise CanonicalJSONError(
|
|
184
|
+
"JSON_INPUT_TYPE",
|
|
185
|
+
"$",
|
|
186
|
+
"JSON input must be text or a bytes-like value",
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
if text.startswith("\ufeff"):
|
|
190
|
+
raise CanonicalJSONError("JSON_BOM", "$", "Unicode byte-order marks are not allowed")
|
|
191
|
+
try:
|
|
192
|
+
parsed = json.loads(
|
|
193
|
+
text,
|
|
194
|
+
object_pairs_hook=_reject_duplicate_pairs,
|
|
195
|
+
parse_int=number or _parse_integer,
|
|
196
|
+
parse_float=number or _reject_fraction,
|
|
197
|
+
parse_constant=_reject_constant,
|
|
198
|
+
)
|
|
199
|
+
except CanonicalJSONError:
|
|
200
|
+
raise
|
|
201
|
+
except json.JSONDecodeError as exc:
|
|
202
|
+
raise CanonicalJSONError(
|
|
203
|
+
"JSON_SYNTAX",
|
|
204
|
+
"$",
|
|
205
|
+
f"invalid JSON at line {exc.lineno}, column {exc.colno}",
|
|
206
|
+
) from None
|
|
207
|
+
if batch_ceiling is None or not isinstance(parsed, list):
|
|
208
|
+
return _normalize(parsed, "$", depth=0, members=[0], max_members=max_members)
|
|
209
|
+
total = 1
|
|
210
|
+
for index, element in enumerate(parsed):
|
|
211
|
+
counted = [0]
|
|
212
|
+
_normalize(element, f"$[{index}]", depth=1, members=counted, max_members=max_members)
|
|
213
|
+
total += counted[0]
|
|
214
|
+
if total > batch_ceiling:
|
|
215
|
+
raise CanonicalJSONError("JSON_MEMBERS", "$", f"value exceeds {batch_ceiling} members")
|
|
216
|
+
return parsed
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def _normalize(
|
|
220
|
+
value: Any,
|
|
221
|
+
path: str,
|
|
222
|
+
*,
|
|
223
|
+
depth: int,
|
|
224
|
+
members: list[int],
|
|
225
|
+
max_members: int,
|
|
226
|
+
) -> Any:
|
|
227
|
+
""":func:`~mostlyright.data_harness.canonical._normalize_json`, with the ceiling as an argument.
|
|
228
|
+
|
|
229
|
+
Written here rather than reached for there because the canonical module's BYTES ARE A
|
|
230
|
+
CROSS-SYSTEM PIN and may not move to grow a parameter. Every bound below is the canonical
|
|
231
|
+
one, spelled the same way and raising the same code at the same path; ``max_members`` is the
|
|
232
|
+
only thing this walk is told rather than knows. That the two agree is not asserted by reading
|
|
233
|
+
them side by side -- ``tests/test_canonical.py`` walks a corpus through both and requires the
|
|
234
|
+
same value or the same refusal from each.
|
|
235
|
+
|
|
236
|
+
IT VALIDATES IN PLACE AND BUILDS NOTHING. The canonical walk returns a fresh tree because it
|
|
237
|
+
is handed arbitrary Python values -- tuples, ordered mappings, whatever a caller composed --
|
|
238
|
+
and has to hand back the one shape it seals. This walk is handed only what ``json.loads``
|
|
239
|
+
just built from a frame, which is already that shape, so a second tree of it would be the
|
|
240
|
+
same value at twice the cost. The cost matters because the frame is a venue's: eight
|
|
241
|
+
mebibytes of two-byte containers is millions of objects, and the parse that builds them is
|
|
242
|
+
the peak a hostile frame can reach in this process -- the same peak the canonical reader has
|
|
243
|
+
always reached on such a frame before its own count could trip -- and this walk does not
|
|
244
|
+
raise it. The parse is bounded by the transport's byte bound and by nothing else; nothing
|
|
245
|
+
here pretends the member count bounds memory, because it never did.
|
|
246
|
+
|
|
247
|
+
The fractional-number branch is here for the canonical module's non-finite refusal only.
|
|
248
|
+
A frame is read either strictly, where a fraction is refused at the scanner before this walk
|
|
249
|
+
ever sees it, or as text, where it never became a float; no caller of this reader admits one,
|
|
250
|
+
so the foreign-document allowance has nothing to correspond to, but a float that did arrive
|
|
251
|
+
would be refused with the same code the canonical walk gives it.
|
|
252
|
+
"""
|
|
253
|
+
|
|
254
|
+
if depth > MAX_CANONICAL_DEPTH:
|
|
255
|
+
raise CanonicalJSONError(
|
|
256
|
+
"JSON_DEPTH",
|
|
257
|
+
path,
|
|
258
|
+
f"nesting exceeds {MAX_CANONICAL_DEPTH} levels",
|
|
259
|
+
)
|
|
260
|
+
members[0] += 1
|
|
261
|
+
if members[0] > max_members:
|
|
262
|
+
raise CanonicalJSONError(
|
|
263
|
+
"JSON_MEMBERS",
|
|
264
|
+
path,
|
|
265
|
+
f"value exceeds {max_members} members",
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
if value is None or type(value) is bool:
|
|
269
|
+
return value
|
|
270
|
+
if type(value) is int:
|
|
271
|
+
if not -MAX_CANONICAL_INTEGER - 1 <= value <= MAX_CANONICAL_INTEGER:
|
|
272
|
+
raise CanonicalJSONError(
|
|
273
|
+
"JSON_INTEGER_RANGE",
|
|
274
|
+
path,
|
|
275
|
+
"integer is outside the signed 64-bit range",
|
|
276
|
+
)
|
|
277
|
+
return value
|
|
278
|
+
if type(value) is float:
|
|
279
|
+
if not math.isfinite(value):
|
|
280
|
+
raise CanonicalJSONError(
|
|
281
|
+
"JSON_NONFINITE",
|
|
282
|
+
path,
|
|
283
|
+
"non-finite JSON numbers are unsupported",
|
|
284
|
+
)
|
|
285
|
+
raise CanonicalJSONError(
|
|
286
|
+
"JSON_NONINTEGER_NUMBER",
|
|
287
|
+
path,
|
|
288
|
+
"non-integer JSON numbers are unsupported",
|
|
289
|
+
)
|
|
290
|
+
if isinstance(value, str):
|
|
291
|
+
if len(value) > MAX_CANONICAL_STRING_LENGTH:
|
|
292
|
+
raise CanonicalJSONError(
|
|
293
|
+
"JSON_STRING_LENGTH",
|
|
294
|
+
path,
|
|
295
|
+
f"string exceeds {MAX_CANONICAL_STRING_LENGTH} code points",
|
|
296
|
+
)
|
|
297
|
+
_validate_unicode(value, path)
|
|
298
|
+
return value
|
|
299
|
+
if isinstance(value, dict):
|
|
300
|
+
if any(not isinstance(key, str) for key in value):
|
|
301
|
+
raise CanonicalJSONError(
|
|
302
|
+
"JSON_OBJECT_KEY",
|
|
303
|
+
path,
|
|
304
|
+
"object keys must all be strings",
|
|
305
|
+
)
|
|
306
|
+
for key, item in value.items():
|
|
307
|
+
_validate_unicode(key, f"{path}.<key>")
|
|
308
|
+
child = f"{path}.{key}" if key else f"{path}['']"
|
|
309
|
+
_normalize(item, child, depth=depth + 1, members=members, max_members=max_members)
|
|
310
|
+
return value
|
|
311
|
+
if isinstance(value, list):
|
|
312
|
+
for index, item in enumerate(value):
|
|
313
|
+
_normalize(
|
|
314
|
+
item,
|
|
315
|
+
f"{path}[{index}]",
|
|
316
|
+
depth=depth + 1,
|
|
317
|
+
members=members,
|
|
318
|
+
max_members=max_members,
|
|
319
|
+
)
|
|
320
|
+
return value
|
|
321
|
+
# A tuple is the one shape the canonical walk copies into a list. A walk that copies nothing
|
|
322
|
+
# cannot, and ``json.loads`` never produces one, so it is refused rather than half-handled.
|
|
323
|
+
raise CanonicalJSONError(
|
|
324
|
+
"JSON_VALUE_TYPE",
|
|
325
|
+
path,
|
|
326
|
+
f"unsupported value type {type(value).__name__}",
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def _number_literal(value: str) -> str:
|
|
331
|
+
"""Return a JSON number exactly as it was written, as text.
|
|
332
|
+
|
|
333
|
+
The hook JSON's own scanner hands the matched literal to, so this is the sender's spelling and
|
|
334
|
+
not a rendering of something parsed out of it. Nothing is widened, narrowed or rounded on the
|
|
335
|
+
way through, because nothing is converted.
|
|
336
|
+
"""
|
|
337
|
+
|
|
338
|
+
return value
|
|
@@ -20,7 +20,11 @@ every frame to disk as it goes -- and this is what lets the pending prefix reach
|
|
|
20
20
|
of waiting in RAM for the rest of the segment.
|
|
21
21
|
|
|
22
22
|
The file is an ordinary append log, one canonical JSON object per line, raw frame bytes carried in
|
|
23
|
-
base64 because a provider frame is bytes and a line is text
|
|
23
|
+
base64 because a provider frame is bytes and a line is text -- in a LIST of pieces, because a
|
|
24
|
+
canonical string is bounded at ``MAX_CANONICAL_STRING_LENGTH`` code points and a frame the
|
|
25
|
+
transport admits may be eight mebibytes: every frame the feed accepted has to be one this file
|
|
26
|
+
can hold, whatever its size, or a segment fails at its high-water mark for one frame that had
|
|
27
|
+
nowhere else to go. It is written with the work root's
|
|
24
28
|
own permissions, it is never delivered anywhere, and it is discarded the moment the segment it
|
|
25
29
|
belongs to is sealed or abandoned. Nothing about it is evidence: the evidence is what the
|
|
26
30
|
recorder seals from it.
|
|
@@ -40,6 +44,7 @@ from collections.abc import Iterator, Sequence
|
|
|
40
44
|
from pathlib import Path
|
|
41
45
|
|
|
42
46
|
from mostlyright.data_harness.canonical import (
|
|
47
|
+
MAX_CANONICAL_STRING_LENGTH,
|
|
43
48
|
CanonicalJSONError,
|
|
44
49
|
canonical_json_bytes,
|
|
45
50
|
parse_json,
|
|
@@ -53,6 +58,10 @@ from mostlyright.data_harness.stream_subscription_worker import (
|
|
|
53
58
|
#: The file one spilled segment lives in, beneath its own directory.
|
|
54
59
|
SPILL_FILE_NAME = "frames.ndjson"
|
|
55
60
|
|
|
61
|
+
#: How many raw bytes one piece of a spilled frame carries: what one canonical string holds in
|
|
62
|
+
#: base64, which writes four characters for every three bytes. Derived so the two cannot drift.
|
|
63
|
+
SPILL_PIECE_BYTES = (MAX_CANONICAL_STRING_LENGTH // 4) * 3
|
|
64
|
+
|
|
56
65
|
#: The exact members one spilled record carries. Equality in both directions, so a record written
|
|
57
66
|
#: by a build that knew about one more field is refused rather than partly read.
|
|
58
67
|
_RECORD_MEMBERS = frozenset(
|
|
@@ -149,7 +158,16 @@ class SegmentSpill:
|
|
|
149
158
|
landed_bytes = 0
|
|
150
159
|
try:
|
|
151
160
|
for frame in frames:
|
|
152
|
-
|
|
161
|
+
try:
|
|
162
|
+
line = canonical_json_bytes(_record(frame))
|
|
163
|
+
except CanonicalJSONError as error:
|
|
164
|
+
# Unreachable for any frame the transport admits, since the pieces are cut to
|
|
165
|
+
# what one canonical string holds; kept so a refusal here is this module's
|
|
166
|
+
# own word rather than an escaping reader error.
|
|
167
|
+
raise StreamSubscriptionError(
|
|
168
|
+
"STREAM_SUBSCRIPTION_SEGMENT_INVALID", "spilled frame could not be written"
|
|
169
|
+
) from error
|
|
170
|
+
_write(descriptor, line + b"\n")
|
|
153
171
|
landed += 1
|
|
154
172
|
landed_bytes += len(frame.raw)
|
|
155
173
|
# Once, after the batch rather than after every frame: the durability this needs is
|
|
@@ -204,10 +222,14 @@ _SAFE_ID_CHARACTERS = frozenset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU
|
|
|
204
222
|
|
|
205
223
|
|
|
206
224
|
def _record(frame: StreamFrame) -> dict[str, object]:
|
|
225
|
+
pieces = [
|
|
226
|
+
base64.b64encode(frame.raw[start : start + SPILL_PIECE_BYTES]).decode("ascii")
|
|
227
|
+
for start in range(0, len(frame.raw), SPILL_PIECE_BYTES)
|
|
228
|
+
]
|
|
207
229
|
return {
|
|
208
230
|
"provider_event_id": frame.provider_event_id,
|
|
209
231
|
"cursor": frame.cursor,
|
|
210
|
-
"raw":
|
|
232
|
+
"raw": pieces,
|
|
211
233
|
"received_at": frame.received_at,
|
|
212
234
|
"connection_epoch": frame.connection_epoch,
|
|
213
235
|
"snapshot": frame.snapshot,
|
|
@@ -226,12 +248,12 @@ def _frame(line: bytes) -> StreamFrame:
|
|
|
226
248
|
"STREAM_SUBSCRIPTION_SEGMENT_INVALID", "spilled frame does not carry its exact members"
|
|
227
249
|
)
|
|
228
250
|
raw = value["raw"]
|
|
229
|
-
if not isinstance(raw, str):
|
|
251
|
+
if not isinstance(raw, list) or not all(isinstance(piece, str) for piece in raw):
|
|
230
252
|
raise StreamSubscriptionError(
|
|
231
253
|
"STREAM_SUBSCRIPTION_SEGMENT_INVALID", "spilled frame carries no readable payload"
|
|
232
254
|
)
|
|
233
255
|
try:
|
|
234
|
-
decoded = base64.b64decode(
|
|
256
|
+
decoded = b"".join(base64.b64decode(piece, validate=True) for piece in raw)
|
|
235
257
|
except (binascii.Error, ValueError) as error:
|
|
236
258
|
raise StreamSubscriptionError(
|
|
237
259
|
"STREAM_SUBSCRIPTION_SEGMENT_INVALID", "spilled frame carries no readable payload"
|