support.py (3032B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\distutils\tests\support.py 2 import os 3 import shutil 4 import tempfile 5 from copy import deepcopy 6 import warnings 7 from distutils import log 8 from distutils.log import DEBUG, INFO, WARN, ERROR, FATAL 9 from distutils.core import Distribution 10 11 def capture_warnings(func): 12 13 def _capture_warnings(*args, **kw): 14 with warnings.catch_warnings(): 15 warnings.simplefilter('ignore') 16 return func(*args, **kw) 17 18 return _capture_warnings 19 20 21 class LoggingSilencer(object): 22 23 def setUp(self): 24 super(LoggingSilencer, self).setUp() 25 self.threshold = log.set_threshold(log.FATAL) 26 self._old_log = log.Log._log 27 log.Log._log = self._log 28 self.logs = [] 29 30 def tearDown(self): 31 log.set_threshold(self.threshold) 32 log.Log._log = self._old_log 33 super(LoggingSilencer, self).tearDown() 34 35 def _log(self, level, msg, args): 36 if level not in (DEBUG, 37 INFO, 38 WARN, 39 ERROR, 40 FATAL): 41 raise ValueError('%s wrong log level' % str(level)) 42 self.logs.append((level, msg, args)) 43 44 def get_logs(self, *levels): 45 46 def _format(msg, args): 47 if len(args) == 0: 48 return msg 49 return msg % args 50 51 return [ _format(msg, args) for level, msg, args in self.logs if level in levels ] 52 53 def clear_logs(self): 54 self.logs = [] 55 56 57 class TempdirManager(object): 58 59 def setUp(self): 60 super(TempdirManager, self).setUp() 61 self.tempdirs = [] 62 63 def tearDown(self): 64 super(TempdirManager, self).tearDown() 65 while self.tempdirs: 66 d = self.tempdirs.pop() 67 shutil.rmtree(d, os.name in ('nt', 'cygwin')) 68 69 def mkdtemp(self): 70 d = tempfile.mkdtemp() 71 self.tempdirs.append(d) 72 return d 73 74 def write_file(self, path, content = 'xxx'): 75 if isinstance(path, (list, tuple)): 76 path = os.path.join(*path) 77 f = open(path, 'w') 78 try: 79 f.write(content) 80 finally: 81 f.close() 82 83 def create_dist(self, pkg_name = 'foo', **kw): 84 tmp_dir = self.mkdtemp() 85 pkg_dir = os.path.join(tmp_dir, pkg_name) 86 os.mkdir(pkg_dir) 87 dist = Distribution(attrs=kw) 88 return (pkg_dir, dist) 89 90 91 class DummyCommand: 92 93 def __init__(self, **kwargs): 94 for kw, val in kwargs.items(): 95 setattr(self, kw, val) 96 97 def ensure_finalized(self): 98 pass 99 100 101 class EnvironGuard(object): 102 103 def setUp(self): 104 super(EnvironGuard, self).setUp() 105 self.old_environ = deepcopy(os.environ) 106 107 def tearDown(self): 108 for key, value in self.old_environ.items(): 109 if os.environ.get(key) != value: 110 os.environ[key] = value 111 112 for key in os.environ.keys(): 113 if key not in self.old_environ: 114 del os.environ[key] 115 116 super(EnvironGuard, self).tearDown()