Skip to content

Commit

Permalink
Merge pull request #3282 from starhel/remove_event_handler
Browse files Browse the repository at this point in the history
Add option to remove event handler from luigi.Task
  • Loading branch information
dlstadther committed Apr 14, 2024
2 parents 64d6c48 + 411cacf commit ed530b8
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
7 changes: 7 additions & 0 deletions luigi/task.py
Expand Up @@ -264,6 +264,13 @@ def wrapped(callback):
return callback
return wrapped

@classmethod
def remove_event_handler(cls, event, callback):
"""
Function to remove the event handler registered previously by the cls.event_handler decorator.
"""
cls._event_callbacks[cls][event].remove(callback)

def trigger_event(self, event, *args, **kwargs):
"""
Trigger that calls all of the specified events associated with this class.
Expand Down
15 changes: 15 additions & 0 deletions test/event_callbacks_test.py
Expand Up @@ -162,6 +162,21 @@ def test_processing_time_handler_failure(self):
t, result = self._run_processing_time_handler(True)
self.assertEqual(result, [])

def test_remove_event_handler(self):
run_cnt = 0

@EmptyTask.event_handler(luigi.Event.START)
def handler(task):
nonlocal run_cnt
run_cnt += 1

task = EmptyTask()
build([task], local_scheduler=True)
assert run_cnt == 1
EmptyTask.remove_event_handler(luigi.Event.START, handler)
build([task], local_scheduler=True)
assert run_cnt == 1


# A
# / \
Expand Down

0 comments on commit ed530b8

Please sign in to comment.