Make the standalone exe work with OCR out of the box — no separate
Tesseract install, no tesserocr DLL hell. Verified end-to-end: built the
exe, ran it frozen with the system Tesseract blinded, confirmed it
resolves the bundled binary and reads text ("CHAM RUNE").
- ocr.py: resolve an _APP_BASE (exe dir when frozen, else cwd) and prefer
a bundled <exe_dir>/tesseract/tesseract.exe over PATH / Program Files.
Resolve assets/tessdata to an absolute path so OCR no longer depends on
the current working dir. Applies to both the tesserocr and pytesseract
paths.
- build.py: copy a portable Tesseract (exe + DLLs) from TESSERACT_DIR
(default C:\Program Files\Tesseract-OCR) into <release>/tesseract/. Our
trained models in assets/tessdata are used via --tessdata-dir, so their
tessdata is skipped. Warns (non-fatal) if Tesseract isn't present.
- ci.yml: choco install tesseract before the build so the bundle is
reproducible on the runner; verify it landed in the release dir.
- test/conftest.py: apply the SSL cert-store workaround so pytest can be
collected on Windows boxes with a corrupted cert store (no-op on CI).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
24 lines
896 B
Python
24 lines
896 B
Python
# Apply the same SSL cert-store workaround the bot entry points use, so the
|
|
# test suite can be collected on Windows machines whose cert store is corrupted.
|
|
# Importing the bot code pulls in discord/aiohttp, which calls
|
|
# ssl.create_default_context() at import time; a malformed Windows cert raises
|
|
# ssl.SSLError: [ASN1: NOT_ENOUGH_DATA]. No-op on a healthy cert store (incl. CI).
|
|
import sys
|
|
|
|
if sys.platform == "win32":
|
|
import ssl
|
|
|
|
_orig_load_default_certs = ssl.SSLContext.load_default_certs
|
|
|
|
def _safe_load_default_certs(self, purpose=ssl.Purpose.CLIENT_AUTH):
|
|
try:
|
|
_orig_load_default_certs(self, purpose)
|
|
except ssl.SSLError:
|
|
try:
|
|
import certifi
|
|
self.load_verify_locations(certifi.where())
|
|
except Exception:
|
|
pass
|
|
|
|
ssl.SSLContext.load_default_certs = _safe_load_default_certs
|