view python/fileobj.py @ 767:35f8751c0930

it is very annoying to have ones overrides overridden; see also http://stackoverflow.com/questions/25381304/why-type-cd-on-mac-os-states-that-cd-is-a-function
author Jeff Hammel <k0scist@gmail.com>
date Thu, 28 Jan 2016 14:02:17 -0800
parents 95ba5770d2f0
children
line wrap: on
line source

#!/usr/bin/env python

"""
filename -> file-like object as a decorator
"""

import optparse
import os
import sys

string = (basestring,)

class fileobj(object):
    def __init__(self, arg, *args, **kwargs):
        self._args = [arg] + list(args)
        self._kwargs = kwargs
        # mode, filename, ...

        # function
        self.func = arg if not args else None
    def __call__(self, *args, **kwargs):
        if self.func is None:
            raise NotImplementedError
        else:
            if len(args) and isinstance(args[0], string):
                args = list(args)
                with file(args[0], 'w') as fp:
                    args[0] =fp
                    return self.func(*args, **kwargs)
            return self.func(*args, **kwargs)

if __name__ == '__main__':
    # test code
    import os
    import tempfile

    @fileobj
    def test1(fp):
        fp.write('foo')

    filename = tempfile.mktemp()
    print filename
    assert not os.path.exists(filename)
    test1(filename)
    assert os.path.exists(filename)
    print file(filename).read()