Source code for ase2sprkkr.common.directory

import contextlib
import tempfile
import os


[docs] class Directory:
[docs] @staticmethod def new(dir, default="."): if isinstance(dir, Directory): return dir return Directory(dir, default)
[docs] def __init__(self, dir, default="."): if dir is None: dir = default if dir is None: raise ValueError("No directory has been specified") self.enters = 0 self.dir = dir self.path = dir if self.dir == ".": self.chdir = contextlib.suppress
def __str__(self): return str(self.path) if self.path is not False else "<tempdir>" def __repr__(self): return f"<Directory {str(self)}>" def __enter__(self): self.enters += 1 if self.enters == 1: if self.dir is False: self.handler = tempfile.TemporaryDirectory() self.path = self.handler.name else: self.handler = None if self.handler: self.handler.__enter__() return self def __exit__(self, type, value, traceback): self.enters -= 1 if self.enters == 0 and self.handler: self.handler.__exit__(type, value, traceback) self.path = self.dir
[docs] @contextlib.contextmanager def chdir(self): cwd = os.getcwd() if self.path: os.chdir(self.path) try: yield self.path finally: os.chdir(cwd) else: yield cwd