mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-04 07:31:58 +00:00
chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355)
Six days after #23937 (608 fixes) the codebase had accumulated 241 new PLR6201 violations. Same mechanical `x in (...)` → `x in {...}` fix, same zero-risk profile: set lookup is O(1) vs O(n) for tuple and the two are semantically equivalent for hashable scalar membership tests. All 241 instances fixed via `ruff check --select PLR6201 --fix --unsafe-fixes`, zero remaining. Every changed value is a hashable scalar (str/int/None/enum/signal); no risk of unhashable runtime errors. No behavior change. Test plan: - 119 files changed, +244/-244 (net zero) — exactly one-line edits - `ruff check` clean afterward - Compile checks pass on the largest touched files (cli.py, run_agent.py, gateway/run.py, gateway/platforms/discord.py, model_tools.py) - Subset broad test run on tests/gateway/ tests/hermes_cli/ tests/agent/ tests/tools/: 18187 passed, 59 pre-existing failures (verified against origin/main with the same shape — identical failure count, identical category — all xdist test-order flakes unrelated to this change) Follows the same template as PR #23937 ([tracker: #23972](https://github.com/NousResearch/hermes-agent/issues/23972)).
This commit is contained in:
parent
ad00777f04
commit
5fba236644
119 changed files with 244 additions and 244 deletions
|
|
@ -1539,7 +1539,7 @@ class GoogleChatAdapter(BasePlatformAdapter):
|
|||
if sender_email and space_name:
|
||||
self._last_sender_by_chat[space_name] = sender_email.strip().lower()
|
||||
|
||||
chat_type = "dm" if space_type in ("DIRECT_MESSAGE", "DM") else "group"
|
||||
chat_type = "dm" if space_type in {"DIRECT_MESSAGE", "DM"} else "group"
|
||||
text = msg.get("argumentText") or msg.get("text") or ""
|
||||
text = text.strip()
|
||||
|
||||
|
|
@ -1935,7 +1935,7 @@ class GoogleChatAdapter(BasePlatformAdapter):
|
|||
return True
|
||||
except HttpError as exc:
|
||||
status = getattr(getattr(exc, "resp", None), "status", None)
|
||||
if status in (403, 404):
|
||||
if status in {403, 404}:
|
||||
return False
|
||||
logger.debug(
|
||||
"[GoogleChat] delete_message failed: %s",
|
||||
|
|
@ -1958,7 +1958,7 @@ class GoogleChatAdapter(BasePlatformAdapter):
|
|||
update_mask = ",".join(update_mask_fields) or "text"
|
||||
|
||||
# Patch body cannot carry thread (immutable).
|
||||
patch_body = {k: v for k, v in body.items() if k not in ("thread",)}
|
||||
patch_body = {k: v for k, v in body.items() if k not in {"thread",}}
|
||||
|
||||
def _do_patch() -> Dict[str, Any]:
|
||||
return (
|
||||
|
|
@ -2791,7 +2791,7 @@ class GoogleChatAdapter(BasePlatformAdapter):
|
|||
upload_resp = await asyncio.to_thread(_upload)
|
||||
except HttpError as exc:
|
||||
status = getattr(getattr(exc, "resp", None), "status", None)
|
||||
if status in (401, 403):
|
||||
if status in {401, 403}:
|
||||
logger.warning(
|
||||
"[GoogleChat] media.upload auth failure for identity=%s "
|
||||
"(token revoked or scope missing) — falling back to "
|
||||
|
|
@ -2927,7 +2927,7 @@ class GoogleChatAdapter(BasePlatformAdapter):
|
|||
display = info.get("displayName") or chat_id
|
||||
return {
|
||||
"name": display,
|
||||
"type": "dm" if space_type in ("DIRECT_MESSAGE", "DM") else "group",
|
||||
"type": "dm" if space_type in {"DIRECT_MESSAGE", "DM"} else "group",
|
||||
"chat_id": chat_id,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ class IRCAdapter(BasePlatformAdapter):
|
|||
self.nickname = os.getenv("IRC_NICKNAME") or extra.get("nickname", "hermes-bot")
|
||||
self.channel = os.getenv("IRC_CHANNEL") or extra.get("channel", "")
|
||||
self.use_tls = (
|
||||
os.getenv("IRC_USE_TLS", "").lower() in ("1", "true", "yes")
|
||||
os.getenv("IRC_USE_TLS", "").lower() in {"1", "true", "yes"}
|
||||
if os.getenv("IRC_USE_TLS")
|
||||
else extra.get("use_tls", True)
|
||||
)
|
||||
|
|
@ -680,7 +680,7 @@ def _env_enablement() -> dict | None:
|
|||
seed["nickname"] = nickname
|
||||
use_tls = os.getenv("IRC_USE_TLS", "").strip().lower()
|
||||
if use_tls:
|
||||
seed["use_tls"] = use_tls in ("1", "true", "yes")
|
||||
seed["use_tls"] = use_tls in {"1", "true", "yes"}
|
||||
# Passwords live in PlatformConfig.extra as well for back-compat with
|
||||
# existing config.yaml users; env-reads at construct time still win.
|
||||
if os.getenv("IRC_SERVER_PASSWORD"):
|
||||
|
|
@ -756,7 +756,7 @@ async def _standalone_send(
|
|||
nickname = os.getenv("IRC_NICKNAME") or extra.get("nickname", "hermes-bot")
|
||||
use_tls_env = os.getenv("IRC_USE_TLS")
|
||||
if use_tls_env is not None:
|
||||
use_tls = use_tls_env.lower() in ("1", "true", "yes")
|
||||
use_tls = use_tls_env.lower() in {"1", "true", "yes"}
|
||||
else:
|
||||
use_tls = bool(extra.get("use_tls", True))
|
||||
|
||||
|
|
@ -821,7 +821,7 @@ async def _standalone_send(
|
|||
await _raw(f"PONG :{payload}")
|
||||
elif cmd == "001":
|
||||
registered = True
|
||||
elif cmd in ("432", "433"):
|
||||
elif cmd in {"432", "433"}:
|
||||
nick_attempts += 1
|
||||
if nick_attempts > max_nick_attempts:
|
||||
return {"error": "IRC standalone send: too many nick collisions"}
|
||||
|
|
@ -829,7 +829,7 @@ async def _standalone_send(
|
|||
# mutated value, so the suffix stays bounded.
|
||||
standalone_nick = f"{nick_base}-cron-{nick_attempts}"[:30]
|
||||
await _raw(f"NICK {standalone_nick}")
|
||||
elif cmd in ("464", "465"):
|
||||
elif cmd in {"464", "465"}:
|
||||
return {"error": f"IRC standalone send: server rejected client ({cmd})"}
|
||||
|
||||
if nickserv_password:
|
||||
|
|
@ -860,9 +860,9 @@ async def _standalone_send(
|
|||
if jcmd == "PING":
|
||||
payload = jmsg["params"][0] if jmsg["params"] else ""
|
||||
await _raw(f"PONG :{payload}")
|
||||
elif jcmd in ("366", "JOIN"):
|
||||
elif jcmd in {"366", "JOIN"}:
|
||||
joined = True
|
||||
elif jcmd in ("403", "405", "471", "473", "474", "475"):
|
||||
elif jcmd in {"403", "405", "471", "473", "474", "475"}:
|
||||
return {"error": f"IRC standalone send: JOIN {target} rejected ({jcmd})"}
|
||||
|
||||
# Bytes-aware per-line splitting so multi-line plain text never
|
||||
|
|
|
|||
|
|
@ -325,7 +325,7 @@ class RequestCache:
|
|||
|
||||
def mark_delivered(self, request_id: str) -> None:
|
||||
entry = self._entries.get(request_id)
|
||||
if entry is None or entry.state not in (State.READY, State.ERROR):
|
||||
if entry is None or entry.state not in {State.READY, State.ERROR}:
|
||||
return
|
||||
entry.state = State.DELIVERED
|
||||
entry.updated_at = time.time()
|
||||
|
|
@ -614,7 +614,7 @@ def _truthy_env(name: str, default: bool = False) -> bool:
|
|||
v = os.getenv(name)
|
||||
if v is None:
|
||||
return default
|
||||
return v.strip().lower() in ("1", "true", "yes", "on")
|
||||
return v.strip().lower() in {"1", "true", "yes", "on"}
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
@ -910,7 +910,7 @@ class LineAdapter(BasePlatformAdapter):
|
|||
await self._handle_message_event(event)
|
||||
elif event_type == "postback":
|
||||
await self._handle_postback_event(event)
|
||||
elif event_type in ("follow", "unfollow", "join", "leave"):
|
||||
elif event_type in {"follow", "unfollow", "join", "leave"}:
|
||||
logger.info("LINE: lifecycle event %s from %s", event_type, source)
|
||||
else:
|
||||
logger.debug("LINE: ignoring event type %r", event_type)
|
||||
|
|
@ -939,7 +939,7 @@ class LineAdapter(BasePlatformAdapter):
|
|||
|
||||
if msg_type == "text":
|
||||
text = msg.get("text", "") or ""
|
||||
elif msg_type in ("image", "audio", "video", "file"):
|
||||
elif msg_type in {"image", "audio", "video", "file"}:
|
||||
local_path = await self._download_media(message_id, msg_type)
|
||||
if local_path:
|
||||
media_urls.append(local_path)
|
||||
|
|
|
|||
|
|
@ -101,11 +101,11 @@ def _guess_extension(data: bytes) -> str:
|
|||
|
||||
|
||||
def _is_image_ext(ext: str) -> bool:
|
||||
return ext.lower() in (".jpg", ".jpeg", ".png", ".gif", ".webp")
|
||||
return ext.lower() in {".jpg", ".jpeg", ".png", ".gif", ".webp"}
|
||||
|
||||
|
||||
def _is_audio_ext(ext: str) -> bool:
|
||||
return ext.lower() in (".mp3", ".wav", ".ogg", ".m4a", ".aac")
|
||||
return ext.lower() in {".mp3", ".wav", ".ogg", ".m4a", ".aac"}
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
@ -326,12 +326,12 @@ class SimplexAdapter(BasePlatformAdapter):
|
|||
# Filter out messages sent by us (direction == "snd")
|
||||
meta = chat_item.get("meta") or {}
|
||||
direction = (meta.get("itemStatus") or {}).get("type", "")
|
||||
if direction in ("sndSent", "sndSentDirect", "sndSentViaProxy", "sndNew"):
|
||||
if direction in {"sndSent", "sndSentDirect", "sndSentViaProxy", "sndNew"}:
|
||||
return
|
||||
|
||||
# Determine chat type and IDs
|
||||
chat_type_raw = chat_info.get("type", "")
|
||||
is_group = chat_type_raw in ("group", "groupInfo")
|
||||
is_group = chat_type_raw in {"group", "groupInfo"}
|
||||
|
||||
if is_group:
|
||||
group_info = chat_info.get("groupInfo") or chat_info.get("group") or {}
|
||||
|
|
@ -374,7 +374,7 @@ class SimplexAdapter(BasePlatformAdapter):
|
|||
media_urls: List[str] = []
|
||||
media_types: List[str] = []
|
||||
file_info = chat_item.get("file") or {}
|
||||
if file_info and file_info.get("fileStatus") not in ("cancelled", "error"):
|
||||
if file_info and file_info.get("fileStatus") not in {"cancelled", "error"}:
|
||||
file_id = file_info.get("fileId")
|
||||
file_name = file_info.get("fileName", "file")
|
||||
if file_id:
|
||||
|
|
|
|||
|
|
@ -841,7 +841,7 @@ class TeamsAdapter(BasePlatformAdapter):
|
|||
# bot silently treated every clicker as authorized — meaning any
|
||||
# Teams user who could message the bot could approve dangerous commands.
|
||||
allowed_csv = os.getenv("TEAMS_ALLOWED_USERS", "").strip()
|
||||
allow_all = os.getenv("TEAMS_ALLOW_ALL_USERS", "").strip().lower() in ("1", "true", "yes")
|
||||
allow_all = os.getenv("TEAMS_ALLOW_ALL_USERS", "").strip().lower() in {"1", "true", "yes"}
|
||||
|
||||
if not allow_all:
|
||||
if not allowed_csv:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue