Initial commit
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import shutil
|
||||
import uuid
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def workspace_tmp_root() -> Path:
|
||||
root = Path.cwd() / ".tmp-test" / "portable"
|
||||
root.mkdir(parents=True, exist_ok=True)
|
||||
return root
|
||||
|
||||
|
||||
def workspace_path(*parts: str, base: str = "shared") -> Path:
|
||||
root = workspace_tmp_root() / base
|
||||
root.mkdir(parents=True, exist_ok=True)
|
||||
return root.joinpath(*parts)
|
||||
|
||||
|
||||
class WorkspaceTemporaryDirectory:
|
||||
def __init__(self, suffix: str | None = None, prefix: str | None = None, dir: str | None = None) -> None:
|
||||
_ = dir
|
||||
stem = f"{prefix or 'tmp'}{uuid.uuid4().hex}{suffix or ''}"
|
||||
self._path = workspace_tmp_root() / stem
|
||||
self.name = str(self._path)
|
||||
|
||||
def __enter__(self) -> str:
|
||||
self._path.mkdir(parents=True, exist_ok=True)
|
||||
return self.name
|
||||
|
||||
def __exit__(self, exc_type, exc, tb) -> None:
|
||||
self.cleanup()
|
||||
|
||||
def cleanup(self) -> None:
|
||||
shutil.rmtree(self._path, ignore_errors=True)
|
||||
Reference in New Issue
Block a user