mainsequence 4.3.7__tar.gz → 4.3.8__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 (129) hide show
  1. {mainsequence-4.3.7/mainsequence.egg-info → mainsequence-4.3.8}/PKG-INFO +1 -1
  2. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/migrations.py +27 -1
  3. {mainsequence-4.3.7 → mainsequence-4.3.8/mainsequence.egg-info}/PKG-INFO +1 -1
  4. {mainsequence-4.3.7 → mainsequence-4.3.8}/pyproject.toml +1 -1
  5. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_meta_table_migrations.py +24 -12
  6. {mainsequence-4.3.7 → mainsequence-4.3.8}/LICENSE +0 -0
  7. {mainsequence-4.3.7 → mainsequence-4.3.8}/README.md +0 -0
  8. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/AGENTS.md +0 -0
  9. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
  10. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  11. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
  12. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
  13. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
  14. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
  15. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
  16. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
  17. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
  18. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
  19. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  20. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
  21. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  22. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  23. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
  24. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  25. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  26. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
  27. {mainsequence-4.3.7 → mainsequence-4.3.8}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
  28. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/__init__.py +0 -0
  29. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/__main__.py +0 -0
  30. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/bootstrap.py +0 -0
  31. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/__init__.py +0 -0
  32. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/api.py +0 -0
  33. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/browser_auth.py +0 -0
  34. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/cli.py +0 -0
  35. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/config.py +0 -0
  36. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/docker_utils.py +0 -0
  37. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/doctor.py +0 -0
  38. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/local_ops.py +0 -0
  39. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/migrations.py +0 -0
  40. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/model_filters.py +0 -0
  41. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/project_status.py +0 -0
  42. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/pydantic_cli.py +0 -0
  43. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/sdk_utils.py +0 -0
  44. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/ssh_utils.py +0 -0
  45. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/cli/ui.py +0 -0
  46. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/__init__.py +0 -0
  47. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/agent_runtime_models.py +0 -0
  48. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/base.py +0 -0
  49. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/client.py +0 -0
  50. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/command_center/__init__.py +0 -0
  51. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/command_center/app_component.py +0 -0
  52. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/command_center/connections.py +0 -0
  53. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/command_center/data_models.py +0 -0
  54. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/command_center/workspace.py +0 -0
  55. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
  56. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/compute_validation.py +0 -0
  57. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  58. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  59. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  60. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  61. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/dtype_codec.py +0 -0
  62. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/exceptions.py +0 -0
  63. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/fastapi/__init__.py +0 -0
  64. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/fastapi/auth.py +0 -0
  65. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/metatables/__init__.py +0 -0
  66. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/metatables/core.py +0 -0
  67. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/models_foundry.py +0 -0
  68. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/models_helpers.py +0 -0
  69. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/models_user.py +0 -0
  70. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/client/utils.py +0 -0
  71. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/defaults.py +0 -0
  72. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/instrumentation/__init__.py +0 -0
  73. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/instrumentation/utils.py +0 -0
  74. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/logconf.py +0 -0
  75. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/__init__.py +0 -0
  76. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/__main__.py +0 -0
  77. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  78. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  79. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  80. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
  81. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
  82. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  83. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  84. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
  85. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  86. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  87. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/future_registry.py +0 -0
  88. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/hashing.py +0 -0
  89. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  90. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/schema_names.py +0 -0
  91. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  92. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence/runtime_flags.py +0 -0
  93. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence.egg-info/SOURCES.txt +0 -0
  94. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence.egg-info/dependency_links.txt +0 -0
  95. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence.egg-info/entry_points.txt +0 -0
  96. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence.egg-info/requires.txt +0 -0
  97. {mainsequence-4.3.7 → mainsequence-4.3.8}/mainsequence.egg-info/top_level.txt +0 -0
  98. {mainsequence-4.3.7 → mainsequence-4.3.8}/setup.cfg +0 -0
  99. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_auth_precedence.py +0 -0
  100. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_build_operations_hashing.py +0 -0
  101. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_cli.py +0 -0
  102. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_cli_browser_auth.py +0 -0
  103. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_cli_migrations.py +0 -0
  104. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_client.py +0 -0
  105. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_command_center_app_component_models.py +0 -0
  106. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_command_center_data_models.py +0 -0
  107. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_command_center_models.py +0 -0
  108. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_data_access_mixin_dimension_audit.py +0 -0
  109. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_data_node_storage_dimension_queries.py +0 -0
  110. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_data_node_update_flow.py +0 -0
  111. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_dependency_extras.py +0 -0
  112. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_duckdb_interface_dimensions.py +0 -0
  113. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_filter_normalization.py +0 -0
  114. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_instrumentation.py +0 -0
  115. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_logconf.py +0 -0
  116. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_meta_tables_client_models.py +0 -0
  117. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  118. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_models_user_request_bound_auth.py +0 -0
  119. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_pod_project_resolution.py +0 -0
  120. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_project_batch_jobs_from_file.py +0 -0
  121. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_run_configuration.py +0 -0
  122. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_schema_names.py +0 -0
  123. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_secret_client_model.py +0 -0
  124. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_source_table_configuration.py +0 -0
  125. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_sqlite_interface_dimensions.py +0 -0
  126. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_update_runner_uid_runtime.py +0 -0
  127. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_update_statistics.py +0 -0
  128. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_update_uid_guards.py +0 -0
  129. {mainsequence-4.3.7 → mainsequence-4.3.8}/tests/test_workspace_snapshot.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 4.3.7
