mainsequence 4.4.2__tar.gz → 4.4.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 (138) hide show
  1. {mainsequence-4.4.2/mainsequence.egg-info → mainsequence-4.4.3}/PKG-INFO +1 -1
  2. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/__init__.py +0 -2
  3. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/sqlalchemy_contracts.py +4 -44
  4. {mainsequence-4.4.2 → mainsequence-4.4.3/mainsequence.egg-info}/PKG-INFO +1 -1
  5. {mainsequence-4.4.2 → mainsequence-4.4.3}/pyproject.toml +1 -1
  6. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_meta_tables_sqlalchemy_contracts.py +12 -7
  7. {mainsequence-4.4.2 → mainsequence-4.4.3}/LICENSE +0 -0
  8. {mainsequence-4.4.2 → mainsequence-4.4.3}/README.md +0 -0
  9. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/AGENTS.md +0 -0
  10. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
  11. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  12. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
  13. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
  14. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
  15. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
  16. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
  17. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
  18. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
  19. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
  20. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  21. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
  22. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  23. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  24. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  25. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
  26. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  27. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  28. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
  29. {mainsequence-4.4.2 → mainsequence-4.4.3}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
  30. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/__init__.py +0 -0
  31. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/__main__.py +0 -0
  32. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/bootstrap.py +0 -0
  33. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/__init__.py +0 -0
  34. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/api.py +0 -0
  35. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/browser_auth.py +0 -0
  36. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/cli.py +0 -0
  37. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/config.py +0 -0
  38. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/docker_utils.py +0 -0
  39. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/doctor.py +0 -0
  40. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/local_ops.py +0 -0
  41. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/migrations.py +0 -0
  42. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/model_filters.py +0 -0
  43. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/project_status.py +0 -0
  44. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/pydantic_cli.py +0 -0
  45. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/sdk_utils.py +0 -0
  46. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/ssh_utils.py +0 -0
  47. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/cli/ui.py +0 -0
  48. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/__init__.py +0 -0
  49. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/agent_runtime_models.py +0 -0
  50. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/base.py +0 -0
  51. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/client.py +0 -0
  52. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/command_center/__init__.py +0 -0
  53. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/command_center/app_component.py +0 -0
  54. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/command_center/connections.py +0 -0
  55. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/command_center/data_models.py +0 -0
  56. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/command_center/workspace.py +0 -0
  57. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
  58. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/compute_validation.py +0 -0
  59. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  60. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  61. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  62. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  63. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/dtype_codec.py +0 -0
  64. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/exceptions.py +0 -0
  65. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/fastapi/__init__.py +0 -0
  66. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/fastapi/auth.py +0 -0
  67. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/metatables/__init__.py +0 -0
  68. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/metatables/core.py +0 -0
  69. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/models_foundry.py +0 -0
  70. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/models_helpers.py +0 -0
  71. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/models_user.py +0 -0
  72. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/client/utils.py +0 -0
  73. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/defaults.py +0 -0
  74. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/instrumentation/__init__.py +0 -0
  75. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/instrumentation/utils.py +0 -0
  76. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/logconf.py +0 -0
  77. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/__init__.py +0 -0
  78. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/__main__.py +0 -0
  79. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  80. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  81. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  82. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
  83. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
  84. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  85. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  86. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
  87. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  88. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  89. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/future_registry.py +0 -0
  90. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/hashing.py +0 -0
  91. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  92. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/env.py +0 -0
  93. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/provider.py +0 -0
  94. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/registry.py +0 -0
  95. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  96. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  97. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  98. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  99. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  100. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/meta_tables/schema_names.py +0 -0
  101. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence/runtime_flags.py +0 -0
  102. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence.egg-info/SOURCES.txt +0 -0
  103. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence.egg-info/dependency_links.txt +0 -0
  104. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence.egg-info/entry_points.txt +0 -0
  105. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence.egg-info/requires.txt +0 -0
  106. {mainsequence-4.4.2 → mainsequence-4.4.3}/mainsequence.egg-info/top_level.txt +0 -0
  107. {mainsequence-4.4.2 → mainsequence-4.4.3}/setup.cfg +0 -0
  108. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_auth_precedence.py +0 -0
  109. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_build_operations_hashing.py +0 -0
  110. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_cli.py +0 -0
  111. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_cli_browser_auth.py +0 -0
  112. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_cli_migrations.py +0 -0
  113. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_client.py +0 -0
  114. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_command_center_app_component_models.py +0 -0
  115. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_command_center_data_models.py +0 -0
  116. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_command_center_models.py +0 -0
  117. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_data_access_mixin_dimension_audit.py +0 -0
  118. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_data_node_storage_dimension_queries.py +0 -0
  119. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_data_node_update_flow.py +0 -0
  120. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_dependency_extras.py +0 -0
  121. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_duckdb_interface_dimensions.py +0 -0
  122. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_filter_normalization.py +0 -0
  123. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_instrumentation.py +0 -0
  124. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_logconf.py +0 -0
  125. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_meta_table_migrations.py +0 -0
  126. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_meta_tables_client_models.py +0 -0
  127. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_models_user_request_bound_auth.py +0 -0
  128. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_pod_project_resolution.py +0 -0
  129. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_project_batch_jobs_from_file.py +0 -0
  130. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_run_configuration.py +0 -0
  131. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_schema_names.py +0 -0
  132. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_secret_client_model.py +0 -0
  133. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_source_table_configuration.py +0 -0
  134. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_sqlite_interface_dimensions.py +0 -0
  135. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_update_runner_uid_runtime.py +0 -0
  136. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_update_statistics.py +0 -0
  137. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_update_uid_guards.py +0 -0
  138. {mainsequence-4.4.2 → mainsequence-4.4.3}/tests/test_workspace_snapshot.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 4.4.2
