From 06d6c2c25c1ddca0e7224a7e2e30597731f547da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Redzy=C5=84ski?= Date: Tue, 26 Nov 2019 12:25:10 +0100 Subject: [PATCH] test env: extract empty dir fixture to class --- tests/basic_env.py | 95 ++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 45 deletions(-) diff --git a/tests/basic_env.py b/tests/basic_env.py index 1fba67a55..786386318 100644 --- a/tests/basic_env.py +++ b/tests/basic_env.py @@ -21,7 +21,55 @@ from dvc.utils.fs import remove logger = logging.getLogger("dvc") -class TestDirFixture(object): +class TestDirFixtureBase(object): + def __init__(self): + root_dir = self.mkdtemp() + self._root_dir = os.path.realpath(root_dir) + + @property + def root_dir(self): + return self._root_dir + + def _pushd(self, d): + if not hasattr(self, "_saved_dir"): + self._saved_dir = os.path.realpath(os.curdir) + os.chdir(d) + + def _popd(self): + os.chdir(self._saved_dir) + self._saved_dir = None + + @staticmethod + def mkdtemp(base_directory=None): + prefix = "dvc-test.{}.".format(os.getpid()) + suffix = ".{}".format(shortuuid.uuid()) + return tempfile.mkdtemp( + prefix=prefix, suffix=suffix, dir=base_directory + ) + + def setUp(self): + self._pushd(self._root_dir) + + def tearDown(self): + self._popd() + try: + remove(self._root_dir) + except OSError as exc: + # We ignore this under Windows with a warning because it happened + # to be really hard to trace all not properly closed files. + # + # Best guess so far is that gitpython is the culprit: + # it opens files and uses __del__ to close them, which can happen + # late in current pythons. TestGitFixture and TestDvcFixture try + # to close that and it works on most of the tests, but not all. + # Repos and thus git repos are created all over the dvc ;) + if os.name == "nt" and exc.winerror == 32: + warnings.warn("Failed to remove test dir: " + str(exc)) + else: + raise + + +class TestDirFixture(TestDirFixtureBase): DATA_DIR = "data_dir" DATA_SUB_DIR = os.path.join(DATA_DIR, "data_sub_dir") DATA = os.path.join(DATA_DIR, "data") @@ -49,23 +97,6 @@ class TestDirFixture(object): UNICODE = "тест" UNICODE_CONTENTS = "проверка" - def __init__(self): - root_dir = self.mkdtemp() - self._root_dir = os.path.realpath(root_dir) - - @property - def root_dir(self): - return self._root_dir - - def _pushd(self, d): - if not hasattr(self, "_saved_dir"): - self._saved_dir = os.path.realpath(os.curdir) - os.chdir(d) - - def _popd(self): - os.chdir(self._saved_dir) - self._saved_dir = None - def create(self, name, contents): dname = os.path.dirname(name) if len(dname) > 0 and not os.path.isdir(dname): @@ -78,16 +109,8 @@ class TestDirFixture(object): else contents.decode("utf-8") ) - @staticmethod - def mkdtemp(base_directory=None): - prefix = "dvc-test.{}.".format(os.getpid()) - suffix = ".{}".format(shortuuid.uuid()) - return tempfile.mkdtemp( - prefix=prefix, suffix=suffix, dir=base_directory - ) - def setUp(self): - self._pushd(self._root_dir) + super(TestDirFixture, self).setUp() self.create(self.FOO, self.FOO_CONTENTS) self.create(self.BAR, self.BAR_CONTENTS) self.create(self.CODE, self.CODE_CONTENTS) @@ -97,24 +120,6 @@ class TestDirFixture(object): self.create(self.DATA_SUB, self.DATA_SUB_CONTENTS) self.create(self.UNICODE, self.UNICODE_CONTENTS) - def tearDown(self): - self._popd() - try: - remove(self._root_dir) - except OSError as exc: - # We ignore this under Windows with a warning because it happened - # to be really hard to trace all not properly closed files. - # - # Best guess so far is that gitpython is the culprit: - # it opens files and uses __del__ to close them, which can happen - # late in current pythons. TestGitFixture and TestDvcFixture try - # to close that and it works on most of the tests, but not all. - # Repos and thus git repos are created all over the dvc ;) - if os.name == "nt" and exc.winerror == 32: - warnings.warn("Failed to remove test dir: " + str(exc)) - else: - raise - class TestGitFixture(TestDirFixture): N_RETRIES = 5