File size: 1,801 Bytes
2631d60 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
import os
import tempfile
class TempDirMixin:
"""Mixin to provide easy access to temp dir.
"""
temp_dir_ = None
@classmethod
def get_base_temp_dir(cls):
# If AUDIOCRAFT_TEST_DIR is set, use it instead of temporary directory.
# this is handy for debugging.
key = "AUDIOCRAFT_TEST_DIR"
if key in os.environ:
return os.environ[key]
if cls.temp_dir_ is None:
cls.temp_dir_ = tempfile.TemporaryDirectory()
return cls.temp_dir_.name
@classmethod
def tearDownClass(cls):
if cls.temp_dir_ is not None:
try:
cls.temp_dir_.cleanup()
cls.temp_dir_ = None
except PermissionError:
# On Windows there is a know issue with `shutil.rmtree`,
# which fails intermittently.
# https://github.com/python/cpython/issues/74168
# Following the above thread, we ignore it.
pass
super().tearDownClass()
@property
def id(self):
return self.__class__.__name__
def get_temp_path(self, *paths):
temp_dir = os.path.join(self.get_base_temp_dir(), self.id)
path = os.path.join(temp_dir, *paths)
os.makedirs(os.path.dirname(path), exist_ok=True)
return path
def get_temp_dir(self, *paths):
temp_dir = os.path.join(self.get_base_temp_dir(), self.id)
path = os.path.join(temp_dir, *paths)
os.makedirs(path, exist_ok=True)
return path
|