boti-data 1.3.3__tar.gz → 1.3.4__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.
- {boti_data-1.3.3 → boti_data-1.3.4}/PKG-INFO +1 -1
- {boti_data-1.3.3 → boti_data-1.3.4}/pyproject.toml +1 -1
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/pipelines/sinks_common.py +26 -2
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data.egg-info/PKG-INFO +1 -1
- {boti_data-1.3.3 → boti_data-1.3.4}/README.md +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/setup.cfg +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/arrow_schema.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/connection_catalog.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/datacube/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/datacube/artifact.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/datacube/base.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/datacube/contract.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/datacube/resource.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/dataset/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/dataset/hybrid.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/dataset/hybrid_support.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/arrow_schema_mapper.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/engine_registry.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/partitioned_execution.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/partitioned_loader.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/partitioned_planner.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/partitioned_planner_async.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/partitioned_planning_math.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/partitioned_row_materialization.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/partitioned_statements.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/partitioned_types.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_config.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_engine.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_manager.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_model_builder.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_model_module_injection.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_model_registry.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_model_registry_types.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_readonly.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_repository.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sql_resource.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/sqlalchemy_async.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/db/vector_search.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/enrichment/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/enrichment/async_enricher.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/enrichment/composite.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/enrichment/protocol.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/enrichment/specs.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/enrichment/transformers.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/field_map.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/arrow_kernels.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/arrow_kernels_comparison.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/arrow_kernels_compile.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/arrow_kernels_string.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/backend_ops.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/expressions.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/handler.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/parquet_compiler.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/utils.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/filters/value_parsing.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/_backend_strategies.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/_factory.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/_gateway_init.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/_payloads.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/_series_filters.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/arrow_adapters.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/build_context.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/chunking.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/configured_load.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/core.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/core_describe.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/core_load.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/datacube_strategy.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/frame_convert.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/frame_strategies.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/incremental.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/load_execution.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/load_request.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/loaders.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/normalization.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/parquet_strategy.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/planning.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/policies.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/post_process.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/requests.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/return_type.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/select_cache.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/semi_join.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/sql_describe.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/sql_guard.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/sql_partitioned_exec.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/sql_size_estimation.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/sql_strategy.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/gateway/sql_strategy_configured_async.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/helper.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/joins.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/config.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/discovery.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/file_info.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/filesystem.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/reader.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/reader_config.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/resource.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/parquet/schema_filters.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/pipelines/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/pipelines/base.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/pipelines/parquet_pipeline.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/pipelines/registry.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/pipelines/sinks.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/pipelines/sinks_parquet.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/pipelines/sinks_text.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/py.typed +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/schema.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/watermark/__init__.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/watermark/incremental.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data/watermark/store.py +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data.egg-info/SOURCES.txt +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data.egg-info/dependency_links.txt +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data.egg-info/requires.txt +0 -0
- {boti_data-1.3.3 → boti_data-1.3.4}/src/boti_data.egg-info/top_level.txt +0 -0
|
@@ -146,6 +146,30 @@ def _rm_recursive(fs: fsspec.AbstractFileSystem, path: str) -> None:
|
|
|
146
146
|
fs.rm(path)
|
|
147
147
|
|
|
148
148
|
|
|
149
|
+
def _rebase_staged_path(
|
|
150
|
+
fs: fsspec.AbstractFileSystem,
|
|
151
|
+
path: str,
|
|
152
|
+
staging_path: str,
|
|
153
|
+
target_root: str,
|
|
154
|
+
) -> str:
|
|
155
|
+
"""Rewrite *path* from the staging tree to the target tree.
|
|
156
|
+
|
|
157
|
+
``glob()``/``find()`` on most fsspec backends (S3, memory, ...) return
|
|
158
|
+
protocol-stripped paths (``bucket/key``) even when queried with a
|
|
159
|
+
scheme-prefixed directory (``s3://bucket/key``) -- but *staging_path*/
|
|
160
|
+
*target_root* here are whatever the caller originally passed in, which
|
|
161
|
+
for a ``Datasources``-resolved destination is scheme-prefixed. A naive
|
|
162
|
+
``path.replace(staging_path, target_root)`` then silently no-ops (no
|
|
163
|
+
substring match, string returned unchanged) instead of raising, so both
|
|
164
|
+
sides are normalized through ``_strip_protocol()`` first to guarantee the
|
|
165
|
+
replace actually matches regardless of which form *path* arrived in.
|
|
166
|
+
"""
|
|
167
|
+
normalized_path = fs._strip_protocol(path)
|
|
168
|
+
normalized_staging = fs._strip_protocol(staging_path)
|
|
169
|
+
normalized_target = fs._strip_protocol(target_root)
|
|
170
|
+
return normalized_path.replace(normalized_staging, normalized_target, 1)
|
|
171
|
+
|
|
172
|
+
|
|
149
173
|
def _move_staged_files(
|
|
150
174
|
fs: fsspec.AbstractFileSystem,
|
|
151
175
|
staged_files: Sequence[str],
|
|
@@ -165,7 +189,7 @@ def _move_staged_files(
|
|
|
165
189
|
so the phantom entry never gets a chance to appear.
|
|
166
190
|
"""
|
|
167
191
|
for staged_file in staged_files:
|
|
168
|
-
destination = staged_file
|
|
192
|
+
destination = _rebase_staged_path(fs, staged_file, staging_path, target_root)
|
|
169
193
|
parent = destination.rsplit("/", 1)[0]
|
|
170
194
|
if parent and parent != destination:
|
|
171
195
|
fs.makedirs(parent, exist_ok=True)
|
|
@@ -212,7 +236,7 @@ def _write_with_staging(
|
|
|
212
236
|
f"The newly written data is intact at {staging_path!r}."
|
|
213
237
|
) from exc
|
|
214
238
|
|
|
215
|
-
return [file
|
|
239
|
+
return [_rebase_staged_path(fs, file, staging_path, target_root) for file in files]
|
|
216
240
|
|
|
217
241
|
|
|
218
242
|
@dataclass(slots=True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|