3
+ Version: 4.3.8
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
@@ -930,7 +930,9 @@ def _collection_create_row_from_registration_request(
930
930
  "alembic_revision": alembic_revision,
931
931
  "physical_table_name": str(physical_table_name),
932
932
  "protect_from_deletion": bool(getattr(request, "protect_from_deletion", False)),
933
- "table_contract": request.table_contract,
933
+ "table_contract": _collection_create_table_contract_payload(
934
+ request.table_contract
935
+ ),
934
936
  }
935
937
  time_index_name = getattr(request, "time_index_name", None)
936
938
  if time_index_name not in (None, ""):
@@ -944,6 +946,30 @@ def _collection_create_row_from_registration_request(
944
946
  return row
945
947
 
946
948
 
949
+ def _collection_create_table_contract_payload(table_contract: Any) -> dict[str, Any]:
950
+ if isinstance(table_contract, MetaTableContract):
951
+ payload = table_contract.model_dump(mode="json", exclude_none=True)
952
+ elif hasattr(table_contract, "model_dump"):
953
+ payload = table_contract.model_dump(mode="json", exclude_none=True)
954
+ elif isinstance(table_contract, Mapping):
955
+ payload = dict(table_contract)
956
+ else:
957
+ raise TypeError("Alembic MetaTable collection-create requires table_contract.")
958
+
959
+ physical = payload.get("physical")
960
+ if hasattr(physical, "model_dump"):
961
+ physical_payload = physical.model_dump(mode="json", exclude_none=True)
962
+ elif isinstance(physical, Mapping):
963
+ physical_payload = dict(physical)
964
+ else:
965
+ physical_payload = None
966
+ if physical_payload is not None:
967
+ for schema_key in ("schema", "schema_", "table_schema", "schema_name"):
968
+ physical_payload.pop(schema_key, None)
969
+ payload["physical"] = physical_payload
970
+ return payload
971
+
972
+
947
973
  def _request_contract_physical_table_name(request: Any) -> str | None:
948
974
  table_contract = getattr(request, "table_contract", None)
949
975
  if isinstance(table_contract, MetaTableContract):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 4.3.7
3
+ Version: 4.3.8
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.3.7"
7
+ version = "4.3.8"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -853,10 +853,12 @@ def test_prepare_for_alembic_preserves_authored_table_names(monkeypatch):
853
853
  assert all(table["management_mode"] == "platform_managed" for table in rows)
854
854
  assert all("schema_management" not in table for table in rows)
855
855
  assert all(table["protect_from_deletion"] is False for table in rows)
856
- assert not hasattr(rows[0]["table_contract"], "indexes")
857
- assert not hasattr(rows[1]["table_contract"], "indexes")
858
- assert not hasattr(rows[0]["table_contract"], "foreign_keys")
859
- assert not hasattr(rows[1]["table_contract"], "foreign_keys")
856
+ assert "indexes" not in rows[0]["table_contract"]
857
+ assert "indexes" not in rows[1]["table_contract"]
858
+ assert "foreign_keys" not in rows[0]["table_contract"]
859
+ assert "foreign_keys" not in rows[1]["table_contract"]
860
+ assert "schema" not in rows[0]["table_contract"]["physical"]
861
+ assert "schema" not in rows[1]["table_contract"]["physical"]
860
862
 
861
863
  response_tables = []
862
864
  for table in rows:
@@ -909,12 +911,20 @@ def test_prepare_for_alembic_preserves_authored_table_names(monkeypatch):
909
911
  ]
