Skip to content

Latest commit

 

History

History
324 lines (271 loc) · 8.57 KB

README.rst

File metadata and controls

324 lines (271 loc) · 8.57 KB

scratchdir

Build Status codecov Code Climate Issue Count

PyPI Version PyPI Versions

Context manager to maintain your temporary directories/files.

Installation

To install scratchdir from pip:

$ pip install scratchdir

To install scratchdir from source:

$ git clone [email protected]:ahawker/scratchdir.git
$ python setup.py install

Usage

Creating a new ScratchDir is simple. Just instantiate a new instance and call setup:

⇒  cat examples/readme/setup.py
import scratchdir

sd = scratchdir.ScratchDir()
sd.setup()
print(sd.wd)
sd.teardown()

⇒  python examples/readme/usage-1.py
/var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/3e56r54m.scratchdir

Or as a context manager using the with statement:

⇒  cat examples/readme/context-manager.py
import scratchdir

with scratchdir.ScratchDir() as sd:
    print(sd.wd)

⇒  python examples/readme/context-manager.py
/var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/_ibfhq1s.scratchdir

Files created by the ScratchDir are automatically cleaned up on teardown:

⇒  cat examples/readme/cleanup.py
import os
import scratchdir

path = None

with scratchdir.ScratchDir() as sd:
    tmp = sd.named(delete=False)
    path = tmp.name
    print('Path {} exists? {}'.format(path, os.path.exists(path)))

print('Path {} exists? {}'.format(path, os.path.exists(path)))

⇒  python examples/readme/cleanup.py
Path /var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/y1aedyk8.scratchdir/tmp7m79rev1 exists? True
Path /var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/y1aedyk8.scratchdir/tmp7m79rev1 exists? False

Directories within the ScratchDir are also easy to create:

⇒  cat examples/readme/directory.py
import scratchdir

with scratchdir.ScratchDir() as sd:
    subdir = sd.directory()
    print(subdir)

⇒  python examples/readme/directory.py
/var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/c1odkxbw.scratchdir/tmpcyeqjk1v

Methods on the ScratchDir instance will pass arguments down to their corresponding functions in tempfile.

⇒  cat examples/readme/params.py
import scratchdir

with scratchdir.ScratchDir() as sd:
    tmp = sd.named(suffix='.txt', prefix='logfile-', delete=False)
    print(tmp.name)

⇒  python examples/readme/params.py
/var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/1h_7379t.scratchdir/logfile-z1gq195q.txt

Creating a hierarchy of ScratchDir instances to match that of your domain objects is also simple:

⇒  cat examples/readme/hierarchy.py
import scratchdir

with scratchdir.ScratchDir(prefix='grandparent-') as grandparent:
    print(grandparent.wd)
    with grandparent.child(prefix='parent-') as parent:
        print(parent.wd)
        with parent.child(prefix='child-') as child:
            print(child.wd)

⇒  python examples/readme/hierarchy.py
/var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/grandparent-4ld_pl8f.scratchdir
/var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/grandparent-4ld_pl8f.scratchdir/parent-s6y_gmxg.scratchdir
/var/folders/86/zhtx1pv53qs2mm1fq1k1841w0000gn/T/grandparent-4ld_pl8f.scratchdir/parent-s6y_gmxg.scratchdir/child-28k2hpdk.scratchdir

Methods

The ScratchDir instance maintains a set of bound methods are map to functions/classes within the tempfile module in the standard library. A table of methods is as follows:

scra tchd ir temp file desc ript ion
file , Temp orar yFil e Temp orar yFil e Crea te a name less temp orar y file that is auto mati call y dele ted once it's clos ed.
name d, Name dTem pora ryFi le Name dTem pora ryFi le Crea te a temp orar y file that rece ives a file name on disk that is auto mati call y dele ted once it's clos ed unle ss the ``de lete `` para mete r is ``Fa lse` `.
spoo led, Spoo ledT empo rary File Spoo ledT empo rary File Crea te a temp orar y file that will over flow from memo ry onto disk once a defi ned maxi mum size is exce eded .
secu re, mkst emp mkst emp Crea te a temp orar y file in as secu re way as poss ible .
dire ctor y, mkdt emp mkdt emp Crea te a temp orar y dire ctor y.
file name N/A Crea te a uniq ue file name with in the ``Sc ratc hDir ``.
join N/A Join a numb er of path s to the root of the ``Sc ratc hDir ``.

Goals

I've implemented similar functionality three times now, starting with my scatter project back in 2013-2014. I'd rather not write it again, so the goal is that scratchdir should be generic and reusable for future projects.

Contributing

If you would like to contribute, simply fork the repository, push your changes and send a pull request.

License

Scratchdir is avaialble under the Apache 2.0 license.