mainsequence 4.3.26__tar.gz → 4.3.28__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.3.26/mainsequence.egg-info → mainsequence-4.3.28}/PKG-INFO +1 -1
  2. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/metatables/core.py +18 -2
  3. {mainsequence-4.3.26 → mainsequence-4.3.28/mainsequence.egg-info}/PKG-INFO +1 -1
  4. {mainsequence-4.3.26 → mainsequence-4.3.28}/pyproject.toml +1 -1
  5. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_pod_project_resolution.py +36 -0
  6. {mainsequence-4.3.26 → mainsequence-4.3.28}/LICENSE +0 -0
  7. {mainsequence-4.3.26 → mainsequence-4.3.28}/README.md +0 -0
  8. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/AGENTS.md +0 -0
  9. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
  10. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  11. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
  12. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
  13. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
  14. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
  15. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
  16. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
  17. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
  18. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
  19. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  20. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
  21. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  22. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  23. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  24. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
  25. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  26. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  27. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
  28. {mainsequence-4.3.26 → mainsequence-4.3.28}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
  29. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/__init__.py +0 -0
  30. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/__main__.py +0 -0
  31. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/bootstrap.py +0 -0
  32. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/__init__.py +0 -0
  33. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/api.py +0 -0
  34. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/browser_auth.py +0 -0
  35. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/cli.py +0 -0
  36. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/config.py +0 -0
  37. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/docker_utils.py +0 -0
  38. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/doctor.py +0 -0
  39. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/local_ops.py +0 -0
  40. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/migrations.py +0 -0
  41. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/model_filters.py +0 -0
  42. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/project_status.py +0 -0
  43. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/pydantic_cli.py +0 -0
  44. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/sdk_utils.py +0 -0
  45. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/ssh_utils.py +0 -0
  46. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/cli/ui.py +0 -0
  47. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/__init__.py +0 -0
  48. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/agent_runtime_models.py +0 -0
  49. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/base.py +0 -0
  50. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/client.py +0 -0
  51. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/command_center/__init__.py +0 -0
  52. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/command_center/app_component.py +0 -0
  53. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/command_center/connections.py +0 -0
  54. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/command_center/data_models.py +0 -0
  55. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/command_center/workspace.py +0 -0
  56. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
  57. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/compute_validation.py +0 -0
  58. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  59. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  60. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  61. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  62. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/dtype_codec.py +0 -0
  63. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/exceptions.py +0 -0
  64. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/fastapi/__init__.py +0 -0
  65. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/fastapi/auth.py +0 -0
  66. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/metatables/__init__.py +0 -0
  67. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/models_foundry.py +0 -0
  68. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/models_helpers.py +0 -0
  69. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/models_user.py +0 -0
  70. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/client/utils.py +0 -0
  71. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/defaults.py +0 -0
  72. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/instrumentation/__init__.py +0 -0
  73. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/instrumentation/utils.py +0 -0
  74. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/logconf.py +0 -0
  75. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/__init__.py +0 -0
  76. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/__main__.py +0 -0
  77. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  78. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  79. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  80. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
  81. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
  82. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  83. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  84. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
  85. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  86. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  87. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/future_registry.py +0 -0
  88. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/hashing.py +0 -0
  89. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  90. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  91. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/env.py +0 -0
  92. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/provider.py +0 -0
  93. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/registry.py +0 -0
  94. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  95. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  96. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  97. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  98. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  99. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/schema_names.py +0 -0
  100. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  101. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence/runtime_flags.py +0 -0
  102. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence.egg-info/SOURCES.txt +0 -0
  103. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence.egg-info/dependency_links.txt +0 -0
  104. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence.egg-info/entry_points.txt +0 -0
  105. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence.egg-info/requires.txt +0 -0
  106. {mainsequence-4.3.26 → mainsequence-4.3.28}/mainsequence.egg-info/top_level.txt +0 -0
  107. {mainsequence-4.3.26 → mainsequence-4.3.28}/setup.cfg +0 -0
  108. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_auth_precedence.py +0 -0
  109. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_build_operations_hashing.py +0 -0
  110. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_cli.py +0 -0
  111. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_cli_browser_auth.py +0 -0
  112. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_cli_migrations.py +0 -0
  113. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_client.py +0 -0
  114. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_command_center_app_component_models.py +0 -0
  115. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_command_center_data_models.py +0 -0
  116. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_command_center_models.py +0 -0
  117. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_data_access_mixin_dimension_audit.py +0 -0
  118. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_data_node_storage_dimension_queries.py +0 -0
  119. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_data_node_update_flow.py +0 -0
  120. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_dependency_extras.py +0 -0
  121. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_duckdb_interface_dimensions.py +0 -0
  122. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_filter_normalization.py +0 -0
  123. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_instrumentation.py +0 -0
  124. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_logconf.py +0 -0
  125. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_meta_table_migrations.py +0 -0
  126. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_meta_tables_client_models.py +0 -0
  127. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  128. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_models_user_request_bound_auth.py +0 -0
  129. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_project_batch_jobs_from_file.py +0 -0
  130. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_run_configuration.py +0 -0
  131. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_schema_names.py +0 -0
  132. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_secret_client_model.py +0 -0
  133. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_source_table_configuration.py +0 -0
  134. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_sqlite_interface_dimensions.py +0 -0
  135. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_update_runner_uid_runtime.py +0 -0
  136. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_update_statistics.py +0 -0
  137. {mainsequence-4.3.26 → mainsequence-4.3.28}/tests/test_update_uid_guards.py +0 -0
  138. {mainsequence-4.3.26 → mainsequence-4.3.28}/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.26