910
912
  assert Account.__table__.name == "example_assets__account"
911
913
  assert Asset.__table__.name == "example_assets__asset"
912
- assert reserved_payloads[0]["table_contract"].physical.table_name == "example_assets__account"
913
- assert reserved_payloads[1]["table_contract"].physical.table_name == "example_assets__asset"
914
+ assert (
915
+ reserved_payloads[0]["table_contract"]["physical"]["table_name"]
916
+ == "example_assets__account"
917
+ )
918
+ assert (
919
+ reserved_payloads[1]["table_contract"]["physical"]["table_name"]
920
+ == "example_assets__asset"
921
+ )
914
922
  assert "backend" not in str(next(iter(Asset.__table__.indexes)).name)
915
923
  assert next(iter(Asset.__table__.foreign_key_constraints)).name == "asset_account_uid_fkey"
916
- assert not hasattr(reserved_payloads[1]["table_contract"], "indexes")
917
- assert not hasattr(reserved_payloads[1]["table_contract"], "foreign_keys")
924
+ assert "indexes" not in reserved_payloads[1]["table_contract"]
925
+ assert "foreign_keys" not in reserved_payloads[1]["table_contract"]
926
+ assert "schema" not in reserved_payloads[0]["table_contract"]["physical"]
927
+ assert "schema" not in reserved_payloads[1]["table_contract"]["physical"]
918
928
  assert "schema_management" not in reserved_payloads[0]
919
929
  assert reserved_payloads[0]["protect_from_deletion"] is False
920
930
 
@@ -958,8 +968,9 @@ def test_prepare_for_alembic_does_not_resolve_foreign_key_targets(monkeypatch):
958
968
  assert rows[0]["migration_namespace"] == "markets"
959
969
  assert rows[0]["migration_provider_key"] == "sample:markets"
960
970
  assert rows[0]["is_alembic_managed"] is True
961
- assert not hasattr(rows[0]["table_contract"], "indexes")
962
- assert not hasattr(rows[0]["table_contract"], "foreign_keys")
971
+ assert "indexes" not in rows[0]["table_contract"]
972
+ assert "foreign_keys" not in rows[0]["table_contract"]
973
+ assert "schema" not in rows[0]["table_contract"]["physical"]
963
974
  assert "schema_management" not in rows[0]
964
975
  return [
965
976
  _reserved_metatable(
@@ -1194,8 +1205,9 @@ def test_prepare_for_alembic_reserves_existing_table_name_with_provider_identity
1194
1205
  assert all(table["migration_namespace"] == "markets" for table in rows)
1195
1206
  assert all(table["migration_provider_key"] == "sample:markets" for table in rows)
1196
1207
  assert all(table["is_alembic_managed"] is True for table in rows)
1197
- assert not hasattr(rows[0]["table_contract"], "indexes")
1198
- assert not hasattr(rows[0]["table_contract"], "foreign_keys")
1208
+ assert "indexes" not in rows[0]["table_contract"]
1209
+ assert "foreign_keys" not in rows[0]["table_contract"]
1210
+ assert "schema" not in rows[0]["table_contract"]["physical"]
1199
1211
  assert all("schema_management" not in table for table in rows)
1200
1212
  return [
1201
1213
  _reserved_metatable(
File without changes
File without changes
File without changes