supertable 2.4.0__tar.gz → 2.5.3__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 (291) hide show
  1. supertable-2.5.3/MANIFEST.in +8 -0
  2. {supertable-2.4.0/supertable.egg-info → supertable-2.5.3}/PKG-INFO +41 -25
  3. {supertable-2.4.0 → supertable-2.5.3}/README.md +14 -7
  4. supertable-2.5.3/pyproject.toml +116 -0
  5. {supertable-2.4.0 → supertable-2.5.3}/requirements.txt +10 -6
  6. supertable-2.5.3/setup.py +6 -0
  7. supertable-2.5.3/supertable/__init__.py +127 -0
  8. {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/__init__.py +122 -8
  9. supertable-2.5.3/supertable/audit/admin.py +442 -0
  10. {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/chain.py +107 -14
  11. {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/consumers.py +42 -9
  12. supertable-2.5.3/supertable/audit/crypto.py +500 -0
  13. supertable-2.5.3/supertable/audit/diagnostics.py +14 -0
  14. supertable-2.5.3/supertable/audit/durable_journal.py +1716 -0
  15. {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/events.py +55 -7
  16. {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/export.py +27 -5
  17. supertable-2.5.3/supertable/audit/logger.py +1331 -0
  18. {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/middleware.py +71 -37
  19. supertable-2.5.3/supertable/audit/privileged.py +980 -0
  20. supertable-2.5.3/supertable/audit/privileged_outbox.py +3836 -0
  21. supertable-2.5.3/supertable/audit/privileged_worker.py +1769 -0
  22. supertable-2.5.3/supertable/audit/reader.py +805 -0
  23. {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/retention.py +113 -33
  24. supertable-2.5.3/supertable/audit/writer_parquet.py +1566 -0
  25. supertable-2.5.3/supertable/audit/writer_redis.py +582 -0
  26. {supertable-2.4.0 → supertable-2.5.3}/supertable/config/defaults.py +4 -2
  27. supertable-2.5.3/supertable/config/homedir.py +189 -0
  28. {supertable-2.4.0 → supertable-2.5.3}/supertable/config/settings.py +311 -26
  29. supertable-2.5.3/supertable/data_classes.py +566 -0
  30. supertable-2.5.3/supertable/data_reader.py +3597 -0
  31. supertable-2.5.3/supertable/data_writer.py +4332 -0
  32. supertable-2.5.3/supertable/demo/README.md +161 -0
  33. supertable-2.5.3/supertable/demo/medcenter/__init__.py +43 -0
  34. supertable-2.5.3/supertable/demo/medcenter/annotations.json +596 -0
  35. supertable-2.5.3/supertable/demo/medcenter/core.py +325 -0
  36. supertable-2.5.3/supertable/demo/medcenter/defaults.py +143 -0
  37. supertable-2.5.3/supertable/demo/medcenter/demo_queries.md +231 -0
  38. supertable-2.5.3/supertable/demo/medcenter/export_accounting.py +255 -0
  39. supertable-2.5.3/supertable/demo/medcenter/finance_sources.py +825 -0
  40. supertable-2.5.3/supertable/demo/medcenter/generate.py +186 -0
  41. supertable-2.5.3/supertable/demo/medcenter/helpers.py +37 -0
  42. supertable-2.5.3/supertable/demo/medcenter/load.py +104 -0
  43. supertable-2.5.3/supertable/demo/medcenter/quality.py +379 -0
  44. supertable-2.5.3/supertable/demo/medcenter/run.py +254 -0
  45. supertable-2.5.3/supertable/demo/medcenter/transform.py +355 -0
  46. supertable-2.5.3/supertable/demo/medcenter/validation.py +23 -0
  47. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s01_03_create_users.py +5 -2
  48. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/core.py +6 -4
  49. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/generate.py +2 -1
  50. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/load.py +2 -1
  51. supertable-2.5.3/supertable/demo/webshop/stream_demo.py +778 -0
  52. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/topup.py +7 -4
  53. supertable-2.5.3/supertable/engine/__init__.py +57 -0
  54. supertable-2.5.3/supertable/engine/adaptive_router.py +665 -0
  55. supertable-2.5.3/supertable/engine/data_estimator.py +3012 -0
  56. supertable-2.5.3/supertable/engine/duckdb_engine.py +2532 -0
  57. supertable-2.5.3/supertable/engine/engine_common.py +4789 -0
  58. {supertable-2.4.0 → supertable-2.5.3}/supertable/engine/engine_config.py +196 -53
  59. {supertable-2.4.0 → supertable-2.5.3}/supertable/engine/engine_enum.py +4 -2
  60. supertable-2.5.3/supertable/engine/executor.py +2988 -0
  61. supertable-2.5.3/supertable/engine/file_cache.py +1658 -0
  62. supertable-2.5.3/supertable/engine/island_resources.py +1260 -0
  63. supertable-2.5.3/supertable/engine/island_spill.py +2187 -0
  64. supertable-2.5.3/supertable/engine/islanddb.py +5461 -0
  65. supertable-2.5.3/supertable/engine/join_pruner.py +1183 -0
  66. supertable-2.5.3/supertable/engine/query_observations.py +1207 -0
  67. supertable-2.5.3/supertable/engine/range_cache.py +2215 -0
  68. supertable-2.5.3/supertable/engine/remote_paths.py +24 -0
  69. supertable-2.5.3/supertable/engine/spark_thrift.py +2778 -0
  70. supertable-2.5.3/supertable/engine/stable_http_relay.py +2294 -0
  71. {supertable-2.4.0 → supertable-2.5.3}/supertable/errors.py +31 -0
  72. supertable-2.5.3/supertable/locking/file_lock.py +617 -0
  73. supertable-2.5.3/supertable/locking/redis_lock.py +556 -0
  74. {supertable-2.4.0 → supertable-2.5.3}/supertable/logging.py +62 -15
  75. supertable-2.5.3/supertable/meta_reader.py +1107 -0
  76. supertable-2.5.3/supertable/mirroring/failure_safety.py +58 -0
  77. {supertable-2.4.0 → supertable-2.5.3}/supertable/mirroring/mirror_delta.py +333 -76
  78. supertable-2.5.3/supertable/mirroring/mirror_formats.py +589 -0
  79. {supertable-2.4.0 → supertable-2.5.3}/supertable/mirroring/mirror_iceberg.py +375 -69
  80. supertable-2.5.3/supertable/mirroring/mirror_parquet.py +261 -0
  81. {supertable-2.4.0 → supertable-2.5.3}/supertable/monitoring/__init__.py +33 -8
  82. {supertable-2.4.0 → supertable-2.5.3}/supertable/monitoring/partitions.py +433 -110
  83. supertable-2.5.3/supertable/monitoring_writer.py +1496 -0
  84. supertable-2.5.3/supertable/odata_continuation.py +528 -0
  85. supertable-2.5.3/supertable/plan_extender.py +286 -0
  86. supertable-2.5.3/supertable/processing.py +10292 -0
  87. {supertable-2.4.0 → supertable-2.5.3}/supertable/quality/__init__.py +16 -4
  88. supertable-2.5.3/supertable/quality/anomaly.py +967 -0
  89. supertable-2.5.3/supertable/quality/checker.py +1728 -0
  90. supertable-2.5.3/supertable/quality/config.py +1385 -0
  91. supertable-2.5.3/supertable/quality/cron.py +81 -0
  92. supertable-2.5.3/supertable/quality/execution.py +223 -0
  93. {supertable-2.4.0 → supertable-2.5.3}/supertable/quality/history.py +101 -17
  94. supertable-2.5.3/supertable/quality/scheduler.py +6340 -0
  95. supertable-2.5.3/supertable/quality/serialization.py +334 -0
  96. {supertable-2.4.0 → supertable-2.5.3}/supertable/query_plan_manager.py +45 -13
  97. supertable-2.5.3/supertable/rbac/access_control.py +664 -0
  98. supertable-2.5.3/supertable/rbac/filter_builder.py +255 -0
  99. supertable-2.5.3/supertable/rbac/role_manager.py +447 -0
  100. supertable-2.5.3/supertable/rbac/row_column_security.py +392 -0
  101. supertable-2.5.3/supertable/rbac/user_manager.py +534 -0
  102. supertable-2.5.3/supertable/recovery/__init__.py +21 -0
  103. supertable-2.5.3/supertable/recovery/redis_rebuild.py +2432 -0
  104. supertable-2.5.3/supertable/redis_catalog.py +18693 -0
  105. supertable-2.5.3/supertable/redis_connector.py +538 -0
  106. {supertable-2.4.0 → supertable-2.5.3}/supertable/redis_infra.py +78 -183
  107. {supertable-2.4.0 → supertable-2.5.3}/supertable/redis_keys.py +348 -16
  108. supertable-2.5.3/supertable/row_identity.py +261 -0
  109. supertable-2.5.3/supertable/simple_table.py +2508 -0
  110. supertable-2.5.3/supertable/staging_area.py +1856 -0
  111. {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/azure_storage.py +251 -35
  112. {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/gcp_storage.py +215 -36
  113. supertable-2.5.3/supertable/storage/local_storage.py +1999 -0
  114. {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/minio_storage.py +259 -26
  115. {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/s3_storage.py +273 -39
  116. {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/storage_factory.py +8 -1
  117. supertable-2.5.3/supertable/storage/storage_interface.py +694 -0
  118. supertable-2.5.3/supertable/super_pipe.py +440 -0
  119. supertable-2.5.3/supertable/super_table.py +1538 -0
  120. supertable-2.5.3/supertable/tombstone_manifest_v2.py +811 -0
  121. supertable-2.5.3/supertable/utils/diagnostic_redaction.py +214 -0
  122. {supertable-2.4.0 → supertable-2.5.3}/supertable/utils/helper.py +20 -5
  123. supertable-2.5.3/supertable/utils/snapshot.py +523 -0
  124. supertable-2.5.3/supertable/utils/spark_security.py +144 -0
  125. supertable-2.5.3/supertable/utils/sql_parser.py +2077 -0
  126. {supertable-2.4.0 → supertable-2.5.3/supertable.egg-info}/PKG-INFO +41 -25
  127. {supertable-2.4.0 → supertable-2.5.3}/supertable.egg-info/SOURCES.txt +46 -68
  128. supertable-2.5.3/supertable.egg-info/entry_points.txt +13 -0
  129. supertable-2.5.3/supertable.egg-info/requires.txt +43 -0
  130. supertable-2.4.0/pyproject.toml +0 -53
  131. supertable-2.4.0/setup.py +0 -65
  132. supertable-2.4.0/supertable/__init__.py +0 -66
  133. supertable-2.4.0/supertable/audit/admin.py +0 -206
  134. supertable-2.4.0/supertable/audit/crypto.py +0 -92
  135. supertable-2.4.0/supertable/audit/logger.py +0 -492
  136. supertable-2.4.0/supertable/audit/reader.py +0 -437
  137. supertable-2.4.0/supertable/audit/tests/test_chain.py +0 -234
  138. supertable-2.4.0/supertable/audit/tests/test_crypto.py +0 -132
  139. supertable-2.4.0/supertable/audit/tests/test_emit.py +0 -261
  140. supertable-2.4.0/supertable/audit/tests/test_events.py +0 -299
  141. supertable-2.4.0/supertable/audit/tests/test_retention.py +0 -308
  142. supertable-2.4.0/supertable/audit/writer_parquet.py +0 -347
  143. supertable-2.4.0/supertable/audit/writer_redis.py +0 -266
  144. supertable-2.4.0/supertable/config/homedir.py +0 -96
  145. supertable-2.4.0/supertable/config/tests/test_defaults.py +0 -150
  146. supertable-2.4.0/supertable/config/tests/test_homedir.py +0 -127
  147. supertable-2.4.0/supertable/config/tests/test_settings.py +0 -370
  148. supertable-2.4.0/supertable/data_classes.py +0 -90
  149. supertable-2.4.0/supertable/data_reader.py +0 -502
  150. supertable-2.4.0/supertable/data_writer.py +0 -1669
  151. supertable-2.4.0/supertable/engine/__init__.py +0 -16
  152. supertable-2.4.0/supertable/engine/data_estimator.py +0 -684
  153. supertable-2.4.0/supertable/engine/duckdb_lite.py +0 -291
  154. supertable-2.4.0/supertable/engine/duckdb_pro.py +0 -466
  155. supertable-2.4.0/supertable/engine/engine_common.py +0 -1539
  156. supertable-2.4.0/supertable/engine/executor.py +0 -254
  157. supertable-2.4.0/supertable/engine/spark_thrift.py +0 -1100
  158. supertable-2.4.0/supertable/engine/tests/__init__.py +0 -0
  159. supertable-2.4.0/supertable/engine/tests/conftest.py +0 -128
  160. supertable-2.4.0/supertable/engine/tests/test_engine.py +0 -2258
  161. supertable-2.4.0/supertable/engine/tests/test_engine_config.py +0 -81
  162. supertable-2.4.0/supertable/engine/tests/test_engine_routing.py +0 -192
  163. supertable-2.4.0/supertable/engine/tests/test_engine_spill.py +0 -183
  164. supertable-2.4.0/supertable/locking/benchmarks/__init__.py +0 -0
  165. supertable-2.4.0/supertable/locking/benchmarks/benchmark_locking.py +0 -168
  166. supertable-2.4.0/supertable/locking/benchmarks/measure_lock_speed.py +0 -208
  167. supertable-2.4.0/supertable/locking/benchmarks/measure_lock_time.py +0 -165
  168. supertable-2.4.0/supertable/locking/file_lock.py +0 -302
  169. supertable-2.4.0/supertable/locking/redis_lock.py +0 -249
  170. supertable-2.4.0/supertable/locking/tests/__init__.py +0 -0
  171. supertable-2.4.0/supertable/locking/tests/test_file_lock.py +0 -231
  172. supertable-2.4.0/supertable/locking/tests/test_redis_lock.py +0 -328
  173. supertable-2.4.0/supertable/meta_reader.py +0 -579
  174. supertable-2.4.0/supertable/mirroring/__init__.py +0 -0
  175. supertable-2.4.0/supertable/mirroring/mirror_formats.py +0 -118
  176. supertable-2.4.0/supertable/mirroring/mirror_parquet.py +0 -184
  177. supertable-2.4.0/supertable/monitoring_writer.py +0 -642
  178. supertable-2.4.0/supertable/plan_extender.py +0 -173
  179. supertable-2.4.0/supertable/processing.py +0 -2475
  180. supertable-2.4.0/supertable/quality/anomaly.py +0 -250
  181. supertable-2.4.0/supertable/quality/checker.py +0 -499
  182. supertable-2.4.0/supertable/quality/config.py +0 -401
  183. supertable-2.4.0/supertable/quality/scheduler.py +0 -757
  184. supertable-2.4.0/supertable/rbac/__init__.py +0 -0
  185. supertable-2.4.0/supertable/rbac/access_control.py +0 -340
  186. supertable-2.4.0/supertable/rbac/filter_builder.py +0 -108
  187. supertable-2.4.0/supertable/rbac/role_manager.py +0 -270
  188. supertable-2.4.0/supertable/rbac/row_column_security.py +0 -92
  189. supertable-2.4.0/supertable/rbac/tests/test_filter_builder.py +0 -385
  190. supertable-2.4.0/supertable/rbac/tests/test_rbac.py +0 -1903
  191. supertable-2.4.0/supertable/rbac/tests/test_rbac_per_table.py +0 -713
  192. supertable-2.4.0/supertable/rbac/user_manager.py +0 -217
  193. supertable-2.4.0/supertable/redis_catalog.py +0 -1773
  194. supertable-2.4.0/supertable/redis_connector.py +0 -278
  195. supertable-2.4.0/supertable/simple_table.py +0 -395
  196. supertable-2.4.0/supertable/staging_area.py +0 -291
  197. supertable-2.4.0/supertable/storage/local_storage.py +0 -241
  198. supertable-2.4.0/supertable/storage/storage_interface.py +0 -194
  199. supertable-2.4.0/supertable/storage/tests/test_storage.py +0 -2359
  200. supertable-2.4.0/supertable/super_pipe.py +0 -149
  201. supertable-2.4.0/supertable/super_table.py +0 -136
  202. supertable-2.4.0/supertable/tests/__init__.py +0 -0
  203. supertable-2.4.0/supertable/tests/test_align_to_schema_fix.py +0 -475
  204. supertable-2.4.0/supertable/tests/test_compaction_selection.py +0 -335
  205. supertable-2.4.0/supertable/tests/test_create_if_missing.py +0 -267
  206. supertable-2.4.0/supertable/tests/test_data_estimator_projection.py +0 -201
  207. supertable-2.4.0/supertable/tests/test_data_reader.py +0 -2054
  208. supertable-2.4.0/supertable/tests/test_data_reader_preflight.py +0 -286
  209. supertable-2.4.0/supertable/tests/test_data_writer.py +0 -2100
  210. supertable-2.4.0/supertable/tests/test_data_writer_compact.py +0 -1163
  211. supertable-2.4.0/supertable/tests/test_data_writer_comprehensive.py +0 -1053
  212. supertable-2.4.0/supertable/tests/test_errors.py +0 -81
  213. supertable-2.4.0/supertable/tests/test_meta_reader.py +0 -1200
  214. supertable-2.4.0/supertable/tests/test_metadata_partitioning.py +0 -221
  215. supertable-2.4.0/supertable/tests/test_monitoring_partitions.py +0 -838
  216. supertable-2.4.0/supertable/tests/test_monitoring_sink_guard.py +0 -167
  217. supertable-2.4.0/supertable/tests/test_newer_than.py +0 -345
  218. supertable-2.4.0/supertable/tests/test_parquet_statistics.py +0 -86
  219. supertable-2.4.0/supertable/tests/test_processing.py +0 -853
  220. supertable-2.4.0/supertable/tests/test_processing_compact_resources.py +0 -668
  221. supertable-2.4.0/supertable/tests/test_processing_stats.py +0 -465
  222. supertable-2.4.0/supertable/tests/test_quality_checker.py +0 -120
  223. supertable-2.4.0/supertable/tests/test_query_sql.py +0 -267
  224. supertable-2.4.0/supertable/tests/test_read_pruning_differential.py +0 -457
  225. supertable-2.4.0/supertable/tests/test_read_pruning_integration.py +0 -352
  226. supertable-2.4.0/supertable/tests/test_redis_key_prefix.py +0 -525
  227. supertable-2.4.0/supertable/tests/test_resolve_overwrite_writes.py +0 -256
  228. supertable-2.4.0/supertable/tests/test_simple_table.py +0 -971
  229. supertable-2.4.0/supertable/tests/test_spark_file_resolution.py +0 -148
  230. supertable-2.4.0/supertable/tests/test_stats_cache.py +0 -242
  231. supertable-2.4.0/supertable/tests/test_stats_pruning.py +0 -557
  232. supertable-2.4.0/supertable/tests/test_stats_schema_snapshot.py +0 -122
  233. supertable-2.4.0/supertable/tests/test_super_table.py +0 -373
  234. supertable-2.4.0/supertable/tests/test_supertable_all.py +0 -1777
  235. supertable-2.4.0/supertable/tests/test_system_query.py +0 -216
  236. supertable-2.4.0/supertable/tests/test_tombstone_cache.py +0 -162
  237. supertable-2.4.0/supertable/tests/test_write_probe_gate.py +0 -130
  238. supertable-2.4.0/supertable/utils/sql_parser.py +0 -829
  239. supertable-2.4.0/supertable/utils/tests/test_hourly_partition.py +0 -63
  240. supertable-2.4.0/supertable/utils/tests/test_sql_parser_columns.py +0 -4456
  241. supertable-2.4.0/supertable.egg-info/entry_points.txt +0 -5
  242. supertable-2.4.0/supertable.egg-info/requires.txt +0 -30
  243. {supertable-2.4.0 → supertable-2.5.3}/LICENSE +0 -0
  244. {supertable-2.4.0 → supertable-2.5.3}/setup.cfg +0 -0
  245. {supertable-2.4.0/supertable/audit/tests → supertable-2.5.3/supertable/config}/__init__.py +0 -0
  246. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/__init__.py +0 -0
  247. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/__init__.py +0 -0
  248. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/__main__.py +0 -0
  249. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/check_filter_builder.py +0 -0
  250. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/controller.py +0 -0
  251. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/data_writer_helpers.py +0 -0
  252. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/defaults.py +0 -0
  253. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/dummy_data.py +0 -0
  254. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/read_parquet_header.py +0 -0
  255. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s01_01_01_create_super_table.py +0 -0
  256. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s01_01_02_enable_mirroring_formats.py +0 -0
  257. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s01_02_create_roles.py +0 -0
  258. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_01_write_dummy_data.py +0 -0
  259. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_02_write_single_data.py +0 -0
  260. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_03_01_write_staging.py +0 -0
  261. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_03_02_create_pipe.py +0 -0
  262. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_04_01_write_monitoring_simple.py +0 -0
  263. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_04_02_write_monitoring_parallel.py +0 -0
  264. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_05_write_tombstone.py +0 -0
  265. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_01_read_data_error.py +0 -0
  266. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_02_01_read_super_data_ok.py +0 -0
  267. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_02_02_read_table_data_ok.py +0 -0
  268. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_03_read_meta.py +0 -0
  269. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_04_read_staging.py +0 -0
  270. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_06_01_read_roles.py +0 -0
  271. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_06_02_read_user.py +0 -0
  272. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_07_01_estimate_read.py +0 -0
  273. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_07_02_estimate_files.py +0 -0
  274. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_08_read_snapshot_history.py +0 -0
  275. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s04_01_03_delete_pipe.py +0 -0
  276. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s05_01_delete_table.py +0 -0
  277. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s05_02_delete_super_table.py +0 -0
  278. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/__init__.py +0 -0
  279. {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/defaults.py +0 -0
  280. {supertable-2.4.0 → supertable-2.5.3}/supertable/engine/plan_stats.py +0 -0
  281. {supertable-2.4.0 → supertable-2.5.3}/supertable/locking/__init__.py +0 -0
  282. {supertable-2.4.0/supertable/config → supertable-2.5.3/supertable/mirroring}/__init__.py +0 -0
  283. {supertable-2.4.0/supertable/config/tests → supertable-2.5.3/supertable/rbac}/__init__.py +0 -0
  284. {supertable-2.4.0 → supertable-2.5.3}/supertable/rbac/permissions.py +0 -0
  285. {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/__init__.py +0 -0
  286. {supertable-2.4.0 → supertable-2.5.3}/supertable/system_query.py +0 -0
  287. {supertable-2.4.0 → supertable-2.5.3}/supertable/utils/__init__.py +0 -0
  288. {supertable-2.4.0 → supertable-2.5.3}/supertable/utils/profiler.py +0 -0
  289. {supertable-2.4.0 → supertable-2.5.3}/supertable/utils/timer.py +0 -0
  290. {supertable-2.4.0 → supertable-2.5.3}/supertable.egg-info/dependency_links.txt +0 -0
  291. {supertable-2.4.0 → supertable-2.5.3}/supertable.egg-info/top_level.txt +0 -0
@@ -0,0 +1,8 @@
1
+ include LICENSE
2
+ include README.md
3
+ include requirements.txt
4
+
5
+ # The published source archive is an installable runtime artifact. Repository
6
+ # release-gate tests depend on workflow and baseline files that are deliberately
7
+ # not shipped, so do not include a misleading, incomplete top-level test tree.
8
+ prune tests
@@ -1,51 +1,60 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supertable
3
- Version: 2.4.0
3
+ Version: 2.5.3
4
4
  Summary: SuperTable — versioned data lake library for SQL analytics on Parquet + Redis.
5
- Author: Levente Kupas
6
5
  Author-email: Levente Kupas <lkupas@kladnasoft.com>
7
- License: Super Table Public Use License (STPUL) v1.0
6
+ License-Expression: LicenseRef-FSL-1.1-ALv2
8
7
  Project-URL: Homepage, https://github.com/kladnasoft/supertable
9
8
  Classifier: Programming Language :: Python :: 3
10
9
  Classifier: Programming Language :: Python :: 3 :: Only
11
- Classifier: License :: Other/Proprietary License
12
- Classifier: Operating System :: OS Independent
10
+ Classifier: Operating System :: POSIX
13
11
  Requires-Python: >=3.10
14
12
  Description-Content-Type: text/markdown
15
13
  License-File: LICENSE
16
14
  Requires-Dist: numpy<3.0,>=1.26
17
15
  Requires-Dist: pandas<2.3,>=2.1
18
- Requires-Dist: pyarrow<19,>=16
16
+ Requires-Dist: pyarrow<24,>=23.0.1
19
17
  Requires-Dist: pytz>=2023.3
20
18
  Requires-Dist: tzdata>=2023.3
21
- Requires-Dist: duckdb<2.0,>=1.1
22
- Requires-Dist: polars<2.0,>=1.6
23
- Requires-Dist: sqlglot<27,>=26
19
+ Requires-Dist: apscheduler<4.0,>=3.11.3
20
+ Requires-Dist: duckdb<2.0,>=1.5.1
21
+ Requires-Dist: polars<2.0,>=1.36.1
22
+ Requires-Dist: sqlglot<27,>=26.33
24
23
  Requires-Dist: colorlog<7.0,>=6.9
25
- Requires-Dist: python-dotenv<2.0,>=1.0
26
- Requires-Dist: setuptools>=68
24
+ Requires-Dist: tqdm<5.0,>=4.66.3
25
+ Requires-Dist: python-dotenv<2.0,>=1.2.2
26
+ Requires-Dist: starlette<2.0,>=1.3.1
27
+ Requires-Dist: httpx<1.0,>=0.27.1
28
+ Requires-Dist: cryptography<51,>=50.0.0
27
29
  Requires-Dist: redis<6.0,>=5.0
28
30
  Provides-Extra: s3
29
- Requires-Dist: boto3<2.0,>=1.34; extra == "s3"
31
+ Requires-Dist: boto3<2.0,>=1.35.2; extra == "s3"
30
32
  Provides-Extra: minio
31
33
  Requires-Dist: minio<8.0,>=7.2; extra == "minio"
32
34
  Provides-Extra: azure
33
- Requires-Dist: azure-storage-blob>=12.26.0; extra == "azure"
35
+ Requires-Dist: azure-storage-blob<13.0,>=12.26.0; extra == "azure"
36
+ Requires-Dist: azure-identity<2.0,>=1.17; extra == "azure"
34
37
  Provides-Extra: gcp
35
- Requires-Dist: google-cloud-storage>=3.1.0; extra == "gcp"
38
+ Requires-Dist: google-cloud-storage<4.0,>=3.1.0; extra == "gcp"
36
39
  Provides-Extra: all-cloud
37
- Requires-Dist: supertable[azure,gcp,minio,s3]; extra == "all-cloud"
40
+ Requires-Dist: boto3<2.0,>=1.35.2; extra == "all-cloud"
41
+ Requires-Dist: minio<8.0,>=7.2; extra == "all-cloud"
42
+ Requires-Dist: azure-storage-blob<13.0,>=12.26.0; extra == "all-cloud"
43
+ Requires-Dist: azure-identity<2.0,>=1.17; extra == "all-cloud"
44
+ Requires-Dist: google-cloud-storage<4.0,>=3.1.0; extra == "all-cloud"
38
45
  Provides-Extra: all
39
- Requires-Dist: supertable[all-cloud]; extra == "all"
40
- Dynamic: author
46
+ Requires-Dist: boto3<2.0,>=1.35.2; extra == "all"
47
+ Requires-Dist: minio<8.0,>=7.2; extra == "all"
48
+ Requires-Dist: azure-storage-blob<13.0,>=12.26.0; extra == "all"
49
+ Requires-Dist: azure-identity<2.0,>=1.17; extra == "all"
50
+ Requires-Dist: google-cloud-storage<4.0,>=3.1.0; extra == "all"
41
51
  Dynamic: license-file
42
- Dynamic: requires-python
43
52
 
44
53
  # SuperTable
45
54
 
46
55
  ![Python](https://img.shields.io/badge/python-3.10%2B-blue)
47
56
  ![License](https://img.shields.io/badge/license-FSL--1.1--ALv2-orange)
48
- ![Version](https://img.shields.io/badge/version-2.0.0-brightgreen)
57
+ ![Version](https://img.shields.io/badge/version-2.5.1-brightgreen)
49
58
 
50
59
  **SuperTable — versioned data lake library for SQL analytics.**
51
60
 
@@ -66,8 +75,9 @@ pip install "supertable[gcp]" # Google Cloud Storage
66
75
  pip install "supertable[all]" # everything
67
76
  ```
68
77
 
69
- Requirements: Python 3.10+, a reachable Redis 6+, and a configured storage
70
- backend (or local disk for development). See
78
+ Requirements: Python 3.10+, a POSIX host (the durable monitoring spool uses
79
+ `fcntl` locking), a reachable Redis 6+, and a configured storage backend (or
80
+ local disk for development). See
71
81
  [docs/02_configuration.md](docs/02_configuration.md) for environment
72
82
  variables.
73
83
 
@@ -140,7 +150,7 @@ df, status, message = dr.execute(role_name="superadmin", engine=engine.AUTO)
140
150
 
141
151
  ## Demos
142
152
 
143
- The package ships two runnable demos under `supertable.demo`:
153
+ The package ships three runnable demos under `supertable.demo`:
144
154
 
145
155
  ```bash
146
156
  # Numbered tutorial — runs the full lifecycle end-to-end.
@@ -152,9 +162,13 @@ python -m supertable.demo.quickstart
152
162
  supertable-demo-webshop-generate # build ~1.2M rows on disk
153
163
  supertable-demo-webshop-load # load them into SuperTable
154
164
  supertable-demo-webshop-topup # continuous incremental refresh
165
+
166
+ # Medical-center finance demo (raw → staging → mart, fully synthetic).
167
+ supertable-demo-medcenter-run # generate → load → transform → tests →
168
+ # accounting export → idempotency proof
155
169
  ```
156
170
 
157
- Both demos are also runnable as module steps. Examples:
171
+ All demos are also runnable as module steps. Examples:
158
172
 
159
173
  ```bash
160
174
  python -m supertable.demo.quickstart.s01_01_01_create_super_table
@@ -171,7 +185,7 @@ script index.
171
185
 
172
186
  - **Versioned tables** with snapshot isolation, upsert (`overwrite_columns`),
173
187
  soft deletes (`delete_only=True`), schema evolution, and staleness filtering
174
- - **DuckDB query engine** — embedded, zero-copy reads from object storage
188
+ - **DuckDB and IslandDB query engines** — embedded reads with adaptive selection
175
189
  - **Spark SQL via Thrift** — for queries exceeding DuckDB memory limits
176
190
  - **RBAC** — role types (superadmin, admin, writer, reader, meta) with
177
191
  row-level and column-level security enforced through view chains
@@ -202,13 +216,15 @@ See [docs/00_index.md](docs/00_index.md) for the full table of contents.
202
216
  | 06 | [Data Writer](docs/06_data_writer.md) | Write pipeline, locking, dedup, tombstones |
203
217
  | 07 | [Ingestion & Pipes](docs/07_ingestion.md) | Staging areas, automated ingestion pipes |
204
218
  | 08 | [Distributed Locking](docs/08_locking.md) | Redis locks, file locks, deadlock prevention |
205
- | 09 | [Query Engine](docs/09_query_engine.md) | DuckDB Lite/Pro, Spark SQL, auto selection |
219
+ | 09 | [Query Engine](docs/09_query_engine.md) | DuckDB, IslandDB, Spark SQL, auto selection |
206
220
  | 10 | [Data Reader](docs/10_data_reader.md) | Read facade, snapshot history, view chain |
207
221
  | 11 | [RBAC & Access Control](docs/11_rbac.md) | Roles, users, row/column security |
208
222
  | 12 | [Audit Logging](docs/12_audit.md) | SHA-256 hash chain, DORA/SOC 2, SIEM |
209
223
  | 13 | [Table Mirroring](docs/13_mirroring.md) | Delta Lake, Iceberg, Parquet export |
210
224
  | 14 | [Monitoring](docs/14_monitoring.md) | Metrics writer, structured logging |
211
225
  | 15 | [Python SDK](docs/15_python_sdk.md) | Core classes, demos, example index |
226
+ | 16 | [Redis Key Layout](docs/16_redis_layout.md) | Canonical key namespaces and validation rules |
227
+ | 17 | [Privileged Audit Worker](docs/17_privileged_audit_worker.md) | Supervised deployment, durability preflight, safe trimming, probes, failure policy |
212
228
 
213
229
  ---
214
230
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  ![Python](https://img.shields.io/badge/python-3.10%2B-blue)
4
4
  ![License](https://img.shields.io/badge/license-FSL--1.1--ALv2-orange)
5
- ![Version](https://img.shields.io/badge/version-2.0.0-brightgreen)
5
+ ![Version](https://img.shields.io/badge/version-2.5.1-brightgreen)
6
6
 
7
7
  **SuperTable — versioned data lake library for SQL analytics.**
8
8
 
@@ -23,8 +23,9 @@ pip install "supertable[gcp]" # Google Cloud Storage
23
23
  pip install "supertable[all]" # everything
24
24
  ```
25
25
 
26
- Requirements: Python 3.10+, a reachable Redis 6+, and a configured storage
27
- backend (or local disk for development). See
26
+ Requirements: Python 3.10+, a POSIX host (the durable monitoring spool uses
27
+ `fcntl` locking), a reachable Redis 6+, and a configured storage backend (or
28
+ local disk for development). See
28
29
  [docs/02_configuration.md](docs/02_configuration.md) for environment
29
30
  variables.
30
31
 
@@ -97,7 +98,7 @@ df, status, message = dr.execute(role_name="superadmin", engine=engine.AUTO)
97
98
 
98
99
  ## Demos
99
100
 
100
- The package ships two runnable demos under `supertable.demo`:
101
+ The package ships three runnable demos under `supertable.demo`:
101
102
 
102
103
  ```bash
103
104
  # Numbered tutorial — runs the full lifecycle end-to-end.
@@ -109,9 +110,13 @@ python -m supertable.demo.quickstart
109
110
  supertable-demo-webshop-generate # build ~1.2M rows on disk
110
111
  supertable-demo-webshop-load # load them into SuperTable
111
112
  supertable-demo-webshop-topup # continuous incremental refresh
113
+
114
+ # Medical-center finance demo (raw → staging → mart, fully synthetic).
115
+ supertable-demo-medcenter-run # generate → load → transform → tests →
116
+ # accounting export → idempotency proof
112
117
  ```
113
118
 
114
- Both demos are also runnable as module steps. Examples:
119
+ All demos are also runnable as module steps. Examples:
115
120
 
116
121
  ```bash
117
122
  python -m supertable.demo.quickstart.s01_01_01_create_super_table
@@ -128,7 +133,7 @@ script index.
128
133
 
129
134
  - **Versioned tables** with snapshot isolation, upsert (`overwrite_columns`),
130
135
  soft deletes (`delete_only=True`), schema evolution, and staleness filtering
131
- - **DuckDB query engine** — embedded, zero-copy reads from object storage
136
+ - **DuckDB and IslandDB query engines** — embedded reads with adaptive selection
132
137
  - **Spark SQL via Thrift** — for queries exceeding DuckDB memory limits
133
138
  - **RBAC** — role types (superadmin, admin, writer, reader, meta) with
134
139
  row-level and column-level security enforced through view chains
@@ -159,13 +164,15 @@ See [docs/00_index.md](docs/00_index.md) for the full table of contents.
159
164
  | 06 | [Data Writer](docs/06_data_writer.md) | Write pipeline, locking, dedup, tombstones |
160
165
  | 07 | [Ingestion & Pipes](docs/07_ingestion.md) | Staging areas, automated ingestion pipes |
161
166
  | 08 | [Distributed Locking](docs/08_locking.md) | Redis locks, file locks, deadlock prevention |
162
- | 09 | [Query Engine](docs/09_query_engine.md) | DuckDB Lite/Pro, Spark SQL, auto selection |
167
+ | 09 | [Query Engine](docs/09_query_engine.md) | DuckDB, IslandDB, Spark SQL, auto selection |
163
168
  | 10 | [Data Reader](docs/10_data_reader.md) | Read facade, snapshot history, view chain |
164
169
  | 11 | [RBAC & Access Control](docs/11_rbac.md) | Roles, users, row/column security |
165
170
  | 12 | [Audit Logging](docs/12_audit.md) | SHA-256 hash chain, DORA/SOC 2, SIEM |
166
171
  | 13 | [Table Mirroring](docs/13_mirroring.md) | Delta Lake, Iceberg, Parquet export |
167
172
  | 14 | [Monitoring](docs/14_monitoring.md) | Metrics writer, structured logging |
168
173
  | 15 | [Python SDK](docs/15_python_sdk.md) | Core classes, demos, example index |
174
+ | 16 | [Redis Key Layout](docs/16_redis_layout.md) | Canonical key namespaces and validation rules |
175
+ | 17 | [Privileged Audit Worker](docs/17_privileged_audit_worker.md) | Supervised deployment, durability preflight, safe trimming, probes, failure policy |
169
176
 
170
177
  ---
171
178
 
@@ -0,0 +1,116 @@
1
+ [build-system]
2
+ requires = ["setuptools>=83.0.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "supertable"
7
+ version = "2.5.3"
8
+ description = "SuperTable — versioned data lake library for SQL analytics on Parquet + Redis."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "LicenseRef-FSL-1.1-ALv2"
12
+ license-files = ["LICENSE"]
13
+ authors = [{ name = "Levente Kupas", email = "lkupas@kladnasoft.com" }]
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3 :: Only",
17
+ "Operating System :: POSIX"
18
+ ]
19
+
20
+ # Read runtime deps from requirements.txt to keep a single source of truth
21
+ dynamic = ["dependencies"]
22
+
23
+ [tool.setuptools.dynamic]
24
+ dependencies = { file = ["requirements.txt"] }
25
+
26
+ [project.optional-dependencies]
27
+ # Storage backends (pick what you deploy on)
28
+ # botocore 1.35.2 is the first release whose PutObject model exposes
29
+ # IfNoneMatch, required by immutable conditional publication.
30
+ s3 = ["boto3>=1.35.2,<2.0"]
31
+ minio = ["minio>=7.2,<8.0"]
32
+ azure = [
33
+ "azure-storage-blob>=12.26.0,<13.0",
34
+ "azure-identity>=1.17,<2.0",
35
+ ]
36
+ gcp = ["google-cloud-storage>=3.1.0,<4.0"]
37
+ all-cloud = [
38
+ "boto3>=1.35.2,<2.0",
39
+ "minio>=7.2,<8.0",
40
+ "azure-storage-blob>=12.26.0,<13.0",
41
+ "azure-identity>=1.17,<2.0",
42
+ "google-cloud-storage>=3.1.0,<4.0",
43
+ ]
44
+
45
+ # Everything
46
+ all = [
47
+ "boto3>=1.35.2,<2.0",
48
+ "minio>=7.2,<8.0",
49
+ "azure-storage-blob>=12.26.0,<13.0",
50
+ "azure-identity>=1.17,<2.0",
51
+ "google-cloud-storage>=3.1.0,<4.0",
52
+ ]
53
+
54
+ [project.urls]
55
+ Homepage = "https://github.com/kladnasoft/supertable"
56
+
57
+ [project.scripts]
58
+ supertable-privileged-audit-worker = "supertable.audit.privileged_worker:main"
59
+ supertable-redis-recovery = "supertable.recovery.redis_rebuild:main"
60
+ supertable-demo-quickstart = "supertable.demo.quickstart.controller:main"
61
+ supertable-demo-webshop-generate = "supertable.demo.webshop.generate:main"
62
+ supertable-demo-webshop-load = "supertable.demo.webshop.load:main"
63
+ supertable-demo-webshop-topup = "supertable.demo.webshop.topup:main"
64
+ supertable-demo-medcenter-generate = "supertable.demo.medcenter.generate:main"
65
+ supertable-demo-medcenter-load = "supertable.demo.medcenter.load:main"
66
+ supertable-demo-medcenter-transform = "supertable.demo.medcenter.transform:main"
67
+ supertable-demo-medcenter-quality = "supertable.demo.medcenter.quality:main"
68
+ supertable-demo-medcenter-export = "supertable.demo.medcenter.export_accounting:main"
69
+ supertable-demo-medcenter-run = "supertable.demo.medcenter.run:main"
70
+
71
+ [tool.setuptools]
72
+ include-package-data = true
73
+
74
+ [tool.setuptools.package-data]
75
+ "supertable.demo" = ["README.md"]
76
+ "supertable.demo.medcenter" = ["annotations.json", "demo_queries.md"]
77
+
78
+ [tool.setuptools.packages.find]
79
+ include = ["supertable", "supertable.*"]
80
+ exclude = [
81
+ "supertable.tests", "supertable.tests.*",
82
+ "supertable.*.tests", "supertable.*.tests.*",
83
+ "supertable.benchmarks", "supertable.benchmarks.*",
84
+ "supertable.*.benchmarks", "supertable.*.benchmarks.*",
85
+ ]
86
+
87
+ [tool.pytest.ini_options]
88
+ asyncio_default_fixture_loop_scope = "function"
89
+ markers = [
90
+ "integration: requires an explicitly configured disposable external service",
91
+ ]
92
+
93
+ [tool.ruff.lint]
94
+ # Start with correctness rules that can never be waived by formatting taste:
95
+ # syntax errors, invalid control flow, and undefined names. Broader rule groups
96
+ # can be enabled incrementally without weakening this release-blocking baseline.
97
+ select = ["E9", "F63", "F7", "F82"]
98
+
99
+ [tool.mypy]
100
+ python_version = "3.10"
101
+ files = ["supertable"]
102
+ # Tests and benchmarks have their own runtime gates. Every shipped production
103
+ # module (including demos/console entry points) remains inside the mypy target.
104
+ exclude = [
105
+ "^supertable/(?:[^/]+/)*(?:tests|benchmarks)/",
106
+ ]
107
+ follow_imports = "skip"
108
+ ignore_missing_imports = true
109
+ # Keep the debt baseline reproducible across the minimum/latest dependency
110
+ # jobs; runtime compatibility is exercised by pytest, while this gate checks
111
+ # SuperTable's own modules against one pinned mypy/typeshed version.
112
+ no_site_packages = true
113
+ check_untyped_defs = true
114
+ incremental = false
115
+ show_error_codes = true
116
+ warn_unused_ignores = true
@@ -1,17 +1,21 @@
1
1
  # -------- Core data stack --------
2
2
  numpy>=1.26,<3.0
3
3
  pandas>=2.1,<2.3
4
- pyarrow>=16,<19
4
+ pyarrow>=23.0.1,<24
5
5
  pytz>=2023.3
6
6
  tzdata>=2023.3
7
+ apscheduler>=3.11.3,<4.0
7
8
 
8
9
  # -------- Engine / query / utils --------
9
- duckdb>=1.1,<2.0
10
- polars>=1.6,<2.0
11
- sqlglot>=26,<27
10
+ duckdb>=1.5.1,<2.0
11
+ polars>=1.36.1,<2.0
12
+ sqlglot>=26.33,<27
12
13
  colorlog>=6.9,<7.0
13
- python-dotenv>=1.0,<2.0
14
- setuptools>=68
14
+ tqdm>=4.66.3,<5.0
15
+ python-dotenv>=1.2.2,<2.0
16
+ starlette>=1.3.1,<2.0
17
+ httpx>=0.27.1,<1.0
18
+ cryptography>=50.0.0,<51
15
19
 
16
20
  # -------- Catalog / locking --------
17
21
  redis>=5.0,<6.0
@@ -0,0 +1,6 @@
1
+ """Compatibility shim for legacy tooling; metadata lives in pyproject.toml."""
2
+
3
+ from setuptools import setup
4
+
5
+
6
+ setup()
@@ -0,0 +1,127 @@
1
+ """SuperTable — versioned data lake library for SQL analytics.
2
+
3
+ SuperTable stores structured data as versioned Parquet snapshots on object
4
+ storage (S3, MinIO, Azure Blob, GCP Cloud Storage, or local disk), keeps
5
+ metadata and locks in Redis, and queries everything through DuckDB or
6
+ IslandDB, with Spark SQL for fleet-scale workloads.
7
+
8
+ Quick reference
9
+ ---------------
10
+
11
+ >>> from supertable import SuperTable, DataWriter, DataReader, engine
12
+ >>> st = SuperTable(super_name="example", organization="my-org")
13
+ >>> dw = DataWriter(super_name="example", organization="my-org")
14
+ >>> _, _, inserted, deleted = dw.write(
15
+ ... role_name="superadmin",
16
+ ... simple_name="facts",
17
+ ... data=arrow_table,
18
+ ... overwrite_columns=["day"],
19
+ ... )
20
+ >>> dr = DataReader(super_name="example", organization="my-org",
21
+ ... query="SELECT count(*) FROM facts")
22
+ >>> df, status, message = dr.execute(role_name="superadmin", engine=engine.AUTO)
23
+
24
+ See the ``supertable.demo`` package for runnable end-to-end demos and the
25
+ project documentation for the full API surface.
26
+ """
27
+
28
+ __version__ = "2.5.3"
29
+
30
+ from importlib import import_module
31
+ from typing import TYPE_CHECKING, Any
32
+
33
+ # This public alias predates the ``supertable.engine`` implementation package.
34
+ # Importing the tiny enum after the now-lazy package is initialized ensures
35
+ # later imports of engine submodules cannot replace ``supertable.engine`` with
36
+ # the package object and break ``engine.AUTO``.
37
+ from supertable.engine.engine_enum import Engine as engine
38
+
39
+
40
+ # Importing the package is intentionally cheap and side-effect-free. The
41
+ # public convenience exports are loaded on first use (PEP 562) so importing
42
+ # ``supertable`` does not import PyArrow/Polars, connect to Redis, probe the
43
+ # filesystem, or initialise an application home.
44
+ _LAZY_EXPORTS = {
45
+ "SuperTable": ("supertable.super_table", "SuperTable"),
46
+ "SimpleTable": ("supertable.simple_table", "SimpleTable"),
47
+ "DataWriter": ("supertable.data_writer", "DataWriter"),
48
+ "DataReader": ("supertable.data_reader", "DataReader"),
49
+ "query_sql_stream": ("supertable.data_reader", "query_sql_stream"),
50
+ "query_odata_sql_stream": (
51
+ "supertable.data_reader", "query_odata_sql_stream",
52
+ ),
53
+ "query_sql_policy_fingerprint": (
54
+ "supertable.data_reader", "query_sql_policy_fingerprint",
55
+ ),
56
+ "MetaReader": ("supertable.meta_reader", "MetaReader"),
57
+ "list_supers": ("supertable.meta_reader", "list_supers"),
58
+ "list_tables": ("supertable.meta_reader", "list_tables"),
59
+ "Staging": ("supertable.staging_area", "Staging"),
60
+ "SuperPipe": ("supertable.super_pipe", "SuperPipe"),
61
+ "RedisCatalog": ("supertable.redis_catalog", "RedisCatalog"),
62
+ "RoleManager": ("supertable.rbac.role_manager", "RoleManager"),
63
+ "UserManager": ("supertable.rbac.user_manager", "UserManager"),
64
+ "SupertableLookupError": ("supertable.errors", "SupertableLookupError"),
65
+ "SuperTableNotFoundError": ("supertable.errors", "SuperTableNotFoundError"),
66
+ "TableNotFoundError": ("supertable.errors", "TableNotFoundError"),
67
+ }
68
+
69
+
70
+ def __getattr__(name: str) -> Any:
71
+ target = _LAZY_EXPORTS.get(name)
72
+ if target is None:
73
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
74
+ module_name, attribute = target
75
+ value = getattr(import_module(module_name), attribute)
76
+ globals()[name] = value
77
+ return value
78
+
79
+
80
+ def __dir__() -> list[str]:
81
+ return sorted(set(globals()) | set(_LAZY_EXPORTS))
82
+
83
+
84
+ if TYPE_CHECKING:
85
+ from supertable.data_reader import (
86
+ DataReader,
87
+ query_odata_sql_stream,
88
+ query_sql_policy_fingerprint,
89
+ query_sql_stream,
90
+ )
91
+ from supertable.data_writer import DataWriter
92
+ from supertable.errors import (
93
+ SuperTableNotFoundError,
94
+ SupertableLookupError,
95
+ TableNotFoundError,
96
+ )
97
+ from supertable.meta_reader import MetaReader, list_supers, list_tables
98
+ from supertable.rbac.role_manager import RoleManager
99
+ from supertable.rbac.user_manager import UserManager
100
+ from supertable.redis_catalog import RedisCatalog
101
+ from supertable.simple_table import SimpleTable
102
+ from supertable.staging_area import Staging
103
+ from supertable.super_pipe import SuperPipe
104
+ from supertable.super_table import SuperTable
105
+
106
+ __all__ = [
107
+ "__version__",
108
+ "SuperTable",
109
+ "SimpleTable",
110
+ "DataWriter",
111
+ "DataReader",
112
+ "query_sql_stream",
113
+ "query_odata_sql_stream",
114
+ "query_sql_policy_fingerprint",
115
+ "engine",
116
+ "MetaReader",
117
+ "list_supers",
118
+ "list_tables",
119
+ "Staging",
120
+ "SuperPipe",
121
+ "RedisCatalog",
122
+ "RoleManager",
123
+ "UserManager",
124
+ "SupertableLookupError",
125
+ "SuperTableNotFoundError",
126
+ "TableNotFoundError",
127
+ ]