mainsequence 6.0.30__tar.gz → 6.0.31__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 (125) hide show
  1. {mainsequence-6.0.30/mainsequence.egg-info → mainsequence-6.0.31}/PKG-INFO +1 -1
  2. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/metatables/core.py +4 -28
  3. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/compiled_sql/v1.py +7 -6
  4. {mainsequence-6.0.30 → mainsequence-6.0.31/mainsequence.egg-info}/PKG-INFO +1 -1
  5. {mainsequence-6.0.30 → mainsequence-6.0.31}/pyproject.toml +1 -1
  6. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_meta_tables_client_models.py +4 -35
  7. {mainsequence-6.0.30 → mainsequence-6.0.31}/LICENSE +0 -0
  8. {mainsequence-6.0.30 → mainsequence-6.0.31}/README.md +0 -0
  9. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/AGENTS.md +0 -0
  10. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  11. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  12. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  13. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
  14. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  15. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  16. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  17. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/maintenance/project-maintenance/SKILL.md +0 -0
  18. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  19. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  20. {mainsequence-6.0.30 → mainsequence-6.0.31}/agent_scaffold/skills/sdk_project_execution/SKILL.md +0 -0
  21. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/__init__.py +0 -0
  22. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/__main__.py +0 -0
  23. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/bootstrap.py +0 -0
  24. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/__init__.py +0 -0
  25. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/api.py +0 -0
  26. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/browser_auth.py +0 -0
  27. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/cli.py +0 -0
  28. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/config.py +0 -0
  29. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/docker_utils.py +0 -0
  30. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/doctor.py +0 -0
  31. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/local_ops.py +0 -0
  32. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/migrations.py +0 -0
  33. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/model_filters.py +0 -0
  34. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/project_status.py +0 -0
  35. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/pydantic_cli.py +0 -0
  36. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/sdk_utils.py +0 -0
  37. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/ssh_utils.py +0 -0
  38. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/cli/ui.py +0 -0
  39. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/__init__.py +0 -0
  40. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/agent_runtime_models.py +0 -0
  41. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/base.py +0 -0
  42. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/client.py +0 -0
  43. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/compute_validation.py +0 -0
  44. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  45. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  46. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  47. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  48. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/dtype_codec.py +0 -0
  49. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/exceptions.py +0 -0
  50. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/metatables/__init__.py +0 -0
  51. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/models_foundry.py +0 -0
  52. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/models_helpers.py +0 -0
  53. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/models_user.py +0 -0
  54. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/client/utils.py +0 -0
  55. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/defaults.py +0 -0
  56. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/instrumentation/__init__.py +0 -0
  57. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/instrumentation/utils.py +0 -0
  58. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/logconf.py +0 -0
  59. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/__init__.py +0 -0
  60. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/__main__.py +0 -0
  61. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  62. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  63. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
  64. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
  65. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  66. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  67. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
  68. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  69. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  70. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/future_registry.py +0 -0
  71. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/hashing.py +0 -0
  72. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  73. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  74. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/env.py +0 -0
  75. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/provider.py +0 -0
  76. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/registry.py +0 -0
  77. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  78. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  79. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  80. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  81. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  82. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/schema_names.py +0 -0
  83. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  84. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/project_skills.py +0 -0
  85. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/runtime_context.py +0 -0
  86. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/runtime_flags.py +0 -0
  87. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence/scaffold_skills.py +0 -0
  88. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence.egg-info/SOURCES.txt +0 -0
  89. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence.egg-info/dependency_links.txt +0 -0
  90. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence.egg-info/entry_points.txt +0 -0
  91. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence.egg-info/requires.txt +0 -0
  92. {mainsequence-6.0.30 → mainsequence-6.0.31}/mainsequence.egg-info/top_level.txt +0 -0
  93. {mainsequence-6.0.30 → mainsequence-6.0.31}/setup.cfg +0 -0
  94. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_auth_precedence.py +0 -0
  95. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_build_operations_hashing.py +0 -0
  96. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_canonical_api_route_contract.py +0 -0
  97. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_cli.py +0 -0
  98. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_cli_browser_auth.py +0 -0
  99. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_cli_migrations.py +0 -0
  100. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_client.py +0 -0
  101. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_data_access_mixin_dimension_audit.py +0 -0
  102. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_data_node_storage_dimension_queries.py +0 -0
  103. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_data_node_update_flow.py +0 -0
  104. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_dependency_extras.py +0 -0
  105. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_duckdb_interface_dimensions.py +0 -0
  106. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_filter_normalization.py +0 -0
  107. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_instrumentation.py +0 -0
  108. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_logconf.py +0 -0
  109. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_meta_table_migrations.py +0 -0
  110. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  111. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_models_user_request_bound_auth.py +0 -0
  112. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_notification_uid_contract.py +0 -0
  113. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_pod_project_resolution.py +0 -0
  114. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_project_batch_jobs_from_file.py +0 -0
  115. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_project_branch_contract.py +0 -0
  116. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_project_skills.py +0 -0
  117. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_run_configuration.py +0 -0
  118. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_scaffold_skills.py +0 -0
  119. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_schema_names.py +0 -0
  120. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_secret_client_model.py +0 -0
  121. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_source_table_configuration.py +0 -0
  122. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_sqlite_interface_dimensions.py +0 -0
  123. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_update_runner_uid_runtime.py +0 -0
  124. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_update_statistics.py +0 -0
  125. {mainsequence-6.0.30 → mainsequence-6.0.31}/tests/test_update_uid_guards.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 6.0.30
