tempdir.py
57 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
Srinivas Reddy Thatiparthy
|
r23288 | """ This module contains classes - NamedFileInTemporaryDirectory, TemporaryWorkingDirectory. | ||
Srinivas Reddy Thatiparthy
|
r23701 | These classes add extra features such as creating a named file in temporary directory and | ||
Srinivas Reddy Thatiparthy
|
r23288 | creating a context manager for the working directory which is also temporary. | ||
""" | ||||
Min RK
|
r21102 | import os as _os | ||
Srinivas Reddy Thatiparthy
|
r23287 | from tempfile import TemporaryDirectory | ||
Min RK
|
r21102 | |||
Srinivas Reddy Thatiparthy
|
r23701 | |||
Min RK
|
r21102 | class NamedFileInTemporaryDirectory(object): | ||
def __init__(self, filename, mode='w+b', bufsize=-1, **kwds): | ||||
""" | ||||
Open a file named `filename` in a temporary directory. | ||||
This context manager is preferred over `NamedTemporaryFile` in | ||||
stdlib `tempfile` when one needs to reopen the file. | ||||
Arguments `mode` and `bufsize` are passed to `open`. | ||||
Rest of the arguments are passed to `TemporaryDirectory`. | ||||
""" | ||||
self._tmpdir = TemporaryDirectory(**kwds) | ||||
path = _os.path.join(self._tmpdir.name, filename) | ||||
self.file = open(path, mode, bufsize) | ||||
def cleanup(self): | ||||
self.file.close() | ||||
self._tmpdir.cleanup() | ||||
__del__ = cleanup | ||||
def __enter__(self): | ||||
return self.file | ||||
def __exit__(self, type, value, traceback): | ||||
self.cleanup() | ||||
class TemporaryWorkingDirectory(TemporaryDirectory): | ||||
""" | ||||
Creates a temporary directory and sets the cwd to that directory. | ||||
Automatically reverts to previous cwd upon cleanup. | ||||
Usage example: | ||||
with TemporaryWorkingDirectory() as tmpdir: | ||||
... | ||||
""" | ||||
def __enter__(self): | ||||
self.old_wd = _os.getcwd() | ||||
_os.chdir(self.name) | ||||
return super(TemporaryWorkingDirectory, self).__enter__() | ||||
def __exit__(self, exc, value, tb): | ||||
_os.chdir(self.old_wd) | ||||
return super(TemporaryWorkingDirectory, self).__exit__(exc, value, tb) | ||||