1#!/usr/bin/env python3 2 3import os 4import sys 5 6try: 7 from tempfile import TemporaryDirectory 8except ImportError: 9 import shutil 10 import tempfile 11 12 class TemporaryDirectory(object): 13 def __init__(self, suffix='', prefix='tmp', dir=None): 14 self.name = tempfile.mkdtemp(suffix, prefix, dir) 15 16 def __del__(self): 17 self.cleanup() 18 19 def __enter__(self): 20 return self.name 21 22 def __exit__(self, exc, value, tb): 23 self.cleanup() 24 25 def cleanup(self): 26 if self.name: 27 shutil.rmtree(self.name) 28 self.name = None 29 30if sys.version_info >= (3, 0): 31 from os import makedirs 32else: 33 def makedirs(path, exist_ok): 34 if exist_ok and os.path.exists(path): 35 return 36 return os.makedirs(path) 37 38if sys.version_info >= (3, 0): 39 from io import StringIO 40else: 41 from StringIO import StringIO 42 43 44try: 45 from unittest.mock import patch 46except ImportError: 47 import contextlib 48 @contextlib.contextmanager 49 def patch(target, mock): 50 obj, attr = target.rsplit('.') 51 obj = __import__(obj) 52 original_value = getattr(obj, attr) 53 setattr(obj, attr, mock) 54 try: 55 yield 56 finally: 57 setattr(obj, attr, original_value) 58