Skip to content

Commit

Permalink
BearRunning: Move out task_done
Browse files Browse the repository at this point in the history
This modularizes the task_done marking and adds an extra test for it.
  • Loading branch information
sils committed Jun 24, 2015
1 parent e7171a1 commit 7afd2ed
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 5 deletions.
17 changes: 13 additions & 4 deletions coalib/processes/BearRunning.py
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,17 @@ def get_next_global_bear(timeout,
return bear, bear.__class__.__name__, dependency_results


def task_done(obj):
"""
Invokes task_done if the given queue provides this operation. Otherwise
passes silently.
:param obj: Any object.
"""
if hasattr(obj, "task_done"):
obj.task_done()


def run_local_bears(filename_queue,
message_queue,
timeout,
Expand Down Expand Up @@ -422,8 +433,7 @@ def run_local_bears(filename_queue,
local_result_dict,
control_queue,
filename)
if hasattr(filename_queue, "task_done"):
filename_queue.task_done()
task_done(filename_queue)
except queue.Empty:
return

Expand Down Expand Up @@ -468,8 +478,7 @@ def run_global_bears(message_queue,
control_queue.put((CONTROL_ELEMENT.GLOBAL, bearname))
else:
global_result_dict[bearname] = None
if hasattr(global_bear_queue, "task_done"):
global_bear_queue.task_done()
task_done(global_bear_queue)
except queue.Empty:
return

Expand Down
13 changes: 12 additions & 1 deletion coalib/tests/processes/BearRunningTest.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
from coalib.results.Result import Result, RESULT_SEVERITY
from coalib.bears.LocalBear import LocalBear
from coalib.bears.GlobalBear import GlobalBear
from coalib.processes.BearRunning import run, LogMessage, LOG_LEVEL, send_msg
from coalib.processes.BearRunning import (run,
LogMessage,
LOG_LEVEL,
send_msg,
task_done)
from coalib.settings.Section import Section


Expand Down Expand Up @@ -113,6 +117,13 @@ def setUp(self):
self.message_queue = queue.Queue()
self.control_queue = queue.Queue()

def test_queue_done_marking(self):
self.message_queue.put("test")
task_done(self.message_queue) # Should make the queue joinable
self.message_queue.join()

task_done("test") # Should pass silently

def test_messaging(self):
send_msg(self.message_queue,
0,
Expand Down

0 comments on commit 7afd2ed

Please sign in to comment.