Skip to content

Commit 52a6dee

Browse files
authored
fix: Better event listener type definitions (#354)
- closes #344 - depends on apify/crawlee-python#800
1 parent 9ff724b commit 52a6dee

File tree

3 files changed

+62
-46
lines changed

3 files changed

+62
-46
lines changed

Diff for: poetry.lock

-42
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/apify/__init__.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@
22

33
from apify_shared.consts import WebhookEventType
44
from crawlee import Request
5-
from crawlee.events._types import Event
5+
from crawlee.events import (
6+
Event,
7+
EventAbortingData,
8+
EventExitData,
9+
EventListener,
10+
EventMigratingData,
11+
EventPersistStateData,
12+
EventSystemInfoData,
13+
)
614

715
from apify._actor import Actor
816
from apify._configuration import Configuration
@@ -15,6 +23,12 @@
1523
'Actor',
1624
'Configuration',
1725
'Event',
26+
'EventAbortingData',
27+
'EventExitData',
28+
'EventListener',
29+
'EventMigratingData',
30+
'EventPersistStateData',
31+
'EventSystemInfoData',
1832
'ProxyConfiguration',
1933
'ProxyInfo',
2034
'Request',

Diff for: src/apify/_actor.py

+47-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55
import sys
66
from datetime import timedelta
7-
from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
7+
from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast, overload
88

99
from lazy_object_proxy import Proxy
1010
from more_itertools import flatten
@@ -14,7 +14,15 @@
1414
from apify_shared.consts import ActorEnvVars, ActorExitCodes, ApifyEnvVars
1515
from apify_shared.utils import ignore_docs, maybe_extract_enum_member_value
1616
from crawlee import service_locator
17-
from crawlee.events._types import Event, EventMigratingData, EventPersistStateData
17+
from crawlee.events import (
18+
Event,
19+
EventAbortingData,
20+
EventExitData,
21+
EventListener,
22+
EventMigratingData,
23+
EventPersistStateData,
24+
EventSystemInfoData,
25+
)
1826

1927
from apify._configuration import Configuration
2028
from apify._consts import EVENT_LISTENERS_TIMEOUT
@@ -498,7 +506,30 @@ async def set_value(
498506
key_value_store = await self.open_key_value_store()
499507
return await key_value_store.set_value(key, value, content_type=content_type)
500508

501-
def on(self, event_name: Event, listener: Callable) -> Callable:
509+
@overload
510+
def on(
511+
self, event_name: Literal[Event.PERSIST_STATE], listener: EventListener[EventPersistStateData]
512+
) -> EventListener[EventPersistStateData]: ...
513+
@overload
514+
def on(
515+
self, event_name: Literal[Event.SYSTEM_INFO], listener: EventListener[EventSystemInfoData]
516+
) -> EventListener[EventSystemInfoData]: ...
517+
@overload
518+
def on(
519+
self, event_name: Literal[Event.MIGRATING], listener: EventListener[EventMigratingData]
520+
) -> EventListener[EventMigratingData]: ...
521+
@overload
522+
def on(
523+
self, event_name: Literal[Event.ABORTING], listener: EventListener[EventAbortingData]
524+
) -> EventListener[EventAbortingData]: ...
525+
@overload
526+
def on(
527+
self, event_name: Literal[Event.EXIT], listener: EventListener[EventExitData]
528+
) -> EventListener[EventExitData]: ...
529+
@overload
530+
def on(self, event_name: Event, listener: EventListener[None]) -> EventListener[Any]: ...
531+
532+
def on(self, event_name: Event, listener: EventListener[Any]) -> EventListener[Any]:
502533
"""Add an event listener to the Actor's event manager.
503534
504535
The following events can be emitted:
@@ -527,6 +558,19 @@ def on(self, event_name: Event, listener: Callable) -> Callable:
527558
self._event_manager.on(event=event_name, listener=listener)
528559
return listener
529560

561+
@overload
562+
def off(self, event_name: Literal[Event.PERSIST_STATE], listener: EventListener[EventPersistStateData]) -> None: ...
563+
@overload
564+
def off(self, event_name: Literal[Event.SYSTEM_INFO], listener: EventListener[EventSystemInfoData]) -> None: ...
565+
@overload
566+
def off(self, event_name: Literal[Event.MIGRATING], listener: EventListener[EventMigratingData]) -> None: ...
567+
@overload
568+
def off(self, event_name: Literal[Event.ABORTING], listener: EventListener[EventAbortingData]) -> None: ...
569+
@overload
570+
def off(self, event_name: Literal[Event.EXIT], listener: EventListener[EventExitData]) -> None: ...
571+
@overload
572+
def off(self, event_name: Event, listener: EventListener[None]) -> None: ...
573+
530574
def off(self, event_name: Event, listener: Callable | None = None) -> None:
531575
"""Remove a listener, or all listeners, from an Actor event.
532576

0 commit comments

Comments
 (0)