(self, session_id: str, *, reason: Optional[str] = None)
| 34 | self.logger = logging.getLogger(__name__) |
| 35 | |
| 36 | def request_cancel(self, session_id: str, *, reason: Optional[str] = None) -> bool: |
| 37 | session = self.session_store.get_session(session_id) |
| 38 | if not session: |
| 39 | return False |
| 40 | |
| 41 | cancel_message = reason or "Cancellation requested" |
| 42 | session.cancel_reason = cancel_message |
| 43 | if not session.cancel_event.is_set(): |
| 44 | session.cancel_event.set() |
| 45 | self.logger.info("Cancellation requested for session %s", session_id) |
| 46 | |
| 47 | if session.executor: |
| 48 | try: |
| 49 | session.executor.request_cancel(cancel_message) |
| 50 | except Exception as exc: |
| 51 | self.logger.warning("Failed to propagate cancellation to executor for %s: %s", session_id, exc) |
| 52 | |
| 53 | self.session_store.update_session_status(session_id, SessionStatus.CANCELLED, error_message=cancel_message) |
| 54 | return True |
| 55 | |
| 56 | async def start_workflow( |
| 57 | self, |
no test coverage detected