3
+ Version: 6.0.31
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -533,40 +533,16 @@ class MetaTableOperationScope(BasePydanticModel):
533
533
  min_length=1,
534
534
  validation_alias=AliasChoices("data_source_uid", "dataSourceUid"),
535
535
  description=(
536
- "Public UID of the DataSource that owns the compiled "
537
- "SQL execution connection. If omitted, the SDK resolves the "
538
- "configured project/session default data source. Scoped MetaTables "
539
- "are the permission contract, not the source of execution routing."
536
+ "Optional public UID of the DataSource that owns the compiled "
537
+ "SQL execution connection. If omitted, the backend derives the "
538
+ "connection from the declared MetaTable scope and rejects mixed "
539
+ "data sources."
540
540
  ),
541
541
  )
542
542
  tables: list[MetaTableOperationScopeTable] = Field(..., min_length=1)
543
543
 
544
544
  model_config = ConfigDict(populate_by_name=True)
545
545
 
546
- @model_validator(mode="after")
547
- def resolve_default_data_source_uid(self):
548
- if self.data_source_uid not in (None, ""):
549
- self.data_source_uid = str(self.data_source_uid)
550
- return self
551
-
552
- try:
553
- data_source = get_session_data_source()
554
- except Exception as exc:
555
- raise ValueError(
556
- "MetaTable compiled SQL scope requires data_source_uid or a "
557
- "configured project/session default data source. "
558
- f"Default data source resolution failed: {exc}"
559
- ) from exc
560
-
561
- uid = getattr(data_source, "uid", None) or getattr(data_source, "data_source_uid", None)
562
- if uid in (None, ""):
563
- raise ValueError(
564
- "Configured project/session default data source does not expose a uid."
565
- )
566
- self.data_source_uid = str(uid)
567
- return self
568
-
569
-
570
546
  class MetaTableProjectContextRequest(BaseModel):
571
547
  model_config = ConfigDict(extra="forbid", frozen=True)
572
548
 
