From a556f261a3719ec1a46daf97c2bc46ce37552338 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 06:01:29 +0000 Subject: [PATCH] fix(integrations/signet): use importlib.import_module for lazy signet_auth import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoids mypy 'unused type: ignore' error on Python 3.10 and 3.13 when signet_auth isn't installed in the type-check environment. Co-Authored-By: João --- lib/crewai/src/crewai/integrations/signet/listener.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/crewai/src/crewai/integrations/signet/listener.py b/lib/crewai/src/crewai/integrations/signet/listener.py index c394d2fb0..c8ef97e8c 100644 --- a/lib/crewai/src/crewai/integrations/signet/listener.py +++ b/lib/crewai/src/crewai/integrations/signet/listener.py @@ -15,6 +15,7 @@ who do not opt in pay no import cost. from __future__ import annotations from dataclasses import dataclass +import importlib import threading from typing import TYPE_CHECKING, Any, Protocol, TypeVar, runtime_checkable @@ -120,9 +121,10 @@ class SignetEventListener(BaseEventListener): if self._signing_agent is not None: return self._signing_agent try: - from signet_auth import SigningAgent # type: ignore[import-not-found] + signet_auth = importlib.import_module("signet_auth") except ImportError as exc: # pragma: no cover - exercised via stubbed test raise ImportError(_SIGNET_INSTALL_HINT) from exc + signing_agent_cls = signet_auth.SigningAgent kwargs: dict[str, Any] = {} if self.config.audit: @@ -130,15 +132,15 @@ class SignetEventListener(BaseEventListener): if self.config.policy_path is not None: kwargs["policy_path"] = self.config.policy_path - if self.config.create_if_missing and hasattr(SigningAgent, "create"): + if self.config.create_if_missing and hasattr(signing_agent_cls, "create"): create_kwargs = dict(kwargs) if self.config.owner is not None: create_kwargs["owner"] = self.config.owner - self._signing_agent = SigningAgent.create( + self._signing_agent = signing_agent_cls.create( self.config.key_name, **create_kwargs ) else: - self._signing_agent = SigningAgent(self.config.key_name, **kwargs) + self._signing_agent = signing_agent_cls(self.config.key_name, **kwargs) return self._signing_agent def setup_listeners(self, crewai_event_bus: CrewAIEventsBus) -> None: