Skip to content

Commit 106ef05

Browse files
fix: ignore relative snapshot base overrides (#2976)
Co-authored-by: Kazuhiro Sera <seratch@openai.com>
1 parent 2a515f0 commit 106ef05

File tree

2 files changed

+60
-4
lines changed

2 files changed

+60
-4
lines changed

src/agents/sandbox/snapshot_defaults.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,24 @@
44
import sys
55
import time
66
from collections.abc import Mapping
7-
from pathlib import Path
7+
from pathlib import Path, PureWindowsPath
88

99
from .snapshot import LocalSnapshotSpec
1010

1111
_DEFAULT_LOCAL_SNAPSHOT_TTL_SECONDS = 60 * 60 * 24 * 30
1212
_DEFAULT_LOCAL_SNAPSHOT_SUBDIR = Path("openai-agents-python") / "sandbox" / "snapshots"
1313

1414

15+
def _first_absolute_windows_env_path(env: Mapping[str, str], *names: str) -> Path | None:
16+
for name in names:
17+
value = env.get(name)
18+
if not value:
19+
continue
20+
if PureWindowsPath(value).is_absolute():
21+
return Path(value)
22+
return None
23+
24+
1525
def default_local_snapshot_base_dir(
1626
*,
1727
home: Path | None = None,
@@ -27,8 +37,12 @@ def default_local_snapshot_base_dir(
2737
if resolved_platform == "darwin":
2838
base = resolved_home / "Library" / "Application Support"
2939
elif resolved_os_name == "nt":
30-
local_app_data = resolved_env.get("LOCALAPPDATA") or resolved_env.get("APPDATA")
31-
base = Path(local_app_data) if local_app_data else resolved_home / "AppData" / "Local"
40+
env_base = _first_absolute_windows_env_path(
41+
resolved_env,
42+
"LOCALAPPDATA",
43+
"APPDATA",
44+
)
45+
base = env_base if env_base is not None else resolved_home / "AppData" / "Local"
3246
else:
3347
xdg_state_home = resolved_env.get("XDG_STATE_HOME")
3448
base = Path(xdg_state_home) if xdg_state_home else resolved_home / ".local" / "state"

tests/sandbox/test_snapshot_defaults.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def test_default_local_snapshot_base_dir_uses_macos_application_support(tmp_path
4545

4646

4747
def test_default_local_snapshot_base_dir_uses_localappdata_on_windows(tmp_path: Path) -> None:
48-
local_app_data = tmp_path / "LocalAppData"
48+
local_app_data = Path(r"C:\Users\me\AppData\Local")
4949
result = default_local_snapshot_base_dir(
5050
home=tmp_path / "home",
5151
env={"LOCALAPPDATA": str(local_app_data)},
@@ -56,6 +56,48 @@ def test_default_local_snapshot_base_dir_uses_localappdata_on_windows(tmp_path:
5656
assert result == local_app_data / "openai-agents-python" / "sandbox" / "snapshots"
5757

5858

59+
def test_default_local_snapshot_base_dir_uses_absolute_appdata_when_localappdata_is_relative(
60+
tmp_path: Path,
61+
) -> None:
62+
app_data = Path(r"C:\Users\me\AppData\Roaming")
63+
result = default_local_snapshot_base_dir(
64+
home=tmp_path / "home",
65+
env={"LOCALAPPDATA": "relative-local", "APPDATA": str(app_data)},
66+
platform="win32",
67+
os_name="nt",
68+
)
69+
70+
assert result == app_data / "openai-agents-python" / "sandbox" / "snapshots"
71+
72+
73+
def test_default_local_snapshot_base_dir_ignores_relative_windows_env_paths(
74+
tmp_path: Path,
75+
) -> None:
76+
home = tmp_path / "home"
77+
result = default_local_snapshot_base_dir(
78+
home=home,
79+
env={"LOCALAPPDATA": "relative-local", "APPDATA": "relative-roaming"},
80+
platform="win32",
81+
os_name="nt",
82+
)
83+
84+
assert result == home / "AppData" / "Local" / "openai-agents-python" / "sandbox" / "snapshots"
85+
86+
87+
def test_default_local_snapshot_base_dir_ignores_posix_absolute_localappdata_on_windows(
88+
tmp_path: Path,
89+
) -> None:
90+
home = tmp_path / "home"
91+
result = default_local_snapshot_base_dir(
92+
home=home,
93+
env={"LOCALAPPDATA": "/tmp/localappdata"},
94+
platform="win32",
95+
os_name="nt",
96+
)
97+
98+
assert result == home / "AppData" / "Local" / "openai-agents-python" / "sandbox" / "snapshots"
99+
100+
59101
def test_cleanup_stale_default_local_snapshots_removes_only_old_tar_files(tmp_path: Path) -> None:
60102
managed_dir = tmp_path / "snapshots"
61103
managed_dir.mkdir()

0 commit comments

Comments
 (0)