| 498 | 1 #!/usr/bin/env python | 
|  | 2 | 
|  | 3 """ | 
|  | 4 filename -> file-like object as a decorator | 
|  | 5 """ | 
|  | 6 | 
|  | 7 import optparse | 
|  | 8 import os | 
|  | 9 import sys | 
|  | 10 | 
|  | 11 string = (basestring,) | 
|  | 12 | 
|  | 13 class fileobj(object): | 
|  | 14     def __init__(self, arg, *args, **kwargs): | 
|  | 15         self._args = [arg] + list(args) | 
|  | 16         self._kwargs = kwargs | 
|  | 17         # mode, filename, ... | 
|  | 18 | 
|  | 19         # function | 
|  | 20         self.func = arg if not args else None | 
|  | 21     def __call__(self, *args, **kwargs): | 
|  | 22         if self.func is None: | 
|  | 23             raise NotImplementedError | 
|  | 24         else: | 
|  | 25             if len(args) and isinstance(args[0], string): | 
|  | 26                 args = list(args) | 
|  | 27                 with file(args[0], 'w') as fp: | 
|  | 28                     args[0] =fp | 
|  | 29                     return self.func(*args, **kwargs) | 
|  | 30             return self.func(*args, **kwargs) | 
|  | 31 | 
|  | 32 if __name__ == '__main__': | 
|  | 33     # test code | 
|  | 34     import os | 
|  | 35     import tempfile | 
|  | 36 | 
|  | 37     @fileobj | 
|  | 38     def test1(fp): | 
|  | 39         fp.write('foo') | 
|  | 40 | 
|  | 41     filename = tempfile.mktemp() | 
|  | 42     print filename | 
|  | 43     assert not os.path.exists(filename) | 
|  | 44     test1(filename) | 
|  | 45     assert os.path.exists(filename) | 
|  | 46     print file(filename).read() |