diff --git a/Ska/File.py b/Ska/File.py index e11bb36..e56f3f0 100644 --- a/Ska/File.py +++ b/Ska/File.py @@ -5,6 +5,27 @@ import re import subprocess import glob +import contextlib + +@contextlib.contextmanager +def chdir(dirname=None): + """ + Context manager to run block within `dirname` directory. The current + directory is restored even if the block raises an exception. + + >>> with chdir(dirname): + >>> print "Directory within chdir() context:", os.getcwd() + >>> print "Directory after chdir() context:", os.getcwd() + + :param dirname: Directory name + """ + curdir = os.getcwd() + try: + if dirname is not None: + os.chdir(dirname) + yield + finally: + os.chdir(curdir) class TempDir(object): """Create a temporary directory that gets automatically removed. Any diff --git a/setup.py b/setup.py index 7f14b37..5186872 100755 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ description='Various file utilities', author_email = 'taldcroft@cfa.harvard.edu', py_modules = ['Ska.File'], - version='0.02', + version='0.03', zip_safe=False, namespace_packages=['Ska'], packages=['Ska'],