mainsequence 4.3.26__tar.gz → 4.3.30__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.
- {mainsequence-4.3.26/mainsequence.egg-info → mainsequence-4.3.30}/PKG-INFO +1 -1
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/metatables/core.py +20 -3
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/models_foundry.py +0 -5
- {mainsequence-4.3.26 → mainsequence-4.3.30/mainsequence.egg-info}/PKG-INFO +1 -1
- {mainsequence-4.3.26 → mainsequence-4.3.30}/pyproject.toml +1 -1
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_dependency_extras.py +38 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_meta_tables_client_models.py +28 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_pod_project_resolution.py +36 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/LICENSE +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/README.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/__main__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/bootstrap.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/api.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/cli.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/config.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/migrations.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/project_status.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/cli/ui.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/base.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/client.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/app_component.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/connections.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/data_models.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/workspace.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/dtype_codec.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/fastapi/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/fastapi/auth.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/metatables/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/models_user.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/utils.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/defaults.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/logconf.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/__main__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/models.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/future_registry.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/hashing.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/alembic.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/env.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/provider.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/registry.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/schema_names.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/setup.cfg +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_auth_precedence.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_build_operations_hashing.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_cli.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_cli_migrations.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_client.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_command_center_app_component_models.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_command_center_data_models.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_command_center_models.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_data_access_mixin_dimension_audit.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_data_node_storage_dimension_queries.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_data_node_update_flow.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_filter_normalization.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_instrumentation.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_logconf.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_meta_table_migrations.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_project_batch_jobs_from_file.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_run_configuration.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_schema_names.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_secret_client_model.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_update_statistics.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_update_uid_guards.py +0 -0
- {mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_workspace_snapshot.py +0 -0
|
@@ -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,
|
|
@@ -488,7 +488,8 @@ class MetaTableOperationScope(BasePydanticModel):
|
|
|
488
488
|
except Exception as exc:
|
|
489
489
|
raise ValueError(
|
|
490
490
|
"MetaTable compiled SQL scope requires data_source_uid or a "
|
|
491
|
-
"configured project/session default data source."
|
|
491
|
+
"configured project/session default data source. "
|
|
492
|
+
f"Default data source resolution failed: {exc}"
|
|
492
493
|
) from exc
|
|
493
494
|
|
|
494
495
|
uid = getattr(data_source, "uid", None) or getattr(data_source, "data_source_uid", None)
|
|
@@ -4597,6 +4598,14 @@ def _build_local_pod_project_resolution() -> _PodProjectResolution:
|
|
|
4597
4598
|
)
|
|
4598
4599
|
try:
|
|
4599
4600
|
project = Project.get(pk=running_project_uid)
|
|
4601
|
+
except (AuthenticationError, PermissionDeniedError) as exc:
|
|
4602
|
+
raise RuntimeError(
|
|
4603
|
+
"Could not resolve the local project default data source because SDK "
|
|
4604
|
+
"authentication/authorization failed while loading project "
|
|
4605
|
+
f"{running_project_uid!r}. "
|
|
4606
|
+
"Run `mainsequence login` or export MAINSEQUENCE_ACCESS_TOKEN / "
|
|
4607
|
+
f"MAINSEQUENCE_REFRESH_TOKEN. Backend response: {exc}"
|
|
4608
|
+
) from exc
|
|
4600
4609
|
except DoesNotExist:
|
|
4601
4610
|
return _PodProjectResolution(
|
|
4602
4611
|
project=None,
|
|
@@ -4778,7 +4787,15 @@ def get_session_data_source() -> Any:
|
|
|
4778
4787
|
SessionDataSource.set_remote_db()
|
|
4779
4788
|
data_source = getattr(SessionDataSource, "data_source", None)
|
|
4780
4789
|
if getattr(data_source, "related_resource", None) is None:
|
|
4781
|
-
|
|
4790
|
+
resolution = _resolve_local_pod_project()
|
|
4791
|
+
detail = (resolution.detail or "No local pod project attached.").strip()
|
|
4792
|
+
if detail and not detail.endswith("."):
|
|
4793
|
+
detail += "."
|
|
4794
|
+
raise RuntimeError(
|
|
4795
|
+
"Could not resolve a session default data source. "
|
|
4796
|
+
f"{detail} Run inside a configured Main Sequence project/session, "
|
|
4797
|
+
"or pass data_source_uid explicitly."
|
|
4798
|
+
)
|
|
4782
4799
|
return data_source
|
|
4783
4800
|
|
|
4784
4801
|
|
|
@@ -1071,8 +1071,3 @@ class Constant(ShareableObjectMixin, BasePydanticModel, BaseObjectOrm):
|
|
|
1071
1071
|
new_constant = cls.create(name=k, value=v)
|
|
1072
1072
|
created_constants.append(new_constant)
|
|
1073
1073
|
return created_constants
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
from . import metatables as _models_metatables # noqa: E402
|
|
1077
|
-
|
|
1078
|
-
_models_metatables.SessionDataSource.set_remote_db()
|
|
@@ -6,6 +6,16 @@ import pathlib
|
|
|
6
6
|
import sys
|
|
7
7
|
import types
|
|
8
8
|
|
|
9
|
+
import pytest
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _snapshot_mainsequence_modules() -> dict[str, types.ModuleType]:
|
|
13
|
+
return {
|
|
14
|
+
name: module
|
|
15
|
+
for name, module in sys.modules.items()
|
|
16
|
+
if name == "mainsequence" or name.startswith("mainsequence.")
|
|
17
|
+
}
|
|
18
|
+
|
|
9
19
|
|
|
10
20
|
def _reset_mainsequence_modules() -> None:
|
|
11
21
|
for name in tuple(sys.modules):
|
|
@@ -13,6 +23,14 @@ def _reset_mainsequence_modules() -> None:
|
|
|
13
23
|
sys.modules.pop(name, None)
|
|
14
24
|
|
|
15
25
|
|
|
26
|
+
@pytest.fixture(autouse=True)
|
|
27
|
+
def _restore_mainsequence_modules_after_import_test():
|
|
28
|
+
snapshot = _snapshot_mainsequence_modules()
|
|
29
|
+
yield
|
|
30
|
+
_reset_mainsequence_modules()
|
|
31
|
+
sys.modules.update(snapshot)
|
|
32
|
+
|
|
33
|
+
|
|
16
34
|
def _seed_mainsequence_packages() -> None:
|
|
17
35
|
repo_root = pathlib.Path(__file__).resolve().parents[1]
|
|
18
36
|
pkg_root = repo_root / "mainsequence"
|
|
@@ -52,6 +70,26 @@ def test_core_client_import_does_not_require_duckdb(monkeypatch):
|
|
|
52
70
|
assert not hasattr(foundry_module, "DynamicTableDataSource")
|
|
53
71
|
|
|
54
72
|
|
|
73
|
+
def test_models_foundry_import_does_not_resolve_session_data_source(monkeypatch):
|
|
74
|
+
_reset_mainsequence_modules()
|
|
75
|
+
_seed_mainsequence_packages()
|
|
76
|
+
|
|
77
|
+
metatables_module = importlib.import_module("mainsequence.client.metatables")
|
|
78
|
+
|
|
79
|
+
def _fail_import_time_resolution():
|
|
80
|
+
raise AssertionError("models_foundry import must not resolve SessionDataSource")
|
|
81
|
+
|
|
82
|
+
monkeypatch.setattr(
|
|
83
|
+
metatables_module.SessionDataSource,
|
|
84
|
+
"set_remote_db",
|
|
85
|
+
_fail_import_time_resolution,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
foundry_module = importlib.import_module("mainsequence.client.models_foundry")
|
|
89
|
+
|
|
90
|
+
assert hasattr(foundry_module, "Project")
|
|
91
|
+
|
|
92
|
+
|
|
55
93
|
def test_duckdb_helper_points_to_local_data_extra(monkeypatch):
|
|
56
94
|
_reset_mainsequence_modules()
|
|
57
95
|
_seed_mainsequence_packages()
|
|
@@ -956,6 +956,34 @@ def test_compiled_sql_v1_scope_resolves_session_data_source(monkeypatch):
|
|
|
956
956
|
)
|
|
957
957
|
|
|
958
958
|
|
|
959
|
+
def test_compiled_sql_v1_scope_preserves_session_data_source_auth_failure(monkeypatch):
|
|
960
|
+
def _raise_auth_failure():
|
|
961
|
+
raise RuntimeError(
|
|
962
|
+
"Could not resolve the local project default data source because SDK "
|
|
963
|
+
"authentication/authorization failed."
|
|
964
|
+
)
|
|
965
|
+
|
|
966
|
+
monkeypatch.setattr(meta_table_models, "get_session_data_source", _raise_auth_failure)
|
|
967
|
+
|
|
968
|
+
with pytest.raises(ValidationError) as exc_info:
|
|
969
|
+
build_operation(
|
|
970
|
+
operation="select",
|
|
971
|
+
sql="SELECT asset.symbol FROM public.asset AS asset",
|
|
972
|
+
scope={
|
|
973
|
+
"tables": [
|
|
974
|
+
{
|
|
975
|
+
"metaTableUid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
|
|
976
|
+
"alias": "asset",
|
|
977
|
+
}
|
|
978
|
+
]
|
|
979
|
+
},
|
|
980
|
+
)
|
|
981
|
+
|
|
982
|
+
message = str(exc_info.value)
|
|
983
|
+
assert "Default data source resolution failed" in message
|
|
984
|
+
assert "SDK authentication/authorization failed" in message
|
|
985
|
+
|
|
986
|
+
|
|
959
987
|
def test_compiled_sql_v1_serializes_typed_temporal_parameters():
|
|
960
988
|
operation = build_operation(
|
|
961
989
|
operation="select",
|
|
@@ -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
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/a2a_communication/SKILL.md
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
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/dashboards/streamlit/SKILL.md
RENAMED
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/data_access/exploration/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md
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
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/app_component.py
RENAMED
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/connections.py
RENAMED
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/data_models.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/command_center/workspace_snapshot.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/data_sources_interfaces/__init__.py
RENAMED
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/data_sources_interfaces/duckdb.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/client/data_sources_interfaces/sqlite.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
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/compiled_sql/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/build_operations.py
RENAMED
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/data_nodes.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/namespacing.py
RENAMED
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/persist_managers.py
RENAMED
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/data_nodes/run_operations.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
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/mainsequence/meta_tables/sqlalchemy_contracts.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
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_command_center_app_component_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.3.26 → mainsequence-4.3.30}/tests/test_data_node_storage_dimension_queries.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
|