@@ -34,8 +34,9 @@ def build_operation(
34
34
  Build and validate the TS Manager compiled-sql.v1 operation contract.
35
35
 
36
36
  This is the client-side protocol object. It is intentionally plain SQL plus
37
- bound parameters, an explicit execution data source, and declared MetaTable
38
- scope, not a serialized SQLAlchemy object.
37
+ bound parameters and declared MetaTable scope, not a serialized SQLAlchemy
38
+ object. The execution data source is optional because the backend can derive
39
+ it from the scoped MetaTables.
39
40
  """
40
41
 
41
42
  if parameters is None:
@@ -82,10 +83,10 @@ def compile_sqlalchemy_statement(
82
83
  """
83
84
  Compile a SQLAlchemy/Core statement into the TS Manager compiled-sql.v1 payload.
84
85
 
85
- ``data_source_uid`` selects the canonical DataSource connection. If it is
86
- omitted, the SDK resolves the configured project/session default data source.
87
- ``scope_tables`` remains the declared MetaTable permission scope for the
88
- operation.
86
+ ``data_source_uid`` optionally selects the canonical DataSource connection.
87
+ If it is omitted, the backend derives the connection from ``scope_tables``
88
+ and rejects a scope that spans multiple data sources. ``scope_tables`` is
89
+ also the declared MetaTable permission scope for the operation.
89
90
  """
90
91
 
91
92
  if dialect != "postgresql":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 6.0.30
3
+ Version: 6.0.31
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "6.0.30"
7
+ version = "6.0.31"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -1388,11 +1388,11 @@ def test_compiled_sql_v1_operation_uses_backend_limit_defaults():
1388
1388
  }
1389
1389
 
1390
1390
 
1391
- def test_compiled_sql_v1_scope_resolves_session_data_source(monkeypatch):
1391
+ def test_compiled_sql_v1_scope_omits_data_source_without_sdk_lookup(monkeypatch):
1392
1392
  monkeypatch.setattr(
1393
1393
  meta_table_models,
1394
1394
  "get_session_data_source",
1395
- lambda: SimpleNamespace(uid="dddddddd-dddd-4ddd-8ddd-dddddddddddd"),
1395
+ lambda: pytest.fail("Compiled SQL construction must not perform an SDK lookup."),
1396
1396
  )
1397
1397
 
1398
1398
  operation = build_operation(
@@ -1408,39 +1408,8 @@ def test_compiled_sql_v1_scope_resolves_session_data_source(monkeypatch):
1408
1408
  },
1409
1409
  )
1410
1410
 
1411
- assert operation.scope.data_source_uid == "dddddddd-dddd-4ddd-8ddd-dddddddddddd"
1412
- assert (
1413
- operation.model_dump(mode="json", by_alias=True)["scope"]["data_source_uid"]
1414
- == "dddddddd-dddd-4ddd-8ddd-dddddddddddd"
1415
- )
1416
-
1417
-
1418
- def test_compiled_sql_v1_scope_preserves_session_data_source_auth_failure(monkeypatch):
1419
- def _raise_auth_failure():
1420
- raise RuntimeError(
1421
- "Could not resolve the local project default data source because SDK "
1422
- "authentication/authorization failed."
1423
- )
1424
-
1425
- monkeypatch.setattr(meta_table_models, "get_session_data_source", _raise_auth_failure)
1426
-
1427
- with pytest.raises(ValidationError) as exc_info:
1428
- build_operation(
1429
- operation="select",
1430
- sql="SELECT asset.symbol FROM public.asset AS asset",
1431
- scope={
1432
- "tables": [
1433
- {
1434
- "metaTableUid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1435
- "alias": "asset",
1436
- }
1437
- ]
1438
- },
1439
- )
1440
-
1441
- message = str(exc_info.value)
1442
- assert "Default data source resolution failed" in message
1443
- assert "SDK authentication/authorization failed" in message
1411
+ assert operation.scope.data_source_uid is None
1412
+ assert "data_source_uid" not in meta_table_models._payload_json(operation)["scope"]
1444
1413
 
1445
1414
 
1446
1415
  def test_compiled_sql_v1_serializes_typed_temporal_parameters():
File without changes
File without changes
File without changes