diff --git a/bot_bottle/backend/smolmachines/pty_resize.py b/bot_bottle/backend/smolmachines/pty_resize.py index cae1664..7de4fda 100644 --- a/bot_bottle/backend/smolmachines/pty_resize.py +++ b/bot_bottle/backend/smolmachines/pty_resize.py @@ -36,6 +36,7 @@ follow-up tracked separately).""" from __future__ import annotations import fcntl +import io import signal import struct import subprocess @@ -68,7 +69,11 @@ def _read_winsize() -> tuple[int, int] | None: - tmux respawn-pane: tmux sets all three to the pane's PTY. - non-TTY (someone piped stdin in tests): none are; the sync just no-ops, which is the right behavior.""" - for fd in (sys.stdin.fileno(), sys.stdout.fileno(), sys.stderr.fileno()): + for default_fd, stream in enumerate((sys.stdin, sys.stdout, sys.stderr)): + try: + fd = stream.fileno() + except (AttributeError, io.UnsupportedOperation, OSError): + fd = default_fd try: data = fcntl.ioctl(fd, termios.TIOCGWINSZ, b"\x00" * 8) except OSError: diff --git a/bot_bottle/contrib/codex/codex_auth.py b/bot_bottle/contrib/codex/codex_auth.py index 9f6da0a..36e33cb 100644 --- a/bot_bottle/contrib/codex/codex_auth.py +++ b/bot_bottle/contrib/codex/codex_auth.py @@ -15,8 +15,8 @@ from datetime import datetime, timezone from pathlib import Path from typing import cast -from .log import die -from .util import expand_tilde +from bot_bottle.log import die +from bot_bottle.util import expand_tilde def codex_auth_path(host_env: dict[str, str] | None = None) -> Path: @@ -153,7 +153,9 @@ def _dummy_jwt_from_host( return _dummy_jwt(now, exp_ts=exp_ts) if not isinstance(payload, dict): return _dummy_jwt(now, exp_ts=exp_ts) - return _encode_dummy_jwt(_redact_jwt_payload(cast(dict[str, object], payload), now=now, exp_ts=exp_ts)) + return _encode_dummy_jwt( + _redact_jwt_payload(cast(dict[str, object], payload), now=now, exp_ts=exp_ts) + ) def _encode_dummy_jwt(payload: dict[str, object]) -> str: