supertable 2.2.0__tar.gz → 2.2.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.
Files changed (184) hide show
  1. {supertable-2.2.0/supertable.egg-info → supertable-2.2.2}/PKG-INFO +1 -1
  2. {supertable-2.2.0 → supertable-2.2.2}/pyproject.toml +1 -1
  3. {supertable-2.2.0 → supertable-2.2.2}/setup.py +1 -1
  4. {supertable-2.2.0 → supertable-2.2.2}/supertable/__init__.py +1 -1
  5. {supertable-2.2.0 → supertable-2.2.2}/supertable/data_reader.py +26 -11
  6. {supertable-2.2.0 → supertable-2.2.2}/supertable/data_writer.py +616 -21
  7. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/webshop/defaults.py +1 -1
  8. {supertable-2.2.0 → supertable-2.2.2}/supertable/gc/daemon.py +5 -1
  9. {supertable-2.2.0 → supertable-2.2.2}/supertable/monitoring/partitions.py +65 -32
  10. {supertable-2.2.0 → supertable-2.2.2}/supertable/processing.py +424 -168
  11. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/role_manager.py +15 -16
  12. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/tests/test_rbac.py +136 -8
  13. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/user_manager.py +9 -1
  14. {supertable-2.2.0 → supertable-2.2.2}/supertable/redis_catalog.py +100 -6
  15. {supertable-2.2.0 → supertable-2.2.2}/supertable/redis_keys.py +1 -1
  16. {supertable-2.2.0 → supertable-2.2.2}/supertable/simple_table.py +44 -18
  17. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_data_reader_preflight.py +37 -0
  18. supertable-2.2.2/supertable/tests/test_data_writer_compact.py +1177 -0
  19. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_data_writer_tombstones.py +115 -0
  20. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_monitoring_partitions.py +53 -21
  21. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_newer_than.py +1 -1
  22. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_process_delete_only.py +2 -2
  23. supertable-2.2.2/supertable/tests/test_processing_compact_resources.py +575 -0
  24. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_redis_key_prefix.py +2 -0
  25. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_simple_table.py +98 -0
  26. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_small_file_compaction.py +2 -2
  27. supertable-2.2.2/supertable/utils/profiler.py +116 -0
  28. {supertable-2.2.0 → supertable-2.2.2/supertable.egg-info}/PKG-INFO +1 -1
  29. {supertable-2.2.0 → supertable-2.2.2}/supertable.egg-info/SOURCES.txt +3 -0
  30. {supertable-2.2.0 → supertable-2.2.2}/LICENSE +0 -0
  31. {supertable-2.2.0 → supertable-2.2.2}/README.md +0 -0
  32. {supertable-2.2.0 → supertable-2.2.2}/requirements.txt +0 -0
  33. {supertable-2.2.0 → supertable-2.2.2}/setup.cfg +0 -0
  34. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/__init__.py +0 -0
  35. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/admin.py +0 -0
  36. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/chain.py +0 -0
  37. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/consumers.py +0 -0
  38. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/crypto.py +0 -0
  39. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/events.py +0 -0
  40. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/export.py +0 -0
  41. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/logger.py +0 -0
  42. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/middleware.py +0 -0
  43. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/reader.py +0 -0
  44. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/retention.py +0 -0
  45. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/tests/__init__.py +0 -0
  46. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/tests/test_chain.py +0 -0
  47. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/tests/test_crypto.py +0 -0
  48. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/tests/test_emit.py +0 -0
  49. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/tests/test_events.py +0 -0
  50. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/tests/test_retention.py +0 -0
  51. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/writer_parquet.py +0 -0
  52. {supertable-2.2.0 → supertable-2.2.2}/supertable/audit/writer_redis.py +0 -0
  53. {supertable-2.2.0 → supertable-2.2.2}/supertable/config/__init__.py +0 -0
  54. {supertable-2.2.0 → supertable-2.2.2}/supertable/config/defaults.py +0 -0
  55. {supertable-2.2.0 → supertable-2.2.2}/supertable/config/homedir.py +0 -0
  56. {supertable-2.2.0 → supertable-2.2.2}/supertable/config/settings.py +0 -0
  57. {supertable-2.2.0 → supertable-2.2.2}/supertable/config/tests/__init__.py +0 -0
  58. {supertable-2.2.0 → supertable-2.2.2}/supertable/config/tests/test_defaults.py +0 -0
  59. {supertable-2.2.0 → supertable-2.2.2}/supertable/config/tests/test_homedir.py +0 -0
  60. {supertable-2.2.0 → supertable-2.2.2}/supertable/config/tests/test_settings.py +0 -0
  61. {supertable-2.2.0 → supertable-2.2.2}/supertable/data_classes.py +0 -0
  62. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/__init__.py +0 -0
  63. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/__init__.py +0 -0
  64. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/__main__.py +0 -0
  65. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/check_filter_builder.py +0 -0
  66. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/controller.py +0 -0
  67. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/data_writer_helpers.py +0 -0
  68. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/defaults.py +0 -0
  69. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/dummy_data.py +0 -0
  70. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/read_parquet_header.py +0 -0
  71. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s01_01_01_create_super_table.py +0 -0
  72. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s01_01_02_enable_mirroring_formats.py +0 -0
  73. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s01_02_create_roles.py +0 -0
  74. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s01_03_create_users.py +0 -0
  75. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s02_01_write_dummy_data.py +0 -0
  76. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s02_02_write_single_data.py +0 -0
  77. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s02_03_01_write_staging.py +0 -0
  78. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s02_03_02_create_pipe.py +0 -0
  79. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s02_04_01_write_monitoring_simple.py +0 -0
  80. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s02_04_02_write_monitoring_parallel.py +0 -0
  81. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s02_05_write_tombstone.py +0 -0
  82. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_01_read_data_error.py +0 -0
  83. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_02_01_read_super_data_ok.py +0 -0
  84. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_02_02_read_table_data_ok.py +0 -0
  85. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_03_read_meta.py +0 -0
  86. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_04_read_staging.py +0 -0
  87. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_06_01_read_roles.py +0 -0
  88. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_06_02_read_user.py +0 -0
  89. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_07_01_estimate_read.py +0 -0
  90. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_07_02_estimate_files.py +0 -0
  91. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s03_08_read_snapshot_history.py +0 -0
  92. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s04_01_03_delete_pipe.py +0 -0
  93. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s05_01_delete_table.py +0 -0
  94. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/quickstart/s05_02_delete_super_table.py +0 -0
  95. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/webshop/__init__.py +0 -0
  96. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/webshop/core.py +0 -0
  97. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/webshop/generate.py +0 -0
  98. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/webshop/load.py +0 -0
  99. {supertable-2.2.0 → supertable-2.2.2}/supertable/demo/webshop/topup.py +0 -0
  100. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/__init__.py +0 -0
  101. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/data_estimator.py +0 -0
  102. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/duckdb_lite.py +0 -0
  103. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/duckdb_pro.py +0 -0
  104. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/engine_common.py +0 -0
  105. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/engine_enum.py +0 -0
  106. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/executor.py +0 -0
  107. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/plan_stats.py +0 -0
  108. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/spark_thrift.py +0 -0
  109. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/tests/__init__.py +0 -0
  110. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/tests/conftest.py +0 -0
  111. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/tests/test_dedup_read.py +0 -0
  112. {supertable-2.2.0 → supertable-2.2.2}/supertable/engine/tests/test_engine.py +0 -0
  113. {supertable-2.2.0 → supertable-2.2.2}/supertable/errors.py +0 -0
  114. {supertable-2.2.0 → supertable-2.2.2}/supertable/gc/__init__.py +0 -0
  115. {supertable-2.2.0 → supertable-2.2.2}/supertable/gc/cleaner.py +0 -0
  116. {supertable-2.2.0 → supertable-2.2.2}/supertable/gc/queue.py +0 -0
  117. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/__init__.py +0 -0
  118. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/benchmarks/__init__.py +0 -0
  119. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/benchmarks/benchmark_locking.py +0 -0
  120. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/benchmarks/measure_lock_speed.py +0 -0
  121. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/benchmarks/measure_lock_time.py +0 -0
  122. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/file_lock.py +0 -0
  123. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/redis_lock.py +0 -0
  124. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/tests/__init__.py +0 -0
  125. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/tests/test_file_lock.py +0 -0
  126. {supertable-2.2.0 → supertable-2.2.2}/supertable/locking/tests/test_redis_lock.py +0 -0
  127. {supertable-2.2.0 → supertable-2.2.2}/supertable/logging.py +0 -0
  128. {supertable-2.2.0 → supertable-2.2.2}/supertable/meta_reader.py +0 -0
  129. {supertable-2.2.0 → supertable-2.2.2}/supertable/mirroring/__init__.py +0 -0
  130. {supertable-2.2.0 → supertable-2.2.2}/supertable/mirroring/mirror_delta.py +0 -0
  131. {supertable-2.2.0 → supertable-2.2.2}/supertable/mirroring/mirror_formats.py +0 -0
  132. {supertable-2.2.0 → supertable-2.2.2}/supertable/mirroring/mirror_iceberg.py +0 -0
  133. {supertable-2.2.0 → supertable-2.2.2}/supertable/mirroring/mirror_parquet.py +0 -0
  134. {supertable-2.2.0 → supertable-2.2.2}/supertable/monitoring/__init__.py +0 -0
  135. {supertable-2.2.0 → supertable-2.2.2}/supertable/monitoring_writer.py +0 -0
  136. {supertable-2.2.0 → supertable-2.2.2}/supertable/plan_extender.py +0 -0
  137. {supertable-2.2.0 → supertable-2.2.2}/supertable/query_plan_manager.py +0 -0
  138. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/__init__.py +0 -0
  139. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/access_control.py +0 -0
  140. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/filter_builder.py +0 -0
  141. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/permissions.py +0 -0
  142. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/row_column_security.py +0 -0
  143. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/tests/test_filter_builder.py +0 -0
  144. {supertable-2.2.0 → supertable-2.2.2}/supertable/rbac/tests/test_rbac_per_table.py +0 -0
  145. {supertable-2.2.0 → supertable-2.2.2}/supertable/redis_connector.py +0 -0
  146. {supertable-2.2.0 → supertable-2.2.2}/supertable/redis_infra.py +0 -0
  147. {supertable-2.2.0 → supertable-2.2.2}/supertable/staging_area.py +0 -0
  148. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/__init__.py +0 -0
  149. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/azure_storage.py +0 -0
  150. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/gcp_storage.py +0 -0
  151. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/local_storage.py +0 -0
  152. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/minio_storage.py +0 -0
  153. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/s3_storage.py +0 -0
  154. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/storage_factory.py +0 -0
  155. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/storage_interface.py +0 -0
  156. {supertable-2.2.0 → supertable-2.2.2}/supertable/storage/tests/test_storage.py +0 -0
  157. {supertable-2.2.0 → supertable-2.2.2}/supertable/super_pipe.py +0 -0
  158. {supertable-2.2.0 → supertable-2.2.2}/supertable/super_table.py +0 -0
  159. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/__init__.py +0 -0
  160. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_align_to_schema_fix.py +0 -0
  161. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_create_if_missing.py +0 -0
  162. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_data_reader.py +0 -0
  163. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_data_writer.py +0 -0
  164. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_data_writer_comprehensive.py +0 -0
  165. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_dedup_on_read_write.py +0 -0
  166. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_errors.py +0 -0
  167. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_gc_cleaner.py +0 -0
  168. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_gc_daemon.py +0 -0
  169. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_gc_queue.py +0 -0
  170. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_meta_reader.py +0 -0
  171. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_monitoring_sink_guard.py +0 -0
  172. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_processing.py +0 -0
  173. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_query_sql.py +0 -0
  174. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_super_table.py +0 -0
  175. {supertable-2.2.0 → supertable-2.2.2}/supertable/tests/test_supertable_all.py +0 -0
  176. {supertable-2.2.0 → supertable-2.2.2}/supertable/utils/__init__.py +0 -0
  177. {supertable-2.2.0 → supertable-2.2.2}/supertable/utils/helper.py +0 -0
  178. {supertable-2.2.0 → supertable-2.2.2}/supertable/utils/sql_parser.py +0 -0
  179. {supertable-2.2.0 → supertable-2.2.2}/supertable/utils/tests/test_sql_parser_columns.py +0 -0
  180. {supertable-2.2.0 → supertable-2.2.2}/supertable/utils/timer.py +0 -0
  181. {supertable-2.2.0 → supertable-2.2.2}/supertable.egg-info/dependency_links.txt +0 -0
  182. {supertable-2.2.0 → supertable-2.2.2}/supertable.egg-info/entry_points.txt +0 -0
  183. {supertable-2.2.0 → supertable-2.2.2}/supertable.egg-info/requires.txt +0 -0
  184. {supertable-2.2.0 → supertable-2.2.2}/supertable.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supertable
