diff --git a/src/agent_env/env/envs/computer/utils/site_proxy.py b/src/agent_env/env/envs/computer/utils/site_proxy.py index 0c14c9cf0..86ba64334 100644 --- a/src/agent_env/env/envs/computer/utils/site_proxy.py +++ b/src/agent_env/env/envs/computer/utils/site_proxy.py @@ -21,13 +21,16 @@ import asyncio import json import os -import pwd import shutil import socket import ssl import struct import subprocess import sys +try: + import pwd +except ImportError: + pwd = None import time import urllib.error import urllib.request @@ -611,7 +614,7 @@ def serve_user(session_user: Optional[str]) -> Optional[str]: """The user ``serve`` drops to: ``SERVE_USER`` where the base has it, else the session user.""" try: pwd.getpwnam(SERVE_USER) - except KeyError: + except (KeyError, AttributeError): return session_user return SERVE_USER diff --git a/src/agent_env/store/object_store/local/store.py b/src/agent_env/store/object_store/local/store.py index 81ce7a89c..e324894f5 100644 --- a/src/agent_env/store/object_store/local/store.py +++ b/src/agent_env/store/object_store/local/store.py @@ -23,8 +23,10 @@ from agent_env.config.paths import state_root from agent_env.store.base import ObjectAlreadyExistsError, ObjectNotFoundError -if os.name != "nt": +try: import fcntl +except ImportError: + fcntl = None from agent_env.store.local_state import ensure_state_dir from agent_env.store.object_store.local.grant_server import DEFAULT_ADVERTISE_HOST, DEFAULT_ALSO_SERVED, grant_server from agent_env.store.object_store.local.tls import check_local_host diff --git a/tst/unit/env/envs/test_computer_site_proxy.py b/tst/unit/env/envs/test_computer_site_proxy.py index ebb500398..842861de4 100644 --- a/tst/unit/env/envs/test_computer_site_proxy.py +++ b/tst/unit/env/envs/test_computer_site_proxy.py @@ -14,6 +14,8 @@ import socket import ssl import struct +import subprocess +import sys import urllib.error from datetime import timedelta from pathlib import Path @@ -691,6 +693,17 @@ def missing(name): assert (Config.load(str(serve_path)).user, Config.load(str(serve_path)).serve_user) == ("agent", "nobody") +def test_the_proxy_imports_when_pwd_is_unavailable(): + subprocess.run( + [ + sys.executable, + "-c", + "import sys; sys.modules['pwd'] = None; from agent_env.env.envs.computer.utils import site_proxy; assert site_proxy.pwd is None", + ], + check=True, + ) + + def test_keep_starts_serve_again_each_time_it_ends(monkeypatch): runs = []