boti-data 1.3.0__tar.gz → 1.3.1__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.0 → boti_data-1.3.1}/PKG-INFO +1 -1
- {boti_data-1.3.0 → boti_data-1.3.1}/pyproject.toml +1 -1
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_repository.py +13 -6
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/PKG-INFO +1 -1
- {boti_data-1.3.0 → boti_data-1.3.1}/README.md +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/setup.cfg +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/arrow_schema.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/connection_catalog.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/artifact.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/base.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/contract.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/resource.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/dataset/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/dataset/hybrid.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/dataset/hybrid_support.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/arrow_schema_mapper.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/engine_registry.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_execution.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_loader.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_planner.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_planner_async.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_planning_math.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_row_materialization.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_statements.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_types.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_config.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_engine.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_manager.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_model_builder.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_model_module_injection.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_model_registry.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_model_registry_types.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_readonly.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_resource.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sqlalchemy_async.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/vector_search.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/async_enricher.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/composite.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/protocol.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/specs.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/transformers.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/field_map.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/arrow_kernels.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/arrow_kernels_comparison.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/arrow_kernels_compile.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/arrow_kernels_string.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/backend_ops.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/expressions.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/handler.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/parquet_compiler.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/utils.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/value_parsing.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_backend_strategies.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_factory.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_gateway_init.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_payloads.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_series_filters.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/arrow_adapters.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/build_context.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/chunking.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/configured_load.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/core.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/core_load.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/datacube_strategy.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/frame_convert.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/frame_strategies.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/incremental.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/load_execution.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/load_request.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/loaders.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/normalization.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/parquet_strategy.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/planning.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/policies.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/post_process.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/requests.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/return_type.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/select_cache.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/semi_join.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_guard.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_partitioned_exec.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_size_estimation.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_strategy.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_strategy_configured_async.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/helper.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/joins.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/config.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/discovery.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/file_info.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/filesystem.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/reader.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/reader_config.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/resource.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/schema_filters.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/base.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/parquet_pipeline.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/registry.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/sinks.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/sinks_common.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/sinks_parquet.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/sinks_text.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/py.typed +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/schema.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/watermark/__init__.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/watermark/incremental.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/watermark/store.py +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/SOURCES.txt +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/dependency_links.txt +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/requires.txt +0 -0
- {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/top_level.txt +0 -0
|
@@ -26,6 +26,7 @@ from sqlalchemy.orm import Session
|
|
|
26
26
|
|
|
27
27
|
from boti_data.db.sql_config import SqlDatabaseConfig
|
|
28
28
|
from boti_data.db.sql_model_registry import get_global_registry
|
|
29
|
+
from boti_data.db.sql_readonly import ReadOnlyAsyncSession, ReadOnlySession
|
|
29
30
|
from boti_data.db.sql_resource import AsyncSqlDatabaseResource, SqlDatabaseResource
|
|
30
31
|
|
|
31
32
|
__all__ = ["AsyncSqlRepository", "AsyncSqlUnitOfWork", "SqlRepository", "SqlUnitOfWork"]
|
|
@@ -297,10 +298,13 @@ class SqlUnitOfWork:
|
|
|
297
298
|
|
|
298
299
|
def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
|
|
299
300
|
try:
|
|
300
|
-
if exc_type is None:
|
|
301
|
-
self._session.commit()
|
|
302
|
-
else:
|
|
301
|
+
if exc_type is not None:
|
|
303
302
|
self._session.rollback()
|
|
303
|
+
elif not isinstance(self._session, ReadOnlySession):
|
|
304
|
+
self._session.commit()
|
|
305
|
+
# else: read-only session, exited cleanly — a read never needs a
|
|
306
|
+
# commit, and ReadOnlySession.commit() always raises regardless
|
|
307
|
+
# of whether anything was actually written.
|
|
304
308
|
finally:
|
|
305
309
|
# Each handed-out repository has its own GC leak-warning
|
|
306
310
|
# finalizer (see boti.core.lifecycle) even though its own
|
|
@@ -340,10 +344,13 @@ class AsyncSqlUnitOfWork:
|
|
|
340
344
|
|
|
341
345
|
async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
|
|
342
346
|
try:
|
|
343
|
-
if exc_type is None:
|
|
344
|
-
await self._session.commit()
|
|
345
|
-
else:
|
|
347
|
+
if exc_type is not None:
|
|
346
348
|
await self._session.rollback()
|
|
349
|
+
elif not isinstance(self._session, ReadOnlyAsyncSession):
|
|
350
|
+
await self._session.commit()
|
|
351
|
+
# else: read-only session, exited cleanly — a read never needs a
|
|
352
|
+
# commit, and ReadOnlyAsyncSession.commit() always raises
|
|
353
|
+
# regardless of whether anything was actually written.
|
|
347
354
|
finally:
|
|
348
355
|
# See SqlUnitOfWork.__exit__'s comment: each handed-out repository
|
|
349
356
|
# has its own GC leak-warning finalizer even though its _acleanup()
|
|
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
|