3
+ Version: 4.3.28
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
@@ -44,7 +44,7 @@ from ..dtype_codec import (
44
44
  serialize_remote_parameters,
45
45
  token_to_pandas_series,
46
46
  )
47
- from ..exceptions import raise_for_response
47
+ from ..exceptions import AuthenticationError, PermissionDeniedError, raise_for_response
48
48
  from ..utils import (
49
49
  TDAG_CONSTANTS,
50
50
  DateInfo,
@@ -4597,6 +4597,14 @@ def _build_local_pod_project_resolution() -> _PodProjectResolution:
4597
4597
  )
4598
4598
  try:
4599
4599
  project = Project.get(pk=running_project_uid)
4600
+ except (AuthenticationError, PermissionDeniedError) as exc:
4601
+ raise RuntimeError(
4602
+ "Could not resolve the local project default data source because SDK "
4603
+ "authentication/authorization failed while loading project "
4604
+ f"{running_project_uid!r}. "
4605
+ "Run `mainsequence login` or export MAINSEQUENCE_ACCESS_TOKEN / "
4606
+ f"MAINSEQUENCE_REFRESH_TOKEN. Backend response: {exc}"
4607
+ ) from exc
4600
4608
  except DoesNotExist:
4601
4609
  return _PodProjectResolution(
4602
4610
  project=None,
@@ -4778,7 +4786,15 @@ def get_session_data_source() -> Any:
4778
4786
  SessionDataSource.set_remote_db()
4779
4787
  data_source = getattr(SessionDataSource, "data_source", None)
4780
4788
  if getattr(data_source, "related_resource", None) is None:
4781
- raise Exception("This Pod does not have a default data source")
4789
+ resolution = _resolve_local_pod_project()
4790
+ detail = (resolution.detail or "No local pod project attached.").strip()
4791
+ if detail and not detail.endswith("."):
4792
+ detail += "."
4793
+ raise RuntimeError(
4794
+ "Could not resolve a session default data source. "
4795
+ f"{detail} Run inside a configured Main Sequence project/session, "
4796
+ "or pass data_source_uid explicitly."
4797
+ )
4782
4798
  return data_source
4783
4799
 
4784
4800
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 4.3.26
3
+ Version: 4.3.28
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.26"
7
+ version = "4.3.28"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -4,6 +4,7 @@ import pytest
4
4
 
5
5
  import mainsequence.client.metatables as models_metatables
6
6
  import mainsequence.client.models_foundry as models_foundry
7
+ from mainsequence.client.exceptions import AuthenticationError
7
8
  from mainsequence.meta_tables.data_nodes import build_operations
8
9
 
9
10
  PROJECT_UID = "1d0530c0-65d1-4db0-856b-dc29d8260a09"
@@ -154,6 +155,41 @@ def test_set_remote_db_warns_once_for_lookup_failure(monkeypatch):
154
155
  assert debugs == []
155
156
 
156
157
 
158
+ def test_resolve_local_pod_project_raises_auth_failure(monkeypatch):
159
+ monkeypatch.setenv("MAIN_SEQUENCE_PROJECT_UID", PROJECT_UID)
160
+ monkeypatch.delenv("MAIN_SEQUENCE_PROJECT_ID", raising=False)
161
+
162
+ def _project_get(*args, **kwargs):
163
+ raise AuthenticationError("No auth configured.")
164
+
165
+ monkeypatch.setattr(models_foundry.Project, "get", _project_get)
166
+
167
+ with pytest.raises(RuntimeError) as exc_info:
168
+ models_metatables._resolve_local_pod_project()
169
+
170
+ message = str(exc_info.value)
171
+ assert "SDK authentication/authorization failed" in message
172
+ assert f"project {PROJECT_UID!r}" in message
173
+ assert "mainsequence login" in message
174
+ assert "No auth configured." in message
175
+
176
+
177
+ def test_get_session_data_source_reports_missing_project_uid(monkeypatch):
178
+ monkeypatch.delenv("MAIN_SEQUENCE_PROJECT_UID", raising=False)
179
+ monkeypatch.delenv("MAIN_SEQUENCE_PROJECT_ID", raising=False)
180
+ monkeypatch.setattr(models_metatables, "SessionDataSource", models_metatables.PodDataSource())
181
+ monkeypatch.setattr(models_metatables.logger, "debug", lambda message: None)
182
+
183
+ with pytest.raises(RuntimeError) as exc_info:
184
+ models_metatables.get_session_data_source()
185
+
186
+ message = str(exc_info.value)
187
+ assert "Could not resolve a session default data source." in message
188
+ assert "MAIN_SEQUENCE_PROJECT_UID is not configured." in message
189
+ assert "pass data_source_uid explicitly" in message
190
+ assert "This Pod does not have a default data source" not in message
191
+
192
+
157
193
  def test_data_source_create_duckdb_makes_creation_explicit(monkeypatch):
158
194
  captured = {}
159
195
  monkeypatch.setattr(models_metatables, "bios_uuid", lambda: "host-123")
File without changes
File without changes
File without changes