|
1 | 1 | import os |
| 2 | +import sys |
2 | 3 | import warnings |
3 | 4 | import ROOT |
4 | | -import root_numpy as rnp |
5 | 5 | from numpy.random import RandomState |
| 6 | +import tempfile |
| 7 | +from contextlib import contextmanager |
| 8 | +import root_numpy as rnp |
| 9 | +from root_numpy.testdata import get_filepath |
| 10 | +import threading |
| 11 | + |
| 12 | +LOCK = threading.RLock() |
6 | 13 |
|
7 | 14 | ROOT.gErrorIgnoreLevel = ROOT.kFatal |
8 | 15 | warnings.filterwarnings('ignore', category=DeprecationWarning) |
9 | 16 | warnings.filterwarnings('ignore', category=rnp.RootNumpyUnconvertibleWarning) |
10 | 17 | RNG = RandomState(42) |
11 | 18 |
|
12 | | -from root_numpy.testdata import get_filepath |
13 | 19 |
|
14 | 20 | def load(data): |
15 | 21 | if isinstance(data, list): |
16 | 22 | return [get_filepath(x) for x in data] |
17 | 23 | return get_filepath(data) |
18 | 24 |
|
19 | | -import tempfile |
20 | | -from contextlib import contextmanager |
21 | 25 |
|
22 | 26 | @contextmanager |
23 | 27 | def temp(): |
24 | 28 | tmp_fd, tmp_path = tempfile.mkstemp(suffix='.root') |
25 | 29 | tmp_root = ROOT.TFile.Open(tmp_path, 'recreate') |
26 | | - yield tmp_root |
27 | | - tmp_root.Close() |
28 | | - os.close(tmp_fd) |
29 | | - os.remove(tmp_path) |
| 30 | + try: |
| 31 | + yield tmp_root |
| 32 | + finally: |
| 33 | + tmp_root.Close() |
| 34 | + os.close(tmp_fd) |
| 35 | + os.remove(tmp_path) |
| 36 | + |
| 37 | + |
| 38 | +@contextmanager |
| 39 | +def silence_sout(): |
| 40 | + LOCK.acquire() |
| 41 | + sys.__stdout__.flush() |
| 42 | + origstdout = sys.__stdout__ |
| 43 | + oldstdout_fno = os.dup(sys.__stdout__.fileno()) |
| 44 | + devnull = os.open(os.devnull, os.O_WRONLY) |
| 45 | + newstdout = os.dup(1) |
| 46 | + os.dup2(devnull, 1) |
| 47 | + os.close(devnull) |
| 48 | + sys.__stdout__ = os.fdopen(newstdout, 'w') |
| 49 | + try: |
| 50 | + yield |
| 51 | + finally: |
| 52 | + sys.__stdout__ = origstdout |
| 53 | + sys.__stdout__.flush() |
| 54 | + os.dup2(oldstdout_fno, 1) |
| 55 | + LOCK.release() |
| 56 | + |
| 57 | + |
| 58 | +@contextmanager |
| 59 | +def silence_serr(): |
| 60 | + LOCK.acquire() |
| 61 | + sys.__stderr__.flush() |
| 62 | + origstderr = sys.__stderr__ |
| 63 | + oldstderr_fno = os.dup(sys.__stderr__.fileno()) |
| 64 | + devnull = os.open(os.devnull, os.O_WRONLY) |
| 65 | + newstderr = os.dup(2) |
| 66 | + os.dup2(devnull, 2) |
| 67 | + os.close(devnull) |
| 68 | + sys.__stderr__ = os.fdopen(newstderr, 'w') |
| 69 | + try: |
| 70 | + yield |
| 71 | + finally: |
| 72 | + sys.__stderr__ = origstderr |
| 73 | + sys.__stderr__.flush() |
| 74 | + os.dup2(oldstderr_fno, 2) |
| 75 | + LOCK.release() |
| 76 | + |
| 77 | + |
| 78 | +@contextmanager |
| 79 | +def silence(): |
| 80 | + with silence_sout(): |
| 81 | + with silence_serr(): |
| 82 | + yield |
0 commit comments