temps

Context managers for creating and cleaning up temporary directories and files.


Keywords
python, temporary, files, directories, context, manager
License
MIT
Install
pip install temps==0.3.0

Documentation

Introduction

temps is a python module containing context managers for creating and cleaning up temporary files and directories.

This package is alpha and its API is not stable.

Why do I never use the tempfile module?

  • I am responsible for removing files and dirs tempfile creates, which creates lots of boilerplate whenever I use it.
  • There is no context manager for temp dirs.
  • When using mkstemp(), I get an open file descriptor, not a file object, that I have to close.
  • The context manager for temp files contains statements like this from the tempfile docs: "Whether the name can be used to open the file a second time, while the named temporary file is still open, varies across platforms"
  • I do not get to choose the file perms of files and dirs I create.

What do I like about this module?

  • It has a context manager for creating a temp dir and another for temp files.
  • The context manager cleans up the dir or file upon context exit, not upon file closure.
  • No ambiguity about whether you can or cannot open a file twice.
  • You can set the permissions of the temp file or dir to what you want.
  • It is very clear what the implementation is:
    • directories are created and the path is returned.
    • files are not created, since you'll want to do that in a with open(filename) ... statement, and the path is returned.
    • directories and files are cleaned up by the context managers.
    • file and dir names are generated using the uuid module, which presumably will avoid race conditions.

Contribute

Feel free to make a pull request on github.

Requirements

  • Probably Python 2.7 (since that is the only version it has been tested with.)

Installation

Install from pypi.python.org

Download and install using pip:

pip install temps

Install from github.com

Using github, one can clone and install a specific version of the package:

cd ~
git clone git@github.com:todddeluca/temps.git
cd temps
python setup.py install

Usage

Creating a working dir for subprocesses:

with temps.tmpdir() as workdir:
    with open(os.path.join(workdir, 'datafile'), 'wb') as fh:
        fh.write(data)
    subprocess.call('compute.sh {}'.format(workdir), shell=True)
    with open(os.path.join(workdir, 'outfile')) as fh:
        print fh.read()

Creating a temp file for a transform and upload:

with temps.tmpfile() as transformed_path:
    transform(input_path, transformed_path)
    upload(transformed_path, destination)

The default values when parameters are not specified, are stored in variables that are set using environment variables if available or a default value otherwise. Here is a table listing the variable, the environment variable checked, and the default value:

Variable, ENV_VAR, Default
TEMPS_DIR, TEMPS_DIR, tempfile.gettempdir()
TEMPS_PREFIX, TEMPS_PREFIX, ''
TEMPS_SUFFIX, TEMPS_SUFFIX, ''
TEMPS_MODE, TEMPS_MODE, '0777'