pymake

A build system based on Build Systems à la Carte
git clone https://git.grace.moe/pymake
Log | Files | Refs | README

io.py (805B)


      1 _open = open
      2 
      3 
      4 class open:
      5     def __init__(self, *args, **kwargs):
      6         self.args = args
      7         self.kwargs = kwargs
      8         self.entered = False
      9         self.file = _open(*args, **kwargs)
     10 
     11     @staticmethod
     12     def __open_seek(pos, entered, args, kwargs):
     13         f = open(*args, **kwargs)
     14         if entered:
     15             f.__enter__()
     16         f.seek(pos)
     17         return f
     18 
     19     def __getattr__(self, attr):
     20         return getattr(self.file, attr)
     21 
     22     def __iter__(self):
     23         return iter(self.file)
     24 
     25     def __enter__(self):
     26         self.file.__enter__()
     27         self.entered = True
     28         return self
     29 
     30     def __exit__(self, ty, exc, tb):
     31         self.file.__exit__(ty, exc, tb)
     32 
     33     def __reduce__(self):
     34         return (self.__open_seek, (self.tell(), self.entered, self.args, self.kwargs))