3
+ Version: 4.4.3
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License: MainSequence GmbH SDK License Agreement
@@ -452,7 +452,6 @@ class AlembicMetaTableMigration:
452
452
  request = model.build_registration_request(
453
453
  data_source_uid=data_source_uid,
454
454
  provisioning={"create_table": create_table, "if_not_exists": True},
455
- enforce_storage_hash_name=False,
456
455
  )
457
456
  request.schema_management = schema_management
458
457
  meta_table_cls = _metatable_resource_class_for_model(model)
@@ -624,7 +623,6 @@ class AlembicMetaTableMigration:
624
623
  request = model.build_registration_request(
625
624
  data_source_uid=data_source_uid,
626
625
  identifier=table_name,
627
- enforce_storage_hash_name=False,
628
626
  )
629
627
 
630
628
  resource_cls = _metatable_resource_class_for_model(model)
@@ -90,15 +90,11 @@ def _configured_storage_hash_for_model(
90
90
  *,
91
91
  namespace: str | None = None,
92
92
  schema: str | None = None,
93
- hash_namespace: str | None = None,
94
- extra_hash_components: Mapping[str, Any] | None = None,
95
93
  ) -> str:
96
94
  return compute_metatable_contract_hash(
97
95
  model_or_table,
98
96
  namespace=namespace,
99
97
  schema=schema,
100
- hash_namespace=hash_namespace,
101
- extra_components=extra_hash_components,
102
98
  )
103
99
 
104
100
 
