From 9973b76463a7670e4a4ee8d3bc4cd6ee7efad6e9 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Mon, 9 Feb 2026 02:51:26 +0530 Subject: [PATCH] refactor: replace generic Exception handling with specific exceptions in various files --- backend/app/api/agent.py | 2 +- backend/app/api/board_groups.py | 3 ++- backend/app/db/session.py | 13 ++++++------- backend/app/services/template_sync.py | 21 ++++++++++++++------- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/backend/app/api/agent.py b/backend/app/api/agent.py index 5f0068b8..4e06cefe 100644 --- a/backend/app/api/agent.py +++ b/backend/app/api/agent.py @@ -845,7 +845,7 @@ async def broadcast_gateway_lead_message( ) ) sent += 1 - except Exception as exc: + except (HTTPException, OpenClawGatewayError, ValueError) as exc: results.append( GatewayLeadBroadcastBoardResult( board_id=board.id, diff --git a/backend/app/api/board_groups.py b/backend/app/api/board_groups.py index 2cbef618..cfabf434 100644 --- a/backend/app/api/board_groups.py +++ b/backend/app/api/board_groups.py @@ -14,6 +14,7 @@ from app.core.time import utcnow from app.db import crud from app.db.pagination import paginate from app.db.session import get_session +from app.integrations.openclaw_gateway import OpenClawGatewayError from app.models.agents import Agent from app.models.board_group_memory import BoardGroupMemory from app.models.board_groups import BoardGroup @@ -240,7 +241,7 @@ async def apply_board_group_heartbeat( continue try: await sync_gateway_agent_heartbeats(gateway, gateway_agents) - except Exception: + except OpenClawGatewayError: failed_agent_ids.extend([agent.id for agent in gateway_agents]) return BoardGroupHeartbeatApplyResult( diff --git a/backend/app/db/session.py b/backend/app/db/session.py index 9d1b7754..5951419e 100644 --- a/backend/app/db/session.py +++ b/backend/app/db/session.py @@ -71,14 +71,13 @@ async def get_session() -> AsyncGenerator[AsyncSession, None]: try: yield session finally: + in_txn = False try: in_txn = bool(session.in_transaction()) except SQLAlchemyError: logger.exception("Failed to inspect session transaction state.") - return - if not in_txn: - return - try: - await session.rollback() - except SQLAlchemyError: - logger.exception("Failed to rollback session after request error.") + if in_txn: + try: + await session.rollback() + except SQLAlchemyError: + logger.exception("Failed to rollback session after request error.") diff --git a/backend/app/services/template_sync.py b/backend/app/services/template_sync.py index ab25ae2f..07f1ca85 100644 --- a/backend/app/services/template_sync.py +++ b/backend/app/services/template_sync.py @@ -93,7 +93,7 @@ class _GatewayBackoff: value = await fn() self.reset() return value - except Exception as exc: + except OpenClawGatewayError as exc: if not _is_transient_gateway_error(exc): raise now = asyncio.get_running_loop().time() @@ -430,13 +430,20 @@ async def sync_gateway_templates( ) try: + agent_item: Agent = agent + board_item: Board = board + auth_token_value: str = auth_token - async def _do_provision() -> None: + async def _do_provision( + agent_item: Agent = agent_item, + board_item: Board = board_item, + auth_token_value: str = auth_token_value, + ) -> None: await provision_agent( - agent, - board, + agent_item, + board_item, gateway, - auth_token, + auth_token_value, user, action="update", force_bootstrap=force_bootstrap, @@ -456,7 +463,7 @@ async def sync_gateway_templates( ) ) return result - except Exception as exc: # pragma: no cover - gateway/network dependent + except (OSError, RuntimeError, ValueError) as exc: # pragma: no cover result.agents_skipped += 1 result.errors.append( GatewayTemplatesSyncError( @@ -584,7 +591,7 @@ async def sync_gateway_templates( ) ) return result - except Exception as exc: # pragma: no cover - gateway/network dependent + except (OSError, RuntimeError, ValueError) as exc: # pragma: no cover result.errors.append( GatewayTemplatesSyncError( agent_id=main_agent.id,