#!/usr/bin/env python3

# pylint: disable=unused-import,import-error

import sys


try:
    from tempfile import TemporaryDirectory
except ImportError:
    import shutil
    import tempfile


    class TemporaryDirectory(object):
        def __init__(self, suffix='', prefix='tmp', dir=None):
            # pylint: disable=redefined-builtin
            self.name = tempfile.mkdtemp(suffix, prefix, dir)


        def __del__(self):
            self.cleanup()


        def __enter__(self):
            return self.name


        def __exit__(self, exc, value, tb):
            self.cleanup()


        def cleanup(self):
            if self.name:
                shutil.rmtree(self.name)
                self.name = None


if sys.version_info >= (3, 0):
    from os import makedirs
else:
    import os


    def makedirs(path, exist_ok):
        if exist_ok and os.path.exists(path):
            return
        os.makedirs(path)


if sys.version_info >= (3, 0):
    from io import StringIO
else:
    from StringIO import StringIO


try:
    from unittest.mock import patch
except ImportError:
    import contextlib


    @contextlib.contextmanager
    def patch(target, mock):
        obj, attr = target.rsplit('.')
        obj = __import__(obj)
        original_value = getattr(obj, attr)
        setattr(obj, attr, mock)
        try:
            yield
        finally:
            setattr(obj, attr, original_value)


if sys.version_info >= (3, 2):
    from unittest import TestCase
else:
    import unittest


    class TestCase(unittest.TestCase):
        def assertRegex(self, text, expected_regex, msg=None):
            # pylint: disable=deprecated-method
            self.assertRegexpMatches(text, expected_regex, msg)


        def assertNotRegex(self, text, unexpected_regex, msg=None):
            # pylint: disable=deprecated-method
            self.assertNotRegexpMatches(text, unexpected_regex, msg)