3
- Version: 2.2.0
3
+ Version: 2.2.2
4
4
  Summary: SuperTable — versioned data lake library for SQL analytics on Parquet + Redis.
5
5
  Author: Levente Kupas
6
6
  Author-email: Levente Kupas <lkupas@kladnasoft.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "supertable"
7
- version = "2.2.0"
7
+ version = "2.2.2"
8
8
  description = "SuperTable — versioned data lake library for SQL analytics on Parquet + Redis."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -19,7 +19,7 @@ long_description = readme.read_text(encoding="utf-8") if readme.exists() else ""
19
19
 
20
20
  setup(
21
21
  name="supertable",
22
- version="2.2.0",
22
+ version="2.2.2",
23
23
  description="SuperTable — versioned data lake library for SQL analytics on Parquet + Redis.",
24
24
  long_description=long_description,
25
25
  long_description_content_type="text/markdown",
@@ -25,7 +25,7 @@ See the ``supertable.demo`` package for runnable end-to-end demos and the
25
25
  project documentation for the full API surface.
26
26
  """
27
27
 
28
- __version__ = "2.2.0"
28
+ __version__ = "2.2.2"
29
29
 
30
30
  # Re-export the core public surface so users can do ``from supertable import …``
31
31
  # instead of remembering submodule paths.
@@ -119,7 +119,32 @@ class DataReader:
119
119
  tables = parser.get_table_tuples()
120
120
  physical_tables = parser.get_physical_tables()
121
121
 
122
- # RBAC check also returns per-alias column/row filter definitions
122
+ # Read-path policy: reads never create. Verify every referenced
123
+ # (super, simple) exists in the Redis catalog **before** anything
124
+ # downstream — RBAC, estimator, or the executor — gets a chance
125
+ # to side-effect-bootstrap them.
126
+ #
127
+ # ORDERING MATTERS: ``restrict_read_access`` (called next) builds
128
+ # ``RoleManager(super_name=..., organization=...)`` which boots
129
+ # RBAC role storage in Redis for the supertable if it doesn't
130
+ # exist. Running the RBAC check first against a missing
131
+ # supertable would silently mint the RBAC scaffold before our
132
+ # existence check fires. Pre-flight FIRST.
133
+ #
134
+ # The check runs in its own try block so SuperTable/TableNotFound
135
+ # convert to the standard (empty_df, Status.ERROR, message)
136
+ # return — we don't want to raise these into the caller, but we
137
+ # DO want to keep ``restrict_read_access``'s PermissionError
138
+ # raising naturally (legacy behaviour API layers depend on for
139
+ # 403 translation).
140
+ try:
141
+ self._assert_targets_exist(physical_tables)
142
+ except (SuperTableNotFoundError, TableNotFoundError) as e:
143
+ logger.warning(self._lp(f"target missing: {e}"))
144
+ return pd.DataFrame(), Status.ERROR, str(e)
145
+
146
+ # RBAC check — also returns per-alias column/row filter definitions.
147
+ # PermissionError propagates to the caller (legacy behaviour).
123
148
  rbac_views = restrict_read_access(
124
149
  super_name=self.super_name,
125
150
  organization=self.organization,
@@ -129,16 +154,6 @@ class DataReader:
129
154
  )
130
155
 
131
156
  try:
132
- # Read-path policy: reads never create. Verify every
133
- # referenced (super, simple) exists in the Redis catalog
134
- # *before* the estimator / executor get a chance to
135
- # side-effect-bootstrap them via SuperTable constructor
136
- # calls. On a miss this raises SuperTableNotFoundError /
137
- # TableNotFoundError, which the surrounding ``except`` turns
138
- # into the same (empty_df, Status.ERROR, message) tuple as
139
- # every other read failure — no state is touched.
140
- self._assert_targets_exist(physical_tables)
141
-
142
157
  # Make executor aware of storage for presign retry
143
158
  executor = Executor(storage=self.storage, organization=self.organization)
144
159