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.
- supertable-2.5.3/MANIFEST.in +8 -0
- {supertable-2.4.0/supertable.egg-info → supertable-2.5.3}/PKG-INFO +41 -25
- {supertable-2.4.0 → supertable-2.5.3}/README.md +14 -7
- supertable-2.5.3/pyproject.toml +116 -0
- {supertable-2.4.0 → supertable-2.5.3}/requirements.txt +10 -6
- supertable-2.5.3/setup.py +6 -0
- supertable-2.5.3/supertable/__init__.py +127 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/__init__.py +122 -8
- supertable-2.5.3/supertable/audit/admin.py +442 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/chain.py +107 -14
- {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/consumers.py +42 -9
- supertable-2.5.3/supertable/audit/crypto.py +500 -0
- supertable-2.5.3/supertable/audit/diagnostics.py +14 -0
- supertable-2.5.3/supertable/audit/durable_journal.py +1716 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/events.py +55 -7
- {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/export.py +27 -5
- supertable-2.5.3/supertable/audit/logger.py +1331 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/middleware.py +71 -37
- supertable-2.5.3/supertable/audit/privileged.py +980 -0
- supertable-2.5.3/supertable/audit/privileged_outbox.py +3836 -0
- supertable-2.5.3/supertable/audit/privileged_worker.py +1769 -0
- supertable-2.5.3/supertable/audit/reader.py +805 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/audit/retention.py +113 -33
- supertable-2.5.3/supertable/audit/writer_parquet.py +1566 -0
- supertable-2.5.3/supertable/audit/writer_redis.py +582 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/config/defaults.py +4 -2
- supertable-2.5.3/supertable/config/homedir.py +189 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/config/settings.py +311 -26
- supertable-2.5.3/supertable/data_classes.py +566 -0
- supertable-2.5.3/supertable/data_reader.py +3597 -0
- supertable-2.5.3/supertable/data_writer.py +4332 -0
- supertable-2.5.3/supertable/demo/README.md +161 -0
- supertable-2.5.3/supertable/demo/medcenter/__init__.py +43 -0
- supertable-2.5.3/supertable/demo/medcenter/annotations.json +596 -0
- supertable-2.5.3/supertable/demo/medcenter/core.py +325 -0
- supertable-2.5.3/supertable/demo/medcenter/defaults.py +143 -0
- supertable-2.5.3/supertable/demo/medcenter/demo_queries.md +231 -0
- supertable-2.5.3/supertable/demo/medcenter/export_accounting.py +255 -0
- supertable-2.5.3/supertable/demo/medcenter/finance_sources.py +825 -0
- supertable-2.5.3/supertable/demo/medcenter/generate.py +186 -0
- supertable-2.5.3/supertable/demo/medcenter/helpers.py +37 -0
- supertable-2.5.3/supertable/demo/medcenter/load.py +104 -0
- supertable-2.5.3/supertable/demo/medcenter/quality.py +379 -0
- supertable-2.5.3/supertable/demo/medcenter/run.py +254 -0
- supertable-2.5.3/supertable/demo/medcenter/transform.py +355 -0
- supertable-2.5.3/supertable/demo/medcenter/validation.py +23 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s01_03_create_users.py +5 -2
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/core.py +6 -4
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/generate.py +2 -1
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/load.py +2 -1
- supertable-2.5.3/supertable/demo/webshop/stream_demo.py +778 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/topup.py +7 -4
- supertable-2.5.3/supertable/engine/__init__.py +57 -0
- supertable-2.5.3/supertable/engine/adaptive_router.py +665 -0
- supertable-2.5.3/supertable/engine/data_estimator.py +3012 -0
- supertable-2.5.3/supertable/engine/duckdb_engine.py +2532 -0
- supertable-2.5.3/supertable/engine/engine_common.py +4789 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/engine/engine_config.py +196 -53
- {supertable-2.4.0 → supertable-2.5.3}/supertable/engine/engine_enum.py +4 -2
- supertable-2.5.3/supertable/engine/executor.py +2988 -0
- supertable-2.5.3/supertable/engine/file_cache.py +1658 -0
- supertable-2.5.3/supertable/engine/island_resources.py +1260 -0
- supertable-2.5.3/supertable/engine/island_spill.py +2187 -0
- supertable-2.5.3/supertable/engine/islanddb.py +5461 -0
- supertable-2.5.3/supertable/engine/join_pruner.py +1183 -0
- supertable-2.5.3/supertable/engine/query_observations.py +1207 -0
- supertable-2.5.3/supertable/engine/range_cache.py +2215 -0
- supertable-2.5.3/supertable/engine/remote_paths.py +24 -0
- supertable-2.5.3/supertable/engine/spark_thrift.py +2778 -0
- supertable-2.5.3/supertable/engine/stable_http_relay.py +2294 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/errors.py +31 -0
- supertable-2.5.3/supertable/locking/file_lock.py +617 -0
- supertable-2.5.3/supertable/locking/redis_lock.py +556 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/logging.py +62 -15
- supertable-2.5.3/supertable/meta_reader.py +1107 -0
- supertable-2.5.3/supertable/mirroring/failure_safety.py +58 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/mirroring/mirror_delta.py +333 -76
- supertable-2.5.3/supertable/mirroring/mirror_formats.py +589 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/mirroring/mirror_iceberg.py +375 -69
- supertable-2.5.3/supertable/mirroring/mirror_parquet.py +261 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/monitoring/__init__.py +33 -8
- {supertable-2.4.0 → supertable-2.5.3}/supertable/monitoring/partitions.py +433 -110
- supertable-2.5.3/supertable/monitoring_writer.py +1496 -0
- supertable-2.5.3/supertable/odata_continuation.py +528 -0
- supertable-2.5.3/supertable/plan_extender.py +286 -0
- supertable-2.5.3/supertable/processing.py +10292 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/quality/__init__.py +16 -4
- supertable-2.5.3/supertable/quality/anomaly.py +967 -0
- supertable-2.5.3/supertable/quality/checker.py +1728 -0
- supertable-2.5.3/supertable/quality/config.py +1385 -0
- supertable-2.5.3/supertable/quality/cron.py +81 -0
- supertable-2.5.3/supertable/quality/execution.py +223 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/quality/history.py +101 -17
- supertable-2.5.3/supertable/quality/scheduler.py +6340 -0
- supertable-2.5.3/supertable/quality/serialization.py +334 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/query_plan_manager.py +45 -13
- supertable-2.5.3/supertable/rbac/access_control.py +664 -0
- supertable-2.5.3/supertable/rbac/filter_builder.py +255 -0
- supertable-2.5.3/supertable/rbac/role_manager.py +447 -0
- supertable-2.5.3/supertable/rbac/row_column_security.py +392 -0
- supertable-2.5.3/supertable/rbac/user_manager.py +534 -0
- supertable-2.5.3/supertable/recovery/__init__.py +21 -0
- supertable-2.5.3/supertable/recovery/redis_rebuild.py +2432 -0
- supertable-2.5.3/supertable/redis_catalog.py +18693 -0
- supertable-2.5.3/supertable/redis_connector.py +538 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/redis_infra.py +78 -183
- {supertable-2.4.0 → supertable-2.5.3}/supertable/redis_keys.py +348 -16
- supertable-2.5.3/supertable/row_identity.py +261 -0
- supertable-2.5.3/supertable/simple_table.py +2508 -0
- supertable-2.5.3/supertable/staging_area.py +1856 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/azure_storage.py +251 -35
- {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/gcp_storage.py +215 -36
- supertable-2.5.3/supertable/storage/local_storage.py +1999 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/minio_storage.py +259 -26
- {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/s3_storage.py +273 -39
- {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/storage_factory.py +8 -1
- supertable-2.5.3/supertable/storage/storage_interface.py +694 -0
- supertable-2.5.3/supertable/super_pipe.py +440 -0
- supertable-2.5.3/supertable/super_table.py +1538 -0
- supertable-2.5.3/supertable/tombstone_manifest_v2.py +811 -0
- supertable-2.5.3/supertable/utils/diagnostic_redaction.py +214 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/utils/helper.py +20 -5
- supertable-2.5.3/supertable/utils/snapshot.py +523 -0
- supertable-2.5.3/supertable/utils/spark_security.py +144 -0
- supertable-2.5.3/supertable/utils/sql_parser.py +2077 -0
- {supertable-2.4.0 → supertable-2.5.3/supertable.egg-info}/PKG-INFO +41 -25
- {supertable-2.4.0 → supertable-2.5.3}/supertable.egg-info/SOURCES.txt +46 -68
- supertable-2.5.3/supertable.egg-info/entry_points.txt +13 -0
- supertable-2.5.3/supertable.egg-info/requires.txt +43 -0
- supertable-2.4.0/pyproject.toml +0 -53
- supertable-2.4.0/setup.py +0 -65
- supertable-2.4.0/supertable/__init__.py +0 -66
- supertable-2.4.0/supertable/audit/admin.py +0 -206
- supertable-2.4.0/supertable/audit/crypto.py +0 -92
- supertable-2.4.0/supertable/audit/logger.py +0 -492
- supertable-2.4.0/supertable/audit/reader.py +0 -437
- supertable-2.4.0/supertable/audit/tests/test_chain.py +0 -234
- supertable-2.4.0/supertable/audit/tests/test_crypto.py +0 -132
- supertable-2.4.0/supertable/audit/tests/test_emit.py +0 -261
- supertable-2.4.0/supertable/audit/tests/test_events.py +0 -299
- supertable-2.4.0/supertable/audit/tests/test_retention.py +0 -308
- supertable-2.4.0/supertable/audit/writer_parquet.py +0 -347
- supertable-2.4.0/supertable/audit/writer_redis.py +0 -266
- supertable-2.4.0/supertable/config/homedir.py +0 -96
- supertable-2.4.0/supertable/config/tests/test_defaults.py +0 -150
- supertable-2.4.0/supertable/config/tests/test_homedir.py +0 -127
- supertable-2.4.0/supertable/config/tests/test_settings.py +0 -370
- supertable-2.4.0/supertable/data_classes.py +0 -90
- supertable-2.4.0/supertable/data_reader.py +0 -502
- supertable-2.4.0/supertable/data_writer.py +0 -1669
- supertable-2.4.0/supertable/engine/__init__.py +0 -16
- supertable-2.4.0/supertable/engine/data_estimator.py +0 -684
- supertable-2.4.0/supertable/engine/duckdb_lite.py +0 -291
- supertable-2.4.0/supertable/engine/duckdb_pro.py +0 -466
- supertable-2.4.0/supertable/engine/engine_common.py +0 -1539
- supertable-2.4.0/supertable/engine/executor.py +0 -254
- supertable-2.4.0/supertable/engine/spark_thrift.py +0 -1100
- supertable-2.4.0/supertable/engine/tests/__init__.py +0 -0
- supertable-2.4.0/supertable/engine/tests/conftest.py +0 -128
- supertable-2.4.0/supertable/engine/tests/test_engine.py +0 -2258
- supertable-2.4.0/supertable/engine/tests/test_engine_config.py +0 -81
- supertable-2.4.0/supertable/engine/tests/test_engine_routing.py +0 -192
- supertable-2.4.0/supertable/engine/tests/test_engine_spill.py +0 -183
- supertable-2.4.0/supertable/locking/benchmarks/__init__.py +0 -0
- supertable-2.4.0/supertable/locking/benchmarks/benchmark_locking.py +0 -168
- supertable-2.4.0/supertable/locking/benchmarks/measure_lock_speed.py +0 -208
- supertable-2.4.0/supertable/locking/benchmarks/measure_lock_time.py +0 -165
- supertable-2.4.0/supertable/locking/file_lock.py +0 -302
- supertable-2.4.0/supertable/locking/redis_lock.py +0 -249
- supertable-2.4.0/supertable/locking/tests/__init__.py +0 -0
- supertable-2.4.0/supertable/locking/tests/test_file_lock.py +0 -231
- supertable-2.4.0/supertable/locking/tests/test_redis_lock.py +0 -328
- supertable-2.4.0/supertable/meta_reader.py +0 -579
- supertable-2.4.0/supertable/mirroring/__init__.py +0 -0
- supertable-2.4.0/supertable/mirroring/mirror_formats.py +0 -118
- supertable-2.4.0/supertable/mirroring/mirror_parquet.py +0 -184
- supertable-2.4.0/supertable/monitoring_writer.py +0 -642
- supertable-2.4.0/supertable/plan_extender.py +0 -173
- supertable-2.4.0/supertable/processing.py +0 -2475
- supertable-2.4.0/supertable/quality/anomaly.py +0 -250
- supertable-2.4.0/supertable/quality/checker.py +0 -499
- supertable-2.4.0/supertable/quality/config.py +0 -401
- supertable-2.4.0/supertable/quality/scheduler.py +0 -757
- supertable-2.4.0/supertable/rbac/__init__.py +0 -0
- supertable-2.4.0/supertable/rbac/access_control.py +0 -340
- supertable-2.4.0/supertable/rbac/filter_builder.py +0 -108
- supertable-2.4.0/supertable/rbac/role_manager.py +0 -270
- supertable-2.4.0/supertable/rbac/row_column_security.py +0 -92
- supertable-2.4.0/supertable/rbac/tests/test_filter_builder.py +0 -385
- supertable-2.4.0/supertable/rbac/tests/test_rbac.py +0 -1903
- supertable-2.4.0/supertable/rbac/tests/test_rbac_per_table.py +0 -713
- supertable-2.4.0/supertable/rbac/user_manager.py +0 -217
- supertable-2.4.0/supertable/redis_catalog.py +0 -1773
- supertable-2.4.0/supertable/redis_connector.py +0 -278
- supertable-2.4.0/supertable/simple_table.py +0 -395
- supertable-2.4.0/supertable/staging_area.py +0 -291
- supertable-2.4.0/supertable/storage/local_storage.py +0 -241
- supertable-2.4.0/supertable/storage/storage_interface.py +0 -194
- supertable-2.4.0/supertable/storage/tests/test_storage.py +0 -2359
- supertable-2.4.0/supertable/super_pipe.py +0 -149
- supertable-2.4.0/supertable/super_table.py +0 -136
- supertable-2.4.0/supertable/tests/__init__.py +0 -0
- supertable-2.4.0/supertable/tests/test_align_to_schema_fix.py +0 -475
- supertable-2.4.0/supertable/tests/test_compaction_selection.py +0 -335
- supertable-2.4.0/supertable/tests/test_create_if_missing.py +0 -267
- supertable-2.4.0/supertable/tests/test_data_estimator_projection.py +0 -201
- supertable-2.4.0/supertable/tests/test_data_reader.py +0 -2054
- supertable-2.4.0/supertable/tests/test_data_reader_preflight.py +0 -286
- supertable-2.4.0/supertable/tests/test_data_writer.py +0 -2100
- supertable-2.4.0/supertable/tests/test_data_writer_compact.py +0 -1163
- supertable-2.4.0/supertable/tests/test_data_writer_comprehensive.py +0 -1053
- supertable-2.4.0/supertable/tests/test_errors.py +0 -81
- supertable-2.4.0/supertable/tests/test_meta_reader.py +0 -1200
- supertable-2.4.0/supertable/tests/test_metadata_partitioning.py +0 -221
- supertable-2.4.0/supertable/tests/test_monitoring_partitions.py +0 -838
- supertable-2.4.0/supertable/tests/test_monitoring_sink_guard.py +0 -167
- supertable-2.4.0/supertable/tests/test_newer_than.py +0 -345
- supertable-2.4.0/supertable/tests/test_parquet_statistics.py +0 -86
- supertable-2.4.0/supertable/tests/test_processing.py +0 -853
- supertable-2.4.0/supertable/tests/test_processing_compact_resources.py +0 -668
- supertable-2.4.0/supertable/tests/test_processing_stats.py +0 -465
- supertable-2.4.0/supertable/tests/test_quality_checker.py +0 -120
- supertable-2.4.0/supertable/tests/test_query_sql.py +0 -267
- supertable-2.4.0/supertable/tests/test_read_pruning_differential.py +0 -457
- supertable-2.4.0/supertable/tests/test_read_pruning_integration.py +0 -352
- supertable-2.4.0/supertable/tests/test_redis_key_prefix.py +0 -525
- supertable-2.4.0/supertable/tests/test_resolve_overwrite_writes.py +0 -256
- supertable-2.4.0/supertable/tests/test_simple_table.py +0 -971
- supertable-2.4.0/supertable/tests/test_spark_file_resolution.py +0 -148
- supertable-2.4.0/supertable/tests/test_stats_cache.py +0 -242
- supertable-2.4.0/supertable/tests/test_stats_pruning.py +0 -557
- supertable-2.4.0/supertable/tests/test_stats_schema_snapshot.py +0 -122
- supertable-2.4.0/supertable/tests/test_super_table.py +0 -373
- supertable-2.4.0/supertable/tests/test_supertable_all.py +0 -1777
- supertable-2.4.0/supertable/tests/test_system_query.py +0 -216
- supertable-2.4.0/supertable/tests/test_tombstone_cache.py +0 -162
- supertable-2.4.0/supertable/tests/test_write_probe_gate.py +0 -130
- supertable-2.4.0/supertable/utils/sql_parser.py +0 -829
- supertable-2.4.0/supertable/utils/tests/test_hourly_partition.py +0 -63
- supertable-2.4.0/supertable/utils/tests/test_sql_parser_columns.py +0 -4456
- supertable-2.4.0/supertable.egg-info/entry_points.txt +0 -5
- supertable-2.4.0/supertable.egg-info/requires.txt +0 -30
- {supertable-2.4.0 → supertable-2.5.3}/LICENSE +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/setup.cfg +0 -0
- {supertable-2.4.0/supertable/audit/tests → supertable-2.5.3/supertable/config}/__init__.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/__init__.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/__init__.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/__main__.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/check_filter_builder.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/controller.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/data_writer_helpers.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/defaults.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/dummy_data.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/read_parquet_header.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s01_01_01_create_super_table.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s01_01_02_enable_mirroring_formats.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s01_02_create_roles.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_01_write_dummy_data.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_02_write_single_data.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_03_01_write_staging.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_03_02_create_pipe.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_04_01_write_monitoring_simple.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_04_02_write_monitoring_parallel.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s02_05_write_tombstone.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_01_read_data_error.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_02_01_read_super_data_ok.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_02_02_read_table_data_ok.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_03_read_meta.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_04_read_staging.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_06_01_read_roles.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_06_02_read_user.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_07_01_estimate_read.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_07_02_estimate_files.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s03_08_read_snapshot_history.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s04_01_03_delete_pipe.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s05_01_delete_table.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/quickstart/s05_02_delete_super_table.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/__init__.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/demo/webshop/defaults.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/engine/plan_stats.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/locking/__init__.py +0 -0
- {supertable-2.4.0/supertable/config → supertable-2.5.3/supertable/mirroring}/__init__.py +0 -0
- {supertable-2.4.0/supertable/config/tests → supertable-2.5.3/supertable/rbac}/__init__.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/rbac/permissions.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/storage/__init__.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/system_query.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/utils/__init__.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/utils/profiler.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable/utils/timer.py +0 -0
- {supertable-2.4.0 → supertable-2.5.3}/supertable.egg-info/dependency_links.txt +0 -0
- {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.
|
|
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:
|
|
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:
|
|
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<
|
|
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:
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
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:
|
|
26
|
-
Requires-Dist:
|
|
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.
|
|
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
|
|
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
|
|
38
|
+
Requires-Dist: google-cloud-storage<4.0,>=3.1.0; extra == "gcp"
|
|
36
39
|
Provides-Extra: all-cloud
|
|
37
|
-
Requires-Dist:
|
|
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:
|
|
40
|
-
|
|
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
|

|
|
47
56
|

|
|
48
|
-

|
|
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
|
|
70
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|

|
|
4
4
|

|
|
5
|
-

|
|
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
|
|
27
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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>=
|
|
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.
|
|
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
|
-
|
|
14
|
-
|
|
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,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
|
+
]
|