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
|
import tempfile
import shutil
import os
from os import path
from abc import abstractmethod
class ProjectDirGenerator:
@abstractmethod
def generate_project(self, temp_dir: str):
pass
class GenerateProjectFromFixture(ProjectDirGenerator):
def __init__(self, fixture_dir: str):
self._fixture_dir: str = fixture_dir
def generate_project(self, temp_dir: str):
shutil.copytree(self._fixture_dir, temp_dir)
class GenerateProjectWithPyProjectToml(ProjectDirGenerator):
def __init__(self, py_project_toml: str):
self._py_project_toml: str = py_project_toml
def generate_project(self, temp_dir: str):
os.makedirs(temp_dir)
with open(path.join(temp_dir, 'pyproject.toml'), 'w', encoding='utf-8') as f:
f.write(self._py_project_toml)
class TempProjectDir:
def __init__(self, project_dir_generator: ProjectDirGenerator):
self._tmpdir: str = tempfile.mktemp()
project_dir_generator.generate_project(self._tmpdir)
@property
def path(self):
return self._tmpdir
def clean(self):
shutil.rmtree(self._tmpdir, ignore_errors=True)
|