[pypy-svn] r49418 - in pypy/branch/pypy-interp-file/module/_file: . test

arigo at codespeak.net arigo at codespeak.net
Wed Dec 5 20:42:02 CET 2007


Author: arigo
Date: Wed Dec  5 20:42:02 2007
New Revision: 49418

Modified:
   pypy/branch/pypy-interp-file/module/_file/app_file.py
   pypy/branch/pypy-interp-file/module/_file/interp_file.py
   pypy/branch/pypy-interp-file/module/_file/test/test_file_extra.py
Log:
file.truncate().


Modified: pypy/branch/pypy-interp-file/module/_file/app_file.py
==============================================================================
--- pypy/branch/pypy-interp-file/module/_file/app_file.py	(original)
+++ pypy/branch/pypy-interp-file/module/_file/app_file.py	Wed Dec  5 20:42:02 2007
@@ -234,7 +234,7 @@
             raise StopIteration
         return line
 
-    def truncate(self, size=None):
+    #def truncate(self, size=None):
         """truncate([size]) -> None.  Truncate the file to at most size bytes.
 
 Size defaults to the current file position, as returned by tell()."""

Modified: pypy/branch/pypy-interp-file/module/_file/interp_file.py
==============================================================================
--- pypy/branch/pypy-interp-file/module/_file/interp_file.py	(original)
+++ pypy/branch/pypy-interp-file/module/_file/interp_file.py	Wed Dec  5 20:42:02 2007
@@ -167,6 +167,15 @@
     def direct_tell(self):
         return self.getstream().tell()
 
+    def direct_truncate(self, w_size=None):  # note: a wrapped size!
+        stream = self.getstream()
+        space = self.space
+        if w_size is None or space.is_w(w_size, space.w_None):
+            size = stream.tell()
+        else:
+            size = space.int_w(w_size)
+        stream.truncate(size)
+
     def direct_write(self, data):
         self.getstream().write(data)
 
@@ -310,6 +319,11 @@
     _decl(locals(), "tell", ['self'],
         "tell() -> current file position, an integer (may be a long integer).")
 
+    _decl(locals(), "truncate", ['self', W_Root],
+        """truncate([size]) -> None.  Truncate the file to at most size bytes.
+
+Size defaults to the current file position, as returned by tell().""")
+
     _decl(locals(), "write", ['self', str],
         """write(str) -> None.  Write string str to file.
 

Modified: pypy/branch/pypy-interp-file/module/_file/test/test_file_extra.py
==============================================================================
--- pypy/branch/pypy-interp-file/module/_file/test/test_file_extra.py	(original)
+++ pypy/branch/pypy-interp-file/module/_file/test/test_file_extra.py	Wed Dec  5 20:42:02 2007
@@ -456,3 +456,20 @@
         else:
             assert f.isatty()
             f.close()
+
+    def test_truncate(self):
+        fn = self.temptestfile
+        f = open(fn, 'w+b')
+        f.write('hello world')
+        f.seek(7)
+        f.truncate()
+        f.seek(0)
+        data = f.read()
+        assert data == 'hello w'
+        f.seek(0, 2)
+        assert f.tell() == 7
+        f.seek(0)
+        f.truncate(3)
+        data = f.read(123)
+        assert data == 'hel'
+        f.close()



More information about the Pypy-commit mailing list