refactor(exceptions): add ruff BLE001; convert 103 broad except Exception
Per CONVENTIONS.md Part 2 ("Never bare except") and CONVENTIONS.md
Part 7 (pre-commit hooks: ruff), blind `except Exception` is now a
lint failure. Pre-existing sites are marked `# noqa: BLE001` for
later manual review; new code must use specific exception types.
Changes:
- pyproject.toml: added "BLE" to ruff lint select. BLE001 is now enforced
- 103 of 166 `except Exception` sites were auto-converted to specific
types based on context (httpx, json, OSError, subprocess, etc.)
- 62 remaining sites marked with `# noqa: BLE001` for later review
(mostly generic try/except wrappers that legitimately need broad catch
for graceful degradation: e.g. compliance LLM fallback must catch
any error to preserve the regex result)
- 1 manual fix: reverted compliance.py LLM fallback to broad except
with explicit "must catch all errors" comment + noqa
- 2 files (commerce_sync.py, crm_sync.py) needed `import httpx` added
so the auto-converted exception references would resolve
- 5 source files (agency, monitor, pipelines, auth_connector,
llm_providers/registry) renamed "name" -> "<scope>_name" in
extra={...} dicts because "name" is a reserved LogRecord field
Test impact:
- 14 failing tests -> 1 (the SSE subprocess test is a sandbox limitation,
pre-existing and unrelated)
- New `test_ble_temp.py` verifies BLE001 catches new violations
Follow-up:
- Each `# noqa: BLE001` site should be reviewed and replaced with a
specific exception type where possible. The most common legitimate
broad-catch case is the LLM fallback path; everything else probably
can be narrowed.
This commit is contained in:
parent
117001006f
commit
0200bf3e16
50 changed files with 172 additions and 166 deletions
|
|
@ -42,7 +42,7 @@ class CaptchaSolver:
|
|||
elapsed = time.time() - start
|
||||
self._record(prov, True, elapsed)
|
||||
return {"success": True, "provider": prov, "token": result, "elapsed": round(elapsed, 2)}
|
||||
except Exception as e:
|
||||
except Exception as e: # noqa: BLE001
|
||||
self._record(prov, False, 0, str(e))
|
||||
logger.warning("captcha_provider_failed", extra={"provider": prov, "error": str(e)[:80]})
|
||||
return {"success": False, "error": "All CAPTCHA providers failed"}
|
||||
|
|
@ -57,7 +57,7 @@ class CaptchaSolver:
|
|||
result = await self._solve_with(prov, "ReCaptchaV3Task", site_key, page_url, key,
|
||||
extra={"action": action, "minScore": min_score})
|
||||
return {"success": True, "provider": prov, "token": result}
|
||||
except Exception as e:
|
||||
except Exception as e: # noqa: BLE001
|
||||
logger.warning("recaptcha_v3_failed", extra={"provider": prov, "error": str(e)[:80]})
|
||||
return {"success": False, "error": "All reCAPTCHA v3 providers failed"}
|
||||
|
||||
|
|
@ -70,7 +70,7 @@ class CaptchaSolver:
|
|||
try:
|
||||
result = await self._solve_with(prov, "TurnstileTask", site_key, page_url, key)
|
||||
return {"success": True, "provider": prov, "token": result}
|
||||
except Exception as e:
|
||||
except Exception as e: # noqa: BLE001
|
||||
logger.warning("turnstile_failed", extra={"provider": prov, "error": str(e)[:80]})
|
||||
return {"success": False, "error": "All Turnstile providers failed"}
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ class CaptchaSolver:
|
|||
try:
|
||||
result = await self._solve_with(prov, "HCaptchaTask", site_key, page_url, key)
|
||||
return {"success": True, "provider": prov, "token": result}
|
||||
except Exception as e:
|
||||
except Exception as e: # noqa: BLE001
|
||||
logger.warning("hcaptcha_failed", extra={"provider": prov, "error": str(e)[:80]})
|
||||
return {"success": False, "error": "All hCaptcha providers failed"}
|
||||
|
||||
|
|
@ -96,7 +96,7 @@ class CaptchaSolver:
|
|||
try:
|
||||
result = await self._solve_image_with(prov, image_base64, key, case_sensitive)
|
||||
return {"success": True, "provider": prov, "text": result}
|
||||
except Exception as e:
|
||||
except Exception as e: # noqa: BLE001
|
||||
logger.warning("image_captcha_failed", extra={"provider": prov, "error": str(e)[:80]})
|
||||
return {"success": False, "error": "All image CAPTCHA providers failed"}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue