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.
Files changed (118) hide show
  1. {boti_data-1.3.0 → boti_data-1.3.1}/PKG-INFO +1 -1
  2. {boti_data-1.3.0 → boti_data-1.3.1}/pyproject.toml +1 -1
  3. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_repository.py +13 -6
  4. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/PKG-INFO +1 -1
  5. {boti_data-1.3.0 → boti_data-1.3.1}/README.md +0 -0
  6. {boti_data-1.3.0 → boti_data-1.3.1}/setup.cfg +0 -0
  7. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/__init__.py +0 -0
  8. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/arrow_schema.py +0 -0
  9. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/connection_catalog.py +0 -0
  10. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/__init__.py +0 -0
  11. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/artifact.py +0 -0
  12. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/base.py +0 -0
  13. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/contract.py +0 -0
  14. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/datacube/resource.py +0 -0
  15. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/dataset/__init__.py +0 -0
  16. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/dataset/hybrid.py +0 -0
  17. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/dataset/hybrid_support.py +0 -0
  18. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/__init__.py +0 -0
  19. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/arrow_schema_mapper.py +0 -0
  20. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/engine_registry.py +0 -0
  21. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_execution.py +0 -0
  22. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_loader.py +0 -0
  23. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_planner.py +0 -0
  24. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_planner_async.py +0 -0
  25. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_planning_math.py +0 -0
  26. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_row_materialization.py +0 -0
  27. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_statements.py +0 -0
  28. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/partitioned_types.py +0 -0
  29. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_config.py +0 -0
  30. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_engine.py +0 -0
  31. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_manager.py +0 -0
  32. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_model_builder.py +0 -0
  33. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_model_module_injection.py +0 -0
  34. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_model_registry.py +0 -0
  35. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_model_registry_types.py +0 -0
  36. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_readonly.py +0 -0
  37. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sql_resource.py +0 -0
  38. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/sqlalchemy_async.py +0 -0
  39. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/db/vector_search.py +0 -0
  40. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/__init__.py +0 -0
  41. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/async_enricher.py +0 -0
  42. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/composite.py +0 -0
  43. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/protocol.py +0 -0
  44. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/specs.py +0 -0
  45. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/enrichment/transformers.py +0 -0
  46. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/field_map.py +0 -0
  47. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/__init__.py +0 -0
  48. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/arrow_kernels.py +0 -0
  49. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/arrow_kernels_comparison.py +0 -0
  50. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/arrow_kernels_compile.py +0 -0
  51. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/arrow_kernels_string.py +0 -0
  52. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/backend_ops.py +0 -0
  53. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/expressions.py +0 -0
  54. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/handler.py +0 -0
  55. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/parquet_compiler.py +0 -0
  56. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/utils.py +0 -0
  57. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/filters/value_parsing.py +0 -0
  58. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/__init__.py +0 -0
  59. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_backend_strategies.py +0 -0
  60. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_factory.py +0 -0
  61. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_gateway_init.py +0 -0
  62. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_payloads.py +0 -0
  63. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/_series_filters.py +0 -0
  64. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/arrow_adapters.py +0 -0
  65. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/build_context.py +0 -0
  66. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/chunking.py +0 -0
  67. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/configured_load.py +0 -0
  68. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/core.py +0 -0
  69. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/core_load.py +0 -0
  70. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/datacube_strategy.py +0 -0
  71. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/frame_convert.py +0 -0
  72. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/frame_strategies.py +0 -0
  73. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/incremental.py +0 -0
  74. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/load_execution.py +0 -0
  75. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/load_request.py +0 -0
  76. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/loaders.py +0 -0
  77. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/normalization.py +0 -0
  78. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/parquet_strategy.py +0 -0
  79. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/planning.py +0 -0
  80. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/policies.py +0 -0
  81. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/post_process.py +0 -0
  82. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/requests.py +0 -0
  83. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/return_type.py +0 -0
  84. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/select_cache.py +0 -0
  85. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/semi_join.py +0 -0
  86. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_guard.py +0 -0
  87. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_partitioned_exec.py +0 -0
  88. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_size_estimation.py +0 -0
  89. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_strategy.py +0 -0
  90. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/gateway/sql_strategy_configured_async.py +0 -0
  91. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/helper.py +0 -0
  92. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/joins.py +0 -0
  93. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/__init__.py +0 -0
  94. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/config.py +0 -0
  95. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/discovery.py +0 -0
  96. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/file_info.py +0 -0
  97. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/filesystem.py +0 -0
  98. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/reader.py +0 -0
  99. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/reader_config.py +0 -0
  100. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/resource.py +0 -0
  101. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/parquet/schema_filters.py +0 -0
  102. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/__init__.py +0 -0
  103. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/base.py +0 -0
  104. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/parquet_pipeline.py +0 -0
  105. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/registry.py +0 -0
  106. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/sinks.py +0 -0
  107. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/sinks_common.py +0 -0
  108. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/sinks_parquet.py +0 -0
  109. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/pipelines/sinks_text.py +0 -0
  110. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/py.typed +0 -0
  111. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/schema.py +0 -0
  112. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/watermark/__init__.py +0 -0
  113. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/watermark/incremental.py +0 -0
  114. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data/watermark/store.py +0 -0
  115. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/SOURCES.txt +0 -0
  116. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/dependency_links.txt +0 -0
  117. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/requires.txt +0 -0
  118. {boti_data-1.3.0 → boti_data-1.3.1}/src/boti_data.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boti-data
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: Data infrastructure for the Boti ecosystem
5
5
  Author: Luis Valverde
6
6
  Maintainer-email: Luis Valverde <lvalverdeb@gmail.com>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "boti-data"
3
- version = "1.3.0"
3
+ version = "1.3.1"
4
4
  description = "Data infrastructure for the Boti ecosystem"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -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()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boti-data
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: Data infrastructure for the Boti ecosystem
5
5
  Author: Luis Valverde
6
6
  Maintainer-email: Luis Valverde <lvalverdeb@gmail.com>
File without changes
File without changes