Skip to content

Commit 2cfc4d3

Browse files
chore: apply ruff linting fixes to events module
fix: apply ruff linting to events
1 parent f4abc41 commit 2cfc4d3

20 files changed

+365
-350
lines changed

src/crewai/events/base_events.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from datetime import datetime, timezone
2-
from typing import Any, Dict, Optional
2+
from typing import Any
3+
34
from pydantic import BaseModel, Field
45

56
from crewai.utilities.serialization import to_serializable
@@ -10,11 +11,11 @@ class BaseEvent(BaseModel):
1011

1112
timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
1213
type: str
13-
source_fingerprint: Optional[str] = None # UUID string of the source entity
14-
source_type: Optional[str] = (
14+
source_fingerprint: str | None = None # UUID string of the source entity
15+
source_type: str | None = (
1516
None # "agent", "task", "crew", "memory", "entity_memory", "short_term_memory", "long_term_memory", "external_memory"
1617
)
17-
fingerprint_metadata: Optional[Dict[str, Any]] = None # Any relevant metadata
18+
fingerprint_metadata: dict[str, Any] | None = None # Any relevant metadata
1819

1920
def to_json(self, exclude: set[str] | None = None):
2021
"""
@@ -28,13 +29,13 @@ def to_json(self, exclude: set[str] | None = None):
2829
"""
2930
return to_serializable(self, exclude=exclude)
3031

31-
def _set_task_params(self, data: Dict[str, Any]):
32+
def _set_task_params(self, data: dict[str, Any]):
3233
if "from_task" in data and (task := data["from_task"]):
3334
self.task_id = task.id
3435
self.task_name = task.name or task.description
3536
self.from_task = None
3637

37-
def _set_agent_params(self, data: Dict[str, Any]):
38+
def _set_agent_params(self, data: dict[str, Any]):
3839
task = data.get("from_task", None)
3940
agent = task.agent if task else data.get("from_agent", None)
4041

src/crewai/events/event_bus.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from __future__ import annotations
22

33
import threading
4+
from collections.abc import Callable
45
from contextlib import contextmanager
5-
from typing import Any, Callable, Dict, List, Type, TypeVar, cast
6+
from typing import Any, TypeVar, cast
67

78
from blinker import Signal
89

@@ -25,17 +26,17 @@ def __new__(cls):
2526
if cls._instance is None:
2627
with cls._lock:
2728
if cls._instance is None: # prevent race condition
28-
cls._instance = super(CrewAIEventsBus, cls).__new__(cls)
29+
cls._instance = super().__new__(cls)
2930
cls._instance._initialize()
3031
return cls._instance
3132

3233
def _initialize(self) -> None:
3334
"""Initialize the event bus internal state"""
3435
self._signal = Signal("crewai_event_bus")
35-
self._handlers: Dict[Type[BaseEvent], List[Callable]] = {}
36+
self._handlers: dict[type[BaseEvent], list[Callable]] = {}
3637

3738
def on(
38-
self, event_type: Type[EventT]
39+
self, event_type: type[EventT]
3940
) -> Callable[[Callable[[Any, EventT], None]], Callable[[Any, EventT], None]]:
4041
"""
4142
Decorator to register an event handler for a specific event type.
@@ -61,6 +62,18 @@ def decorator(
6162

6263
return decorator
6364

65+
@staticmethod
66+
def _call_handler(
67+
handler: Callable, source: Any, event: BaseEvent, event_type: type
68+
) -> None:
69+
"""Call a single handler with error handling."""
70+
try:
71+
handler(source, event)
72+
except Exception as e:
73+
print(
74+
f"[EventBus Error] Handler '{handler.__name__}' failed for event '{event_type.__name__}': {e}"
75+
)
76+
6477
def emit(self, source: Any, event: BaseEvent) -> None:
6578
"""
6679
Emit an event to all registered handlers
@@ -72,17 +85,12 @@ def emit(self, source: Any, event: BaseEvent) -> None:
7285
for event_type, handlers in self._handlers.items():
7386
if isinstance(event, event_type):
7487
for handler in handlers:
75-
try:
76-
handler(source, event)
77-
except Exception as e:
78-
print(
79-
f"[EventBus Error] Handler '{handler.__name__}' failed for event '{event_type.__name__}': {e}"
80-
)
88+
self._call_handler(handler, source, event, event_type)
8189

8290
self._signal.send(source, event=event)
8391

8492
def register_handler(
85-
self, event_type: Type[EventTypes], handler: Callable[[Any, EventTypes], None]
93+
self, event_type: type[EventTypes], handler: Callable[[Any, EventTypes], None]
8694
) -> None:
8795
"""Register an event handler for a specific event type"""
8896
if event_type not in self._handlers:

src/crewai/events/event_listener.py

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
11
from __future__ import annotations
22

33
from io import StringIO
4-
from typing import Any, Dict
4+
from typing import Any
55

66
from pydantic import Field, PrivateAttr
7-
from crewai.llm import LLM
8-
from crewai.task import Task
9-
from crewai.telemetry.telemetry import Telemetry
10-
from crewai.utilities import Logger
11-
from crewai.utilities.constants import EMITTER_COLOR
7+
128
from crewai.events.base_event_listener import BaseEventListener
9+
from crewai.events.types.agent_events import (
10+
AgentExecutionCompletedEvent,
11+
AgentExecutionStartedEvent,
12+
LiteAgentExecutionCompletedEvent,
13+
LiteAgentExecutionErrorEvent,
14+
LiteAgentExecutionStartedEvent,
15+
)
16+
from crewai.events.types.crew_events import (
17+
CrewKickoffCompletedEvent,
18+
CrewKickoffFailedEvent,
19+
CrewKickoffStartedEvent,
20+
CrewTestCompletedEvent,
21+
CrewTestFailedEvent,
22+
CrewTestResultEvent,
23+
CrewTestStartedEvent,
24+
CrewTrainCompletedEvent,
25+
CrewTrainFailedEvent,
26+
CrewTrainStartedEvent,
27+
)
1328
from crewai.events.types.knowledge_events import (
1429
KnowledgeQueryCompletedEvent,
1530
KnowledgeQueryFailedEvent,
@@ -25,34 +40,21 @@
2540
LLMStreamChunkEvent,
2641
)
2742
from crewai.events.types.llm_guardrail_events import (
28-
LLMGuardrailStartedEvent,
2943
LLMGuardrailCompletedEvent,
30-
)
31-
from crewai.events.utils.console_formatter import ConsoleFormatter
32-
33-
from crewai.events.types.agent_events import (
34-
AgentExecutionCompletedEvent,
35-
AgentExecutionStartedEvent,
36-
LiteAgentExecutionCompletedEvent,
37-
LiteAgentExecutionErrorEvent,
38-
LiteAgentExecutionStartedEvent,
44+
LLMGuardrailStartedEvent,
3945
)
4046
from crewai.events.types.logging_events import (
41-
AgentLogsStartedEvent,
4247
AgentLogsExecutionEvent,
48+
AgentLogsStartedEvent,
4349
)
44-
from crewai.events.types.crew_events import (
45-
CrewKickoffCompletedEvent,
46-
CrewKickoffFailedEvent,
47-
CrewKickoffStartedEvent,
48-
CrewTestCompletedEvent,
49-
CrewTestFailedEvent,
50-
CrewTestResultEvent,
51-
CrewTestStartedEvent,
52-
CrewTrainCompletedEvent,
53-
CrewTrainFailedEvent,
54-
CrewTrainStartedEvent,
55-
)
50+
from crewai.events.utils.console_formatter import ConsoleFormatter
51+
from crewai.llm import LLM
52+
from crewai.task import Task
53+
from crewai.telemetry.telemetry import Telemetry
54+
from crewai.utilities import Logger
55+
from crewai.utilities.constants import EMITTER_COLOR
56+
57+
from .listeners.memory_listener import MemoryListener
5658
from .types.flow_events import (
5759
FlowCreatedEvent,
5860
FlowFinishedEvent,
@@ -61,26 +63,24 @@
6163
MethodExecutionFinishedEvent,
6264
MethodExecutionStartedEvent,
6365
)
66+
from .types.reasoning_events import (
67+
AgentReasoningCompletedEvent,
68+
AgentReasoningFailedEvent,
69+
AgentReasoningStartedEvent,
70+
)
6471
from .types.task_events import TaskCompletedEvent, TaskFailedEvent, TaskStartedEvent
6572
from .types.tool_usage_events import (
6673
ToolUsageErrorEvent,
6774
ToolUsageFinishedEvent,
6875
ToolUsageStartedEvent,
6976
)
70-
from .types.reasoning_events import (
71-
AgentReasoningStartedEvent,
72-
AgentReasoningCompletedEvent,
73-
AgentReasoningFailedEvent,
74-
)
75-
76-
from .listeners.memory_listener import MemoryListener
7777

7878

7979
class EventListener(BaseEventListener):
8080
_instance = None
8181
_telemetry: Telemetry = PrivateAttr(default_factory=lambda: Telemetry())
8282
logger = Logger(verbose=True, default_color=EMITTER_COLOR)
83-
execution_spans: Dict[Task, Any] = Field(default_factory=dict)
83+
execution_spans: dict[Task, Any] = Field(default_factory=dict)
8484
next_chunk = 0
8585
text_stream = StringIO()
8686
knowledge_retrieval_in_progress = False

0 commit comments

Comments
 (0)