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