[Checkins] SVN: z3c.extfile/trunk/src/z3c/extfile/hashdir.py readfile now closes on eof

Bernd Dorn bernd.dorn at fhv.at
Wed Sep 13 11:04:43 EDT 2006


Log message for revision 70151:
  readfile now closes on eof

Changed:
  U   z3c.extfile/trunk/src/z3c/extfile/hashdir.py

-=-
Modified: z3c.extfile/trunk/src/z3c/extfile/hashdir.py
===================================================================
--- z3c.extfile/trunk/src/z3c/extfile/hashdir.py	2006-09-13 13:41:29 UTC (rev 70150)
+++ z3c.extfile/trunk/src/z3c/extfile/hashdir.py	2006-09-13 15:04:42 UTC (rev 70151)
@@ -77,11 +77,11 @@
     interface.implements(interfaces.IReadFile)
 
     def __init__(self, name, bufsize=-1):
-        """we always use read binary as mode"""
         self.name = name
         self.digest = os.path.split(self.name)[1]
         self.bufsize=bufsize
         self._v_file = None
+        self._v_len = None
 
     @property
     def _file(self):
@@ -92,7 +92,9 @@
         return self._v_file
     
     def __len__(self):
-        return int(os.stat(self.name)[stat.ST_SIZE])
+        if self._v_len is None:
+            self._v_len = int(os.stat(self.name)[stat.ST_SIZE])
+        return self._v_len
 
     def __repr__(self):
         return "<ReadFile named %s>" % repr(self.digest)
@@ -107,8 +109,17 @@
 
     def read(self, size=-1):
         """see file.read"""
-        return self._file.read(size)
+        chunk = self._file.read(size)
+        if chunk == '':
+            self.close()
+        return chunk
 
+    def readline(self, size=-1):
+        line = self._file.readline(size)
+        if line == '':
+            self.close()
+        return line
+
     def close(self):
         """see file.close"""
         if self._v_file is not None:
@@ -120,8 +131,12 @@
         return self._file.fileno()
 
     def __iter__(self):
-        return self._file.__iter__()
+        return self
 
+    def next(self):
+        return self.readline()
+
+
 class WriteFile(object):
 
     interface.implements(interfaces.IWriteFile)



More information about the Checkins mailing list