Skip to content

Commit 3f6b716

Browse files
committed
fix: Better event listener type definitions
1 parent c4805dc commit 3f6b716

File tree

4 files changed

+77
-57
lines changed

4 files changed

+77
-57
lines changed

poetry.lock

Lines changed: 14 additions & 52 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ keywords = [
4545
python = "^3.9"
4646
apify-client = ">=1.8.1"
4747
apify-shared = ">=1.1.2"
48-
crawlee = "~0.4.0"
48+
crawlee = { git = "https://github.com/apify/crawlee-python.git", branch = "improve-event-types" }
4949
cryptography = ">=42.0.0"
5050
# TODO: relax the upper bound once the issue is resolved:
5151
# https://github.com/apify/apify-sdk-python/issues/348

src/apify/__init__.py

Lines changed: 15 additions & 1 deletion
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',

src/apify/_actor.py

Lines changed: 47 additions & 3 deletions
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 pydantic import AliasChoices
@@ -13,7 +13,15 @@
1313
from apify_shared.consts import ActorEnvVars, ActorExitCodes, ApifyEnvVars
1414
from apify_shared.utils import ignore_docs, maybe_extract_enum_member_value
1515
from crawlee import service_container
16-
from crawlee.events._types import Event, EventPersistStateData
16+
from crawlee.events import (
17+
Event,
18+
EventAbortingData,
19+
EventExitData,
20+
EventListener,
21+
EventMigratingData,
22+
EventPersistStateData,
23+
EventSystemInfoData,
24+
)
1725

1826
from apify._configuration import Configuration
1927
from apify._consts import EVENT_LISTENERS_TIMEOUT
@@ -470,7 +478,30 @@ async def set_value(
470478
key_value_store = await self.open_key_value_store()
471479
return await key_value_store.set_value(key, value, content_type=content_type)
472480

473-
def on(self, event_name: Event, listener: Callable) -> Callable:
481+
@overload
482+
def on(
483+
self, event_name: Literal[Event.PERSIST_STATE], listener: EventListener[EventPersistStateData]
484+
) -> EventListener[EventPersistStateData]: ...
485+
@overload
486+
def on(
487+
self, event_name: Literal[Event.SYSTEM_INFO], listener: EventListener[EventSystemInfoData]
488+
) -> EventListener[EventSystemInfoData]: ...
489+
@overload
490+
def on(
491+
self, event_name: Literal[Event.MIGRATING], listener: EventListener[EventMigratingData]
492+
) -> EventListener[EventMigratingData]: ...
493+
@overload
494+
def on(
495+
self, event_name: Literal[Event.ABORTING], listener: EventListener[EventAbortingData]
496+
) -> EventListener[EventAbortingData]: ...
497+
@overload
498+
def on(
499+
self, event_name: Literal[Event.EXIT], listener: EventListener[EventExitData]
500+
) -> EventListener[EventExitData]: ...
501+
@overload
502+
def on(self, event_name: Event, listener: EventListener[None]) -> EventListener[Any]: ...
503+
504+
def on(self, event_name: Event, listener: EventListener[Any]) -> EventListener[Any]:
474505
"""Add an event listener to the Actor's event manager.
475506
476507
The following events can be emitted:
@@ -499,6 +530,19 @@ def on(self, event_name: Event, listener: Callable) -> Callable:
499530
self._event_manager.on(event=event_name, listener=listener)
500531
return listener
501532

533+
@overload
534+
def off(self, event_name: Literal[Event.PERSIST_STATE], listener: EventListener[EventPersistStateData]) -> None: ...
535+
@overload
536+
def off(self, event_name: Literal[Event.SYSTEM_INFO], listener: EventListener[EventSystemInfoData]) -> None: ...
537+
@overload
538+
def off(self, event_name: Literal[Event.MIGRATING], listener: EventListener[EventMigratingData]) -> None: ...
539+
@overload
540+
def off(self, event_name: Literal[Event.ABORTING], listener: EventListener[EventAbortingData]) -> None: ...
541+
@overload
542+
def off(self, event_name: Literal[Event.EXIT], listener: EventListener[EventExitData]) -> None: ...
543+
@overload
544+
def off(self, event_name: Event, listener: EventListener[None]) -> None: ...
545+
502546
def off(self, event_name: Event, listener: Callable | None = None) -> None:
503547
"""Remove a listener, or all listeners, from an Actor event.
504548

0 commit comments

Comments
 (0)