@@ -122,11 +118,9 @@ def compute_metatable_contract_hash(
122
118
  resolved_schema = _resolve_schema(table, schema=schema)
123
119
  resolved_namespace = _resolve_namespace(model_or_table, namespace=namespace)
124
120
  resolved_hash_namespace = _resolve_hash_namespace(
125
- model_or_table,
126
121
  hash_namespace=hash_namespace,
127
122
  )
128
123
  resolved_extra_hash_components = _resolve_extra_hash_components(
129
- model_or_table,
130
124
  extra_hash_components=extra_components,
131
125
  )
132
126
  table_storage_identity = _configured_table_storage_identity(model_or_table, table=table)
@@ -164,9 +158,8 @@ def _time_index_mapper_args(cls: type[Any]) -> dict[str, list[Any]]:
164
158
  class PlatformManagedMetaTable:
165
159
  """SQLAlchemy declarative base mixin for platform-managed MetaTables.
166
160
 
167
- The class derives the logical storage hash from storage-relevant metadata
168
- plus the SQLAlchemy table storage shape, builds the platform registration
169
- request, and registers the MetaTable through TS Manager. Binding records the
161
+ The class builds the platform registration request from SQLAlchemy table
162
+ metadata and registers the MetaTable through TS Manager. Binding records the
170
163
  returned MetaTable UID and storage metadata while preserving the authored
171
164
  SQLAlchemy table name.
172
165
  """
@@ -180,8 +173,6 @@ class PlatformManagedMetaTable:
180
173
  __metatable_provisioning__: ClassVar[Mapping[str, Any] | None] = None
181
174
  __metatable_protect_from_deletion__: ClassVar[bool | None] = None
182
175
  __metatable_introspect__: ClassVar[bool | None] = None
183
- __metatable_hash_namespace__: ClassVar[str | None] = None
184
- __metatable_extra_hash_components__: ClassVar[Mapping[str, Any] | None] = None
185
176
 
186
177
  @classmethod
187
178
  def __table_cls__(cls, *args: Any, **kwargs: Any) -> Any:
@@ -217,9 +208,6 @@ class PlatformManagedMetaTable:
217
208
  protect_from_deletion: bool | None = None,
218
209
  provisioning: Mapping[str, Any] | None = None,
219
210
  introspect: bool | None = None,
220
- hash_namespace: str | None = None,
221
- extra_hash_components: Mapping[str, Any] | None = None,
222
- enforce_storage_hash_name: bool = True,
223
211
  ) -> MetaTableRegistrationRequest:
224
212
  resolved_data_source_uid = _resolve_model_data_source_uid(
225
213
  cls,
@@ -236,9 +224,6 @@ class PlatformManagedMetaTable:
236
224
  protect_from_deletion=protect_from_deletion,
237
225
  provisioning=provisioning,
238
226
  introspect=introspect,
239
- hash_namespace=hash_namespace,
240
- extra_hash_components=extra_hash_components,
241
- enforce_storage_hash_name=enforce_storage_hash_name,
242
227
  )
243
228
 
244
229
  @classmethod
@@ -300,10 +285,6 @@ class PlatformManagedMetaTable:
300
285
  )
301
286
  return _coerce_optional_uid(data_source_uid)
302
287
 
303
- @classmethod
304
- def get_storage_hash(cls) -> str:
305
- return compute_metatable_contract_hash(cls)
306
-
307
288
  @classmethod
308
289
  def get_physical_table_name(cls) -> str | None:
309
290
  physical_table_name = getattr(cls, "__metatable_physical_table_name__", None)
@@ -385,9 +366,6 @@ class PlatformTimeIndexMetaTable(PlatformManagedMetaTable):
385
366
  labels: Sequence[str] | None = None,
386
367
  protect_from_deletion: bool | None = None,
387
368
  provisioning: Mapping[str, Any] | None = None,
388
- hash_namespace: str | None = None,
389
- extra_hash_components: Mapping[str, Any] | None = None,
390
- enforce_storage_hash_name: bool = True,
391
369
  time_index_name: str | None = None,
392
370
  index_names: Sequence[str] | None = None,
393
371
  storage_layout: Mapping[str, Any] | None = None,
@@ -406,9 +384,6 @@ class PlatformTimeIndexMetaTable(PlatformManagedMetaTable):
406
384
  labels=labels,
407
385
  protect_from_deletion=protect_from_deletion,
408
386
  provisioning=provisioning,
409
- hash_namespace=hash_namespace,
410
- extra_hash_components=extra_hash_components,
411
- enforce_storage_hash_name=enforce_storage_hash_name,
412
387
  time_index_name=time_index_name,
413
388
  index_names=index_names,
414
389
  storage_layout=storage_layout,
@@ -502,9 +477,6 @@ def time_indexed_registration_request_from_sqlalchemy_model(
502
477
  protect_from_deletion: bool | None = None,
503
478
  provisioning: Mapping[str, Any] | None = None,
504
479
  schema: str | None = None,
505
- hash_namespace: str | None = None,
506
- extra_hash_components: Mapping[str, Any] | None = None,
507
- enforce_storage_hash_name: bool = True,
508
480
  time_index_name: str | None = None,
509
481
  index_names: Sequence[str] | None = None,
510
482
  storage_layout: Mapping[str, Any] | None = None,
@@ -612,9 +584,6 @@ def platform_managed_registration_request_from_sqlalchemy_model(
612
584
  provisioning: Mapping[str, Any] | None = None,
613
585
  introspect: bool | None = None,
614
586
  schema: str | None = None,
615
- hash_namespace: str | None = None,
616
- extra_hash_components: Mapping[str, Any] | None = None,
617
- enforce_storage_hash_name: bool = True,
618
587
  ) -> MetaTableRegistrationRequest:
619
588
  table = _resolve_table(model_or_table)
620
589
  resolved_schema = _resolve_schema(table, schema=schema)
@@ -667,8 +636,6 @@ def external_registered_registration_request_from_sqlalchemy_model(
667
636
  protect_from_deletion: bool = False,
668
637
  introspect: bool = True,
669
638
  schema: str | None = None,
670
- hash_namespace: str | None = None,
671
- extra_hash_components: Mapping[str, Any] | None = None,
672
639
  ) -> MetaTableRegistrationRequest:
673
640
  table = _resolve_table(model_or_table)
674
641
  resolved_schema = _resolve_schema(table, schema=schema)
@@ -1059,24 +1026,17 @@ def _resolve_bool_metadata(
1059
1026
  return bool(resolved_value)
1060
1027
 
1061
1028
 
1062
- def _resolve_hash_namespace(model_or_table: Any, *, hash_namespace: str | None) -> str | None:
1029
+ def _resolve_hash_namespace(*, hash_namespace: str | None) -> str | None:
1063
1030
  if hash_namespace is not None:
1064
1031
  return hash_namespace
1065
- resolved_hash_namespace = getattr(model_or_table, "__metatable_hash_namespace__", None)
1066
- if resolved_hash_namespace in (None, ""):
1067
- return None
1068
- return str(resolved_hash_namespace)
1032
+ return None
1069
1033
 
1070
1034
 
1071
1035
  def _resolve_extra_hash_components(
1072
- model_or_table: Any,
1073
1036
  *,
1074
1037
  extra_hash_components: Mapping[str, Any] | None,
1075
1038
  ) -> dict[str, Any] | None:
1076
1039
  resolved: dict[str, Any] = {}
1077
- class_components = getattr(model_or_table, "__metatable_extra_hash_components__", None)
1078
- if isinstance(class_components, Mapping):
1079
- resolved.update(dict(class_components))
1080
1040
  if isinstance(extra_hash_components, Mapping):
1081
1041
  resolved.update(dict(extra_hash_components))
1082
1042
  return resolved or None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 4.4.2
3
+ Version: 4.4.3
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License: MainSequence GmbH SDK License Agreement
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "4.4.2"
7
+ version = "4.4.3"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1108,7 +1108,6 @@ def test_platform_managed_omits_foreign_key_contracts():
1108
1108
 
1109
1109
  request = Asset.build_registration_request(
1110
1110
  data_source_uid="dddddddd-dddd-4ddd-8ddd-dddddddddddd",
1111
- enforce_storage_hash_name=False,
1112
1111
  )
1113
1112
 
1114
1113
  assert not hasattr(request.table_contract, "foreign_keys")
@@ -1184,7 +1183,6 @@ def test_platform_managed_metatable_register_delegates_to_meta_table_register(mo
1184
1183
  assert Account.get_meta_table() is registered
1185
1184
  assert Account.get_meta_table_uid() == "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1186
1185
  assert Account.get_data_source_uid() == "dddddddd-dddd-4ddd-8ddd-dddddddddddd"
1187
- assert Account.get_storage_hash() == _configured_storage_hash(Account)
1188
1186
  assert Account.get_physical_table_name() == "example_assets__account"
1189
1187
  assert Account.__table__.name == "example_assets__account"
1190
1188
  assert captured["timeout"] == 15
@@ -1508,7 +1506,6 @@ def test_time_index_meta_table_register_posts_to_dynamic_table_endpoint(monkeypa
1508
1506
  assert AccountHoldings.get_meta_table() is registered
1509
1507
  assert AccountHoldings.get_time_index_meta_table() is registered
1510
1508
  assert AccountHoldings.get_meta_table_uid() == "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1511
- assert AccountHoldings.get_storage_hash() == _configured_storage_hash(AccountHoldings)
1512
1509
  assert AccountHoldings.get_physical_table_name() == "example_assets__account_holdings"
1513
1510
  assert AccountHoldings.__table__.name == "example_assets__account_holdings"
1514
1511
  assert captured["r_type"] == "POST"
@@ -1675,7 +1672,7 @@ def test_ensure_registered_storage_table_reports_duplicate_matches(monkeypatch):
1675
1672
  assert "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb" in message
1676
1673
 
1677
1674
 
1678
- def test_time_index_storage_name_hash_component_separates_identical_table_shapes():
1675
+ def test_contract_hash_extra_components_are_explicit_utility_inputs():
1679
1676
  columns_a = [
1680
1677
  FakeColumn("time_index", DateTime(timezone=True), nullable=False),
1681
1678
  FakeColumn("random_number", String(255), nullable=False),
@@ -1698,12 +1695,20 @@ def test_time_index_storage_name_hash_component_separates_identical_table_shapes
1698
1695
  namespace="mainsequence.examples",
1699
1696
  identifier="daily_random_addition_project",
1700
1697
  )
1701
- RandomNumber.__metatable_extra_hash_components__ = {"storage_name": "daily_random_number"}
1702
- RandomAddition.__metatable_extra_hash_components__ = {"storage_name": "daily_random_addition"}
1703
1698
 
1704
1699
  random_number_storage_hash = _configured_storage_hash(RandomNumber)
1705
1700
  random_addition_storage_hash = _configured_storage_hash(RandomAddition)
1706
1701
  assert random_number_storage_hash != random_addition_storage_hash
1702
+ assert (
1703
+ sqlalchemy_contracts.compute_metatable_contract_hash(
1704
+ RandomNumber,
1705
+ extra_components={"storage_name": "daily_random_number"},
1706
+ )
1707
+ != sqlalchemy_contracts.compute_metatable_contract_hash(
1708
+ RandomNumber,
1709
+ extra_components={"storage_name": "daily_random_addition"},
1710
+ )
1711
+ )
1707
1712
 
1708
1713
  request = time_indexed_registration_request_from_sqlalchemy_model(
1709
1714
  RandomNumber,
@@ -1901,7 +1906,7 @@ def test_platform_managed_register_preserves_authored_sqlalchemy_table_name(
1901
1906
 
1902
1907
  _assert_omits_storage_hash(captured["request"])
1903
1908
  assert captured["request"].table_contract.physical.table_name == "example_assets__account"
1904
- assert Account.get_storage_hash() == storage_hash
1909
+ assert _configured_storage_hash(Account) == storage_hash
1905
1910
  assert Account.get_physical_table_name() == "example_assets__account"
1906
1911
  assert Account.__table__.name == "example_assets__account"
1907
1912
  assert Account.__table__.schema is None
File without changes
File without changes
File without changes