1 new commit in py: https://bitbucket.org/hpk42/py/commits/37f557844498/ Changeset: 37f557844498 User: hpk42 Date: 2014-07-17 10:51:38 Summary: refactor class-level registry on ForkedFunc child start/finish event to become instance based (i.e. passed into the constructor)
bump to 1.4.22 for release Affected #: 6 files diff -r 89d472ccb3556f34f2a039c61f8b0090a8e4e9a2 -r 37f557844498ef4943c1e68c8f40bc3713b0b393 CHANGELOG --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +1.4.22 +================================================== + +- refactor class-level registry on ForkedFunc child start/finish + event to become instance based (i.e. passed into the constructor) + 1.4.21 ================================================== diff -r 89d472ccb3556f34f2a039c61f8b0090a8e4e9a2 -r 37f557844498ef4943c1e68c8f40bc3713b0b393 README.txt --- a/README.txt +++ b/README.txt @@ -13,5 +13,5 @@ Bugs and issues: http://bitbucket.org/hpk42/py/issues/ -Authors: Holger Krekel and others, 2004-2013 +Authors: Holger Krekel and others, 2004-2014 diff -r 89d472ccb3556f34f2a039c61f8b0090a8e4e9a2 -r 37f557844498ef4943c1e68c8f40bc3713b0b393 py/__init__.py --- a/py/__init__.py +++ b/py/__init__.py @@ -8,7 +8,7 @@ (c) Holger Krekel and others, 2004-2013 """ -__version__ = '1.4.21' +__version__ = '1.4.22' from py import _apipkg diff -r 89d472ccb3556f34f2a039c61f8b0090a8e4e9a2 -r 37f557844498ef4943c1e68c8f40bc3713b0b393 py/_process/forkedfunc.py --- a/py/_process/forkedfunc.py +++ b/py/_process/forkedfunc.py @@ -11,31 +11,6 @@ import marshal -class HookMixin(object): - _on_start = list() - _on_exit = list() - - @classmethod - def register_on_start(cls, callback): - cls._on_start.append(callback) - - @classmethod - def register_on_exit(self, callback): - self._on_exit.append(callback) - - def _run_on_start(self): - self._run_callbacks(self._on_start) - - def _run_on_exit(self): - self._run_callbacks(self._on_exit) - - def _run_callbacks(self, callbacks): - for callback in callbacks: - callback(self) - sys.stdout.flush() - sys.stderr.flush() - - def get_unbuffered_io(fd, filename): f = open(str(filename), "w") if fd != f.fileno(): @@ -49,11 +24,12 @@ return AutoFlush() -class ForkedFunc(HookMixin): +class ForkedFunc: EXITSTATUS_EXCEPTION = 3 - def __init__(self, fun, args=None, kwargs=None, nice_level=0): + def __init__(self, fun, args=None, kwargs=None, nice_level=0, + child_on_start=None, child_on_exit=None): if args is None: args = [] if kwargs is None: @@ -71,9 +47,9 @@ self.pid = pid else: # in child process self.pid = None - self._child(nice_level) + self._child(nice_level, child_on_start, child_on_exit) - def _child(self, nice_level): + def _child(self, nice_level, child_on_start, child_on_exit): # right now we need to call a function, but first we need to # map all IO that might happen sys.stdout = stdout = get_unbuffered_io(1, self.STDOUT) @@ -84,10 +60,12 @@ if nice_level: os.nice(nice_level) try: - self._run_on_start() + if child_on_start is not None: + child_on_start() retval = self.fun(*self.args, **self.kwargs) retvalf.write(marshal.dumps(retval)) - self._run_on_exit() + if child_on_exit is not None: + child_on_exit() except: excinfo = py.code.ExceptionInfo() stderr.write(str(excinfo._getreprcrash())) diff -r 89d472ccb3556f34f2a039c61f8b0090a8e4e9a2 -r 37f557844498ef4943c1e68c8f40bc3713b0b393 setup.py --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ name='py', description='library with cross-python path, ini-parsing, io, code, log facilities', long_description = open('README.txt').read(), - version='1.4.21', + version='1.4.22', url='http://pylib.readthedocs.org/', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], diff -r 89d472ccb3556f34f2a039c61f8b0090a8e4e9a2 -r 37f557844498ef4943c1e68c8f40bc3713b0b393 testing/process/test_forkedfunc.py --- a/testing/process/test_forkedfunc.py +++ b/testing/process/test_forkedfunc.py @@ -3,10 +3,6 @@ pytestmark = py.test.mark.skipif("not hasattr(os, 'fork')") -@pytest.fixture(autouse=True) -def clear_forkedfunc(monkeypatch): - monkeypatch.setattr(py.process.ForkedFunc, "_on_start", []) - monkeypatch.setattr(py.process.ForkedFunc, "_on_exit", []) def test_waitfinish_removes_tempdir(): ff = py.process.ForkedFunc(boxf1) @@ -126,20 +122,19 @@ def test_hooks(monkeypatch): - monkeypatch.setattr(py.process.ForkedFunc, "_on_exit", []) - monkeypatch.setattr(py.process.ForkedFunc, "_on_start", []) def _boxed(): return 1 - def _on_start(proc): + def _on_start(): sys.stdout.write("some out\n") + sys.stdout.flush() - def _on_exit(proc): + def _on_exit(): sys.stderr.write("some err\n") + sys.stderr.flush() - py.process.ForkedFunc.register_on_start(_on_start) - py.process.ForkedFunc.register_on_exit(_on_exit) - result = py.process.ForkedFunc(_boxed).waitfinish() + result = py.process.ForkedFunc(_boxed, child_on_start=_on_start, + child_on_exit=_on_exit).waitfinish() assert result.out == "some out\n" assert result.err == "some err\n" assert result.exitstatus == 0 Repository URL: https://bitbucket.org/hpk42/py/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. _______________________________________________ pytest-commit mailing list pytest-commit@python.org https://mail.python.org/mailman/listinfo/pytest-commit