49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest import mock
|
|
|
|
from tests.python.support.paths import add_repo_path
|
|
|
|
add_repo_path("skills/cad/scripts")
|
|
|
|
from cadpy import assembly_spec, catalog, generation, glb_topology, metadata, render, step_scene, step_targets
|
|
from tests.python.support.tmp_root import CAD_TEST_TMP_ROOT, temporary_directory
|
|
|
|
|
|
IGNORED_TEST_ROOT = CAD_TEST_TMP_ROOT
|
|
|
|
|
|
class IsolatedCadRoots:
|
|
def __init__(self, testcase: unittest.TestCase, *, prefix: str) -> None:
|
|
self._tempdir = temporary_directory(prefix=prefix)
|
|
testcase.addCleanup(self._tempdir.cleanup)
|
|
|
|
self.root = Path(self._tempdir.name)
|
|
self.cad_root = self.root / "workspace"
|
|
self.cad_root.mkdir(parents=True, exist_ok=True)
|
|
|
|
patches = []
|
|
for module in (
|
|
assembly_spec,
|
|
catalog,
|
|
render,
|
|
generation,
|
|
glb_topology,
|
|
metadata,
|
|
step_scene,
|
|
step_targets,
|
|
):
|
|
if hasattr(module, "CAD_ROOT"):
|
|
patches.append(mock.patch.object(module, "CAD_ROOT", self.cad_root))
|
|
if hasattr(module, "REPO_ROOT"):
|
|
patches.append(mock.patch.object(module, "REPO_ROOT", self.cad_root))
|
|
for patcher in patches:
|
|
patcher.start()
|
|
testcase.addCleanup(patcher.stop)
|
|
|
|
def temporary_cad_directory(self, *, prefix: str) -> tempfile.TemporaryDirectory[str]:
|
|
return tempfile.TemporaryDirectory(prefix=prefix, dir=self.cad_root)
|