2 Commits
Author SHA1 Message Date
dsql e62a2db1aa chore: bump to 1.1.0 (logging-discipline audit)
Signed-off-by: disqualifier <dev@disqualifier.me>
2026-08-10 23:00:50 -04:00
dsql 1f24198121 fix: log terminal connect exhaustion so a dead connection isn't silent
_connect_locked logged a per-attempt WARNING but returned False on exhaustion with no
terminal line - the per-attempt lines were the only trace, so a genuinely dead IMAP
connection could read as routine retry noise with no loud terminal signal (rule-3 guard:
a swallow-to-default must carry a terminal log, and demoting/relying only on attempt lines
would leave it silent). add a terminal WARNING before the False return; keep the
per-attempt WARNING. host only (no creds) in the message.

Signed-off-by: disqualifier <dev@disqualifier.me>
2026-08-09 02:13:44 -04:00
2 changed files with 6 additions and 1 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project]
name = "aiomail"
version = "1.0.0"
version = "1.1.0"
description = "async IMAP one-time-code retrieval with password/OAuth2 auth and dynamic matching"
requires-python = ">=3.10"
dependencies = [
+5
View File
@@ -93,6 +93,11 @@ class IMAPClient:
self._mail = None
if attempt < self.max_retries - 1:
await asyncio.sleep(2 * (attempt + 1))
# terminal signal: all attempts are exhausted and this SWALLOWS the failure into a
# False return the caller branches on. without this line the per-attempt WARNINGs are
# the only trace, so a genuinely dead connection could look like routine noise - log
# the terminal exhaustion loudly so real degradation is visible, then return False.
log.warning("connect to %s failed after %d attempts", self.host, self.max_retries)
return False
@staticmethod