Skip to content

Commit 663dcd2

Browse files
committed
refactor: improve typing of SideEffectRunnerThread
1 parent 246d48d commit 663dcd2

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## Version 0.9.15
4+
5+
- refactor: improve typing of `SideEffectRunnerThread`
6+
37
## Version 0.9.14
48

59
- feat: allow `subscribe_event` callback parameter take zero arguments

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "python-redux"
3-
version = "0.9.14"
3+
version = "0.9.15"
44
description = "Redux implementation for Python"
55
authors = ["Sassan Haradji <sassanh@gmail.com>"]
66
license = "Apache-2.0"

redux/main.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,15 @@ class InitializeStateReturnValue(Immutable, Generic[State, Action, Event]):
9999
autorun: AutorunType[State]
100100

101101

102-
class SideEffectRunnerThread(threading.Thread):
103-
def __init__(self: SideEffectRunnerThread, task_queue: queue.Queue) -> None:
102+
class SideEffectRunnerThread(threading.Thread, Generic[Event]):
103+
def __init__(
104+
self: SideEffectRunnerThread[Event],
105+
task_queue: queue.Queue[tuple[EventHandler[Event], Event] | None],
106+
) -> None:
104107
super().__init__()
105108
self.task_queue = task_queue
106109

107-
def run(self: SideEffectRunnerThread) -> None:
110+
def run(self: SideEffectRunnerThread[Event]) -> None:
108111
while True:
109112
task = self.task_queue.get()
110113
if task is None:
@@ -113,7 +116,10 @@ def run(self: SideEffectRunnerThread) -> None:
113116

114117
try:
115118
event_handler, event = task
116-
event_handler(event)
119+
if len(signature(event_handler).parameters) == 1:
120+
cast(Callable[[Event], Any], event_handler)(event)
121+
else:
122+
cast(Callable[[], Any], event_handler)()
117123
finally:
118124
self.task_queue.task_done()
119125

@@ -134,7 +140,7 @@ def create_store(
134140
actions: list[Action] = []
135141
events: list[Event] = []
136142

137-
event_handlers_queue = queue.Queue[tuple[EventHandler, Event] | None]()
143+
event_handlers_queue = queue.Queue[tuple[EventHandler[Event], Event] | None]()
138144
for _ in range(_options.threads):
139145
worker = SideEffectRunnerThread(event_handlers_queue)
140146
worker.start()

0 commit comments

Comments
 (0)