Skip to content

Commit c24208d

Browse files
committed
Add option to remove event handler from luigi.Task
1 parent 25d179b commit c24208d

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

luigi/task.py

+7
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,13 @@ def wrapped(callback):
264264
return callback
265265
return wrapped
266266

267+
@classmethod
268+
def remove_event_handler(cls, event, callback):
269+
"""
270+
Function to remove the event handler registered previously by the cls.event_handler decorator.
271+
"""
272+
cls._event_callbacks[cls][event].remove(callback)
273+
267274
def trigger_event(self, event, *args, **kwargs):
268275
"""
269276
Trigger that calls all of the specified events associated with this class.

test/event_callbacks_test.py

+15
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,21 @@ def test_processing_time_handler_failure(self):
162162
t, result = self._run_processing_time_handler(True)
163163
self.assertEqual(result, [])
164164

165+
def test_remove_event_handler(self):
166+
run_cnt = 0
167+
168+
@EmptyTask.event_handler(luigi.Event.START)
169+
def handler(task):
170+
nonlocal run_cnt
171+
run_cnt += 1
172+
173+
task = EmptyTask()
174+
build([task], local_scheduler=True)
175+
assert run_cnt == 1
176+
EmptyTask.remove_event_handler(luigi.Event.START, handler)
177+
build([task], local_scheduler=True)
178+
assert run_cnt == 1
179+
165180

166181
# A
167182
# / \

0 commit comments

Comments
 (0)