Read/write config files as UTF-8 on Windows (#4)

Path.read_text()/write_text() default to the platform encoding (cp1252
on Windows), which mangles or crashes on UTF-8 files. yt-dlp's
video.info.json is UTF-8 and routinely contains non-ASCII bytes, so on
Windows the parse raised UnicodeDecodeError, was swallowed by a bare
except, and the /watch report came back missing Title/Uploader.

- download.py: read video.info.json as UTF-8; log parse failures to
  stderr instead of swallowing them silently.
- whisper.py, setup.py: same UTF-8 fix on .env reads and writes for
  symmetry across platforms.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
bradautomates
2026-05-09 08:21:39 +10:00
parent 3c488688d1
commit 205af96c19
3 changed files with 9 additions and 8 deletions
+5 -5
View File
@@ -79,7 +79,7 @@ def _read_env_key(name: str) -> str | None:
return None
_check_file_permissions(CONFIG_FILE)
try:
for line in CONFIG_FILE.read_text().splitlines():
for line in CONFIG_FILE.read_text(encoding="utf-8").splitlines():
line = line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
@@ -113,7 +113,7 @@ def _scaffold_env() -> bool:
if CONFIG_FILE.exists():
return False
CONFIG_DIR.mkdir(parents=True, exist_ok=True)
CONFIG_FILE.write_text(ENV_TEMPLATE)
CONFIG_FILE.write_text(ENV_TEMPLATE, encoding="utf-8")
try:
CONFIG_FILE.chmod(0o600)
except OSError:
@@ -130,15 +130,15 @@ def _write_setup_complete() -> None:
CONFIG_DIR.mkdir(parents=True, exist_ok=True)
existing = ""
if CONFIG_FILE.exists():
existing = CONFIG_FILE.read_text()
existing = CONFIG_FILE.read_text(encoding="utf-8")
for line in existing.splitlines():
if line.strip().startswith("SETUP_COMPLETE="):
return
if existing and not existing.endswith("\n"):
existing += "\n"
CONFIG_FILE.write_text(existing + "SETUP_COMPLETE=true\n")
CONFIG_FILE.write_text(existing + "SETUP_COMPLETE=true\n", encoding="utf-8")
else:
CONFIG_FILE.write_text(ENV_TEMPLATE + "\nSETUP_COMPLETE=true\n")
CONFIG_FILE.write_text(ENV_TEMPLATE + "\nSETUP_COMPLETE=true\n", encoding="utf-8")
try:
CONFIG_FILE.chmod(0o600)
except OSError: