supertable 2.0.8__tar.gz → 2.1.0__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.0.8/supertable.egg-info → supertable-2.1.0}/PKG-INFO +1 -1
- {supertable-2.0.8 → supertable-2.1.0}/pyproject.toml +1 -1
- {supertable-2.0.8 → supertable-2.1.0}/setup.py +1 -1
- {supertable-2.0.8 → supertable-2.1.0}/supertable/__init__.py +1 -1
- {supertable-2.0.8 → supertable-2.1.0}/supertable/redis_keys.py +32 -12
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_redis_key_prefix.py +21 -4
- {supertable-2.0.8 → supertable-2.1.0/supertable.egg-info}/PKG-INFO +1 -1
- {supertable-2.0.8 → supertable-2.1.0}/LICENSE +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/README.md +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/requirements.txt +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/setup.cfg +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/admin.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/chain.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/consumers.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/crypto.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/events.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/export.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/logger.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/middleware.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/reader.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/retention.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/tests/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/tests/test_chain.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/tests/test_crypto.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/tests/test_emit.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/tests/test_events.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/tests/test_retention.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/writer_parquet.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/audit/writer_redis.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/config/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/config/defaults.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/config/homedir.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/config/settings.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/config/tests/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/config/tests/test_defaults.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/config/tests/test_homedir.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/config/tests/test_settings.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/data_classes.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/data_reader.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/data_writer.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/__main__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/check_filter_builder.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/controller.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/data_writer_helpers.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/defaults.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/dummy_data.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/read_parquet_header.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s01_01_01_create_super_table.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s01_01_02_enable_mirroring_formats.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s01_02_create_roles.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s01_03_create_users.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s02_01_write_dummy_data.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s02_02_write_single_data.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s02_03_01_write_staging.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s02_03_02_create_pipe.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s02_04_01_write_monitoring_simple.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s02_04_02_write_monitoring_parallel.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s02_05_write_tombstone.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_01_read_data_error.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_02_01_read_super_data_ok.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_02_02_read_table_data_ok.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_03_read_meta.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_04_read_staging.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_06_01_read_roles.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_06_02_read_user.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_07_01_estimate_read.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_07_02_estimate_files.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_08_read_snapshot_history.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s04_01_03_delete_pipe.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s05_01_delete_table.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s05_02_delete_super_table.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/webshop/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/webshop/core.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/webshop/defaults.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/webshop/generate.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/webshop/load.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/demo/webshop/topup.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/data_estimator.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/duckdb_lite.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/duckdb_pro.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/engine_common.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/engine_enum.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/executor.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/plan_stats.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/spark_thrift.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/tests/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/tests/conftest.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/tests/test_dedup_read.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/engine/tests/test_engine.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/benchmarks/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/benchmarks/benchmark_locking.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/benchmarks/measure_lock_speed.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/benchmarks/measure_lock_time.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/file_lock.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/redis_lock.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/tests/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/tests/test_file_lock.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/locking/tests/test_redis_lock.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/logging.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/meta_reader.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/mirroring/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/mirroring/mirror_delta.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/mirroring/mirror_formats.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/mirroring/mirror_iceberg.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/mirroring/mirror_parquet.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/monitoring_writer.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/plan_extender.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/processing.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/query_plan_manager.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/access_control.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/filter_builder.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/permissions.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/role_manager.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/row_column_security.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/tests/test_filter_builder.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/tests/test_rbac.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/tests/test_rbac_per_table.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/rbac/user_manager.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/redis_catalog.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/redis_connector.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/redis_infra.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/simple_table.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/staging_area.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/azure_storage.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/gcp_storage.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/local_storage.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/minio_storage.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/s3_storage.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/storage_factory.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/storage_interface.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/storage/tests/test_storage.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/super_pipe.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/super_table.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_align_to_schema_fix.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_data_reader.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_data_writer.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_data_writer_comprehensive.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_data_writer_tombstones.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_dedup_on_read_write.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_meta_reader.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_newer_than.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_process_delete_only.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_processing.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_query_sql.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_simple_table.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_small_file_compaction.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_super_table.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/tests/test_supertable_all.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/utils/__init__.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/utils/helper.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/utils/sql_parser.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/utils/tests/test_sql_parser_columns.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable/utils/timer.py +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable.egg-info/SOURCES.txt +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable.egg-info/dependency_links.txt +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable.egg-info/entry_points.txt +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable.egg-info/requires.txt +0 -0
- {supertable-2.0.8 → supertable-2.1.0}/supertable.egg-info/top_level.txt +0 -0
|
@@ -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.0
|
|
22
|
+
version="2.1.0",
|
|
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.0
|
|
28
|
+
__version__ = "2.1.0"
|
|
29
29
|
|
|
30
30
|
# Re-export the core public surface so users can do ``from supertable import …``
|
|
31
31
|
# instead of remembering submodule paths.
|
|
@@ -152,15 +152,35 @@ _RECOGNISED_PREFIXES: FrozenSet[str] = frozenset(
|
|
|
152
152
|
# Naming rules (regexes)
|
|
153
153
|
# --------------------------------------------------------------------------- #
|
|
154
154
|
|
|
155
|
-
# A sentinel is
|
|
156
|
-
# across every user-supplied
|
|
157
|
-
#
|
|
158
|
-
# instance_id).
|
|
155
|
+
# A sentinel is a *single*-underscore-wrapped name (e.g. ``_apps_``,
|
|
156
|
+
# ``_system_``). Sentinels are reserved across every user-supplied
|
|
157
|
+
# identifier (org, sup, simple, staging_name, pipe_name, app_name,
|
|
158
|
+
# share_id, link_id, user_id, role_id, role_type, instance_id).
|
|
159
|
+
#
|
|
160
|
+
# Note: this regex deliberately requires ``[a-z0-9]`` immediately
|
|
161
|
+
# after the leading underscore, so *double*-underscore-wrapped names
|
|
162
|
+
# (e.g. ``__data_quality__``) do NOT match. Double-underscore wrap is
|
|
163
|
+
# the SDK-internal-table convention — those names are allowed by
|
|
164
|
+
# ``_SAFE_SEGMENT`` below and hidden from user-facing feeds by the
|
|
165
|
+
# OData handler's shape detection.
|
|
159
166
|
SENTINEL_RE: re.Pattern[str] = re.compile(r"^_[a-z0-9][a-z0-9_-]*_$")
|
|
160
167
|
|
|
161
|
-
#
|
|
162
|
-
#
|
|
163
|
-
|
|
168
|
+
# Universal safe-segment regex used by every key constructor.
|
|
169
|
+
#
|
|
170
|
+
# Accepts either:
|
|
171
|
+
# * a plain identifier ``[a-z0-9][a-z0-9_-]{0,63}`` — the common case
|
|
172
|
+
# for user-supplied names (org, sup, simple table, staging, pipe,
|
|
173
|
+
# user_id, role_id, etc.), and
|
|
174
|
+
# * a *double*-underscore-wrapped name ``__[a-z0-9][a-z0-9_-]{0,59}__``
|
|
175
|
+
# — the convention for SDK-internal tables (e.g. ``__data_quality__``)
|
|
176
|
+
# that users normally would not create but the SDK needs to write to.
|
|
177
|
+
#
|
|
178
|
+
# Single-underscore-wrapped names (``_foo_``) match SENTINEL_RE and are
|
|
179
|
+
# rejected explicitly by ``_safe()``; they are reserved for SDK
|
|
180
|
+
# sentinels at fixed positions (``_apps_`` under ``dataisland:``).
|
|
181
|
+
_SAFE_SEGMENT: re.Pattern[str] = re.compile(
|
|
182
|
+
r"^(__[a-z0-9][a-z0-9_-]{0,59}__|[a-z0-9][a-z0-9_-]{0,63})$"
|
|
183
|
+
)
|
|
164
184
|
|
|
165
185
|
# --------------------------------------------------------------------------- #
|
|
166
186
|
# Explicit reservations
|
|
@@ -709,13 +729,13 @@ def linked_share_doc(org: str, sup: str, link_id: str) -> str:
|
|
|
709
729
|
)
|
|
710
730
|
|
|
711
731
|
|
|
712
|
-
# --- Data Quality (dataisland-core
|
|
732
|
+
# --- Data Quality (dataisland-core quality module owns its sub-structure) #
|
|
713
733
|
|
|
714
|
-
def
|
|
734
|
+
def quality_prefix(org: str, sup: str) -> str:
|
|
715
735
|
"""Per-supertable data-quality namespace prefix (with trailing colon).
|
|
716
736
|
|
|
717
|
-
The dataisland-core
|
|
718
|
-
prefix (e.g. ``config:__global__``, ``rules:index``,
|
|
737
|
+
The dataisland-core quality module appends its own sub-keys to
|
|
738
|
+
this prefix (e.g. ``config:__global__``, ``rules:index``,
|
|
719
739
|
``rules:doc:{rule_id}``, ``schedule:{table}``, ``latest:{table}``,
|
|
720
740
|
``history``, ``pending:{table}``, ``running:{table}``,
|
|
721
741
|
``cooldown:{table}``, ``run-all-progress``).
|
|
@@ -725,7 +745,7 @@ def dq_prefix(org: str, sup: str) -> str:
|
|
|
725
745
|
"""
|
|
726
746
|
return (
|
|
727
747
|
f"{SUPERTABLE_PREFIX}:{_safe('org', org)}:{LAKES_SCOPE}"
|
|
728
|
-
f":{_safe('sup', sup)}:
|
|
748
|
+
f":{_safe('sup', sup)}:quality:"
|
|
729
749
|
)
|
|
730
750
|
|
|
731
751
|
|
|
@@ -124,7 +124,7 @@ def _all_helpers() -> list[tuple[str, str, str]]:
|
|
|
124
124
|
# ---- Linked shares ---------------------------------------------
|
|
125
125
|
("linked_share_index", RK.linked_share_index(ORG, SUP), f"{lake_pre}:linked_shares:index"),
|
|
126
126
|
("linked_share_doc", RK.linked_share_doc(ORG, SUP, LINK), f"{lake_pre}:linked_shares:doc:{LINK}"),
|
|
127
|
-
("
|
|
127
|
+
("quality_prefix", RK.quality_prefix(ORG, SUP), f"{lake_pre}:quality:"),
|
|
128
128
|
|
|
129
129
|
# ---- Monitoring (org-level, closed set) ------------------------
|
|
130
130
|
("monitor", RK.monitor(ORG, "plans"), f"supertable:{ORG}:monitor:plans"),
|
|
@@ -256,7 +256,22 @@ def test_reserved_super_names_accepts_normal_names():
|
|
|
256
256
|
# ---------------------------------------------------------------------------
|
|
257
257
|
|
|
258
258
|
@pytest.mark.parametrize(
|
|
259
|
-
"good",
|
|
259
|
+
"good",
|
|
260
|
+
[
|
|
261
|
+
"acme",
|
|
262
|
+
"my-org",
|
|
263
|
+
"tenant_1",
|
|
264
|
+
"a",
|
|
265
|
+
"abc123",
|
|
266
|
+
"x" * 64,
|
|
267
|
+
# Double-underscore-wrapped names are the SDK-internal-table
|
|
268
|
+
# convention (e.g. __data_quality__). _safe() accepts them so
|
|
269
|
+
# the SDK can write to internal tables; single-underscore
|
|
270
|
+
# sentinels (_apps_) are still rejected below.
|
|
271
|
+
"__data_quality__",
|
|
272
|
+
"__audit__",
|
|
273
|
+
"__a__",
|
|
274
|
+
],
|
|
260
275
|
)
|
|
261
276
|
def test_safe_accepts_good_segments(good):
|
|
262
277
|
assert RK._safe("test", good) == good
|
|
@@ -271,10 +286,12 @@ def test_safe_accepts_good_segments(good):
|
|
|
271
286
|
"ac:me", # colon
|
|
272
287
|
"ac/me", # slash
|
|
273
288
|
"ac.me", # dot
|
|
274
|
-
"_system_", # sentinel
|
|
289
|
+
"_system_", # sentinel (single-underscore-wrap)
|
|
275
290
|
"_foo_", # sentinel
|
|
276
291
|
"-leading-hyphen", # starts with hyphen
|
|
277
|
-
"_leading", # starts with underscore (
|
|
292
|
+
"_leading", # starts with single underscore (not wrapped)
|
|
293
|
+
"__leading", # starts with double underscore but no closing wrap
|
|
294
|
+
"____", # only underscores, no name body
|
|
278
295
|
"x" * 65, # too long
|
|
279
296
|
]
|
|
280
297
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s01_01_01_create_super_table.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s02_02_write_single_data.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_02_01_read_super_data_ok.py
RENAMED
|
File without changes
|
{supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_02_02_read_table_data_ok.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_07_02_estimate_files.py
RENAMED
|
File without changes
|
{supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s03_08_read_snapshot_history.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supertable-2.0.8 → supertable-2.1.0}/supertable/demo/quickstart/s05_02_delete_super_table.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|