Skip to content

Commit bfc0c19

Browse files
authored
Align localshare default with per-user share policy
Defaults localshare per user like clustershare and fixes Windows test coverage for the default share user.
1 parent a97805d commit bfc0c19

4 files changed

Lines changed: 27 additions & 8 deletions

File tree

src/agilab/core/agi-env/src/agi_env/resources/.agilab/.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
# ALL AGI_xxx DIRs have to be relative path to user home
1313
#
1414
# MLFLOW_TRACKING_DIR=".mlfow"
15-
# AGI_CLUSTER_SHARE=clustershare
16-
# AGI_LOCAL_SHARE=localshare
15+
# AGI_CLUSTER_SHARE=clustershare/<user>
16+
# AGI_LOCAL_SHARE=localshare/<user>
1717
# AGI_LOG_DIR="log"
1818
# AGI_EXPORT_DIR="export"
1919

src/agilab/core/agi-env/src/agi_env/runtime/runtime_bootstrap_support.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ def default_share_user(*, environ) -> str:
2727
return safe_user or "user"
2828

2929

30+
def default_local_share(*, environ) -> str:
31+
"""Return the per-user fallback local share root."""
32+
return f"localshare/{default_share_user(environ=environ)}"
33+
34+
3035
def default_cluster_share(*, environ) -> str:
3136
"""Return the per-user fallback cluster share root."""
3237
return f"clustershare/{default_share_user(environ=environ)}"
@@ -110,7 +115,11 @@ def resolve_share_runtime_config(
110115
home_path,
111116
) -> ShareRuntimeConfig:
112117
"""Resolve local/cluster share settings and the effective runtime share path."""
113-
local_share = envars.get("AGI_LOCAL_SHARE") or environ.get("AGI_LOCAL_SHARE") or "localshare"
118+
local_share = (
119+
envars.get("AGI_LOCAL_SHARE")
120+
or environ.get("AGI_LOCAL_SHARE")
121+
or default_local_share(environ=environ)
122+
)
114123
cluster_share = (
115124
envars.get("AGI_CLUSTER_SHARE")
116125
or environ.get("AGI_CLUSTER_SHARE")

src/agilab/core/agi-env/test/test_agi_env_remaining_coverage.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import builtins
44
import importlib.util
5+
import os
56
import sys
67
from pathlib import Path
78
from types import ModuleType, SimpleNamespace
@@ -11,6 +12,7 @@
1112
import pytest
1213
from agi_env import AgiEnv, project_initialization_support
1314
from agi_env.agi_logger import AgiLogger
15+
from agi_env.runtime.runtime_bootstrap_support import default_local_share
1416

1517

1618
MODULE_PATH = Path("src/agilab/core/agi-env/src/agi_env/agi_env.py").resolve()
@@ -330,6 +332,10 @@ def _prepare_fake_home(tmp_path: Path, monkeypatch, *, env_text: str) -> Path:
330332
return fake_home
331333

332334

335+
def _default_dataset_root(fake_home: Path) -> Path:
336+
return fake_home / default_local_share(environ=os.environ) / "demo" / "dataset"
337+
338+
333339
def _configure_fake_installed_specs(monkeypatch, site_root: Path):
334340
agilab_pkg = site_root / "agilab"
335341
agi_env_pkg = site_root / "agi_env"
@@ -602,7 +608,7 @@ def test_init_preserves_existing_dataset_without_stamp_and_uses_windows_export_b
602608
worker_dir = app_root / "src" / "demo_worker"
603609
dataset_archive = worker_dir / "dataset.7z"
604610
dataset_archive.write_text("archive", encoding="utf-8")
605-
dataset_root = fake_home / "localshare" / "demo" / "dataset"
611+
dataset_root = _default_dataset_root(fake_home)
606612
dataset_root.mkdir(parents=True)
607613
(dataset_root / "existing.csv").write_text("value\n", encoding="utf-8")
608614
mock_logger = mock.Mock()
@@ -644,7 +650,7 @@ def test_init_dataset_stamp_probe_failure_appends_sys_path_and_sets_windows_expo
644650
worker_dir = app_root / "src" / "demo_worker"
645651
dataset_archive = worker_dir / "dataset.7z"
646652
dataset_archive.write_text("archive", encoding="utf-8")
647-
dataset_root = fake_home / "localshare" / "demo" / "dataset"
653+
dataset_root = _default_dataset_root(fake_home)
648654
dataset_root.mkdir(parents=True)
649655
(dataset_root / "existing.csv").write_text("value\n", encoding="utf-8")
650656
stamp_path = dataset_root / ".agilab_dataset_stamp"

src/agilab/core/agi-env/test/test_runtime_bootstrap_support.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from agi_env.runtime_bootstrap_support import (
88
default_cluster_share,
9+
default_local_share,
910
default_share_user,
1011
parse_int_env_value,
1112
resolve_share_runtime_config,
@@ -19,15 +20,17 @@ def test_parse_int_env_value_falls_back_for_blank_and_invalid():
1920
assert parse_int_env_value({"TABLE_MAX_ROWS": "42"}, "TABLE_MAX_ROWS", 100) == 42
2021

2122

22-
def test_default_cluster_share_is_user_scoped_and_filesystem_safe():
23+
def test_default_share_roots_are_user_scoped_and_filesystem_safe():
2324
environ = {"USER": "alice@example.com"}
2425

2526
assert default_share_user(environ=environ) == "alice_example.com"
27+
assert default_local_share(environ=environ) == "localshare/alice_example.com"
2628
assert default_cluster_share(environ=environ) == "clustershare/alice_example.com"
29+
assert default_local_share(environ={}) == "localshare/user"
2730
assert default_cluster_share(environ={}) == "clustershare/user"
2831

2932

30-
def test_resolve_share_runtime_config_defaults_cluster_share_per_user(tmp_path):
33+
def test_resolve_share_runtime_config_defaults_share_roots_per_user(tmp_path):
3134
result = resolve_share_runtime_config(
3235
envars={},
3336
environ={"USER": "demo-user"},
@@ -41,6 +44,7 @@ def test_resolve_share_runtime_config_defaults_cluster_share_per_user(tmp_path):
4144
home_path=tmp_path,
4245
)
4346

47+
assert result.local_share == "localshare/demo-user"
4448
assert result.cluster_share == "clustershare/demo-user"
4549
assert result.agi_share_path == "clustershare/demo-user"
4650

@@ -297,7 +301,7 @@ def test_resolve_share_runtime_config_applies_share_dir_override(tmp_path):
297301
home_path=tmp_path,
298302
)
299303

300-
assert result.local_share == "localshare"
304+
assert result.local_share == "localshare/user"
301305
assert result.cluster_share == "cluster_mount"
302306
assert result.agi_share_path == "cluster_mount"
303307
assert envars["AGI_CLUSTER_SHARE"] == "cluster_mount"

0 commit comments

Comments
 (0)