Skip to content

Commit

Permalink
Merge c94f113 into 5bd0bd0
Browse files Browse the repository at this point in the history
  • Loading branch information
andsor committed Aug 24, 2015
2 parents 5bd0bd0 + c94f113 commit 90c1e3d
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 3 deletions.
3 changes: 3 additions & 0 deletions docs/changelog.rst
@@ -1,6 +1,9 @@
Changelog
=========

* :release:`0.4.0 <2015-08-24>`
* :feature:`8` Add capture_jug_stdout option

* :release:`0.3.0 <2015-08-20>`
* :feature:`3` Implement Jug logging (verbose option)
* :feature:`1` Implement keep_going option
Expand Down
39 changes: 36 additions & 3 deletions gridjug/grid_jug.py
Expand Up @@ -2,6 +2,26 @@

from __future__ import absolute_import, division, print_function

import io

try: # Python >= 3.4
from contextlib import redirect_stdout
except ImportError:
# Credit: J.F. Sebastian http://stackoverflow.com/a/22434262/2366781
import sys
from contextlib import contextmanager

@contextmanager
def redirect_stdout(new_target):
# replace sys.stdout
old_target, sys.stdout = sys.stdout, new_target
try:
# run some code with the replaced stdout
yield new_target
finally:
# restore to the previous value
sys.stdout = old_target


def grid_jug(
jugfile,
Expand All @@ -11,6 +31,7 @@ def grid_jug(
name='gridjug',
keep_going=False,
verbose=False,
capture_jug_stdout=False,
**kwargs
):
"""
Expand Down Expand Up @@ -56,6 +77,10 @@ def grid_jug(
verbose : bool, optional
If ``True``, Jug logs ``INFO`` events
capture_jug_stdout : bool, optional
Defaults to ``False``.
If ``True``, captures Jug's task summary printed to stdout.
**kwargs : keyword-dict, optional
additional options passed through to :any:`gridmap.grid_map`
Expand Down Expand Up @@ -100,7 +125,7 @@ def grid_jug(
# https://github.com/pygridtools/gridmap/blob/master/gridmap/job.py#L929
# https://github.com/pygridtools/gridmap/blob/master/gridmap/job.py#L933
#
args_list = jug_nworkers * [[jug_argv]]
args_list = jug_nworkers * [[capture_jug_stdout, jug_argv]]

return gridmap.grid_map(
f=_jug_main,
Expand All @@ -110,9 +135,17 @@ def grid_jug(
)


def _jug_main(*args, **kwargs):
def _jug_main(capture_stdout, *args, **kwargs):
"""
wrapper function for pickle
"""
import jug
return jug.jug.main(*args, **kwargs)

if capture_stdout:
f = io.StringIO()
with redirect_stdout(f):
ret = jug.jug.main(*args, **kwargs)
else:
ret = jug.jug.main(*args, **kwargs)

return ret
14 changes: 14 additions & 0 deletions gridjug/test/test_gridjug.py
Expand Up @@ -98,6 +98,20 @@ def test_failing_keep_going(tmpdir):
assert task.can_load() == (n != 6)


def test_jug_stdout(capsys):
gridjug.grid_jug(jugfile=PRIMES_JUGFILE, local=True)
out = capsys.readouterr()[0]
assert 'Executed' in out


def test_jug_capture_stdout(capsys):
gridjug.grid_jug(
jugfile=PRIMES_JUGFILE, local=True, capture_jug_stdout=True
)
out = capsys.readouterr()[0]
assert not out


@pytest.mark.skipif(not ON_NLD_LOGIN, reason='Not on NLD cluster login node')
def test_nld_execute():
gridjug.grid_jug(
Expand Down

0 comments on commit 90c1e3d

Please sign in to comment.