[pypy-commit] pypy use-file-star-for-file: start to use rfile in pypy/module/_file

bdkearns noreply at buildbot.pypy.org
Fri Aug 29 03:53:22 CEST 2014


Author: Brian Kearns <bdkearns at gmail.com>
Branch: use-file-star-for-file
Changeset: r73137:201de1362418
Date: 2014-08-28 21:52 -0400
http://bitbucket.org/pypy/pypy/changeset/201de1362418/

Log:	start to use rfile in pypy/module/_file

diff --git a/pypy/module/_file/interp_file.py b/pypy/module/_file/interp_file.py
--- a/pypy/module/_file/interp_file.py
+++ b/pypy/module/_file/interp_file.py
@@ -2,7 +2,7 @@
 import os
 import stat
 import errno
-from rpython.rlib import streamio
+from rpython.rlib import streamio, rfile
 from rpython.rlib.objectmodel import specialize
 from rpython.rlib.rarithmetic import r_longlong
 from rpython.rlib.rstring import StringBuilder
@@ -97,9 +97,8 @@
 
     def _when_reading_first_flush(self, otherfile):
         """Flush otherfile before reading from self."""
-        xxx
-        self.stream = streamio.CallbackReadFilter(self.stream,
-                                                  otherfile._try_to_flush)
+        #self.stream = streamio.CallbackReadFilter(self.stream,
+        #                                          otherfile._try_to_flush)
 
     def _try_to_flush(self):
         stream = self.stream
@@ -114,14 +113,11 @@
     @unwrap_spec(mode=str, buffering=int)
     def direct___init__(self, w_name, mode='r', buffering=-1):
         self.direct_close()
+        self.check_mode_ok(mode)
         self.w_name = w_name
-        self.check_mode_ok(mode)
-        xxx
-        stream = dispatch_filename(streamio.open_file_as_stream)(
-            self.space, w_name, mode, buffering, signal_checker(self.space))
-        fd = stream.try_to_find_file_descriptor()
-        self.check_not_dir(fd)
-        self.fdopenstream(stream, fd, mode)
+        self.stream = rfile.create_file(self.space.str_w(w_name), mode, buffering)
+        self.mode = mode
+        #self.binary = "b" in mode
 
     def direct___enter__(self):
         self.check_closed()
@@ -135,37 +131,30 @@
 
     def direct_fdopen(self, fd, mode='r', buffering=-1):
         self.direct_close()
+        self.check_mode_ok(mode)
         self.w_name = self.space.wrap('<fdopen>')
-        self.check_mode_ok(mode)
-        xxx
-        stream = streamio.fdopen_as_stream(fd, mode, buffering,
-                                           signal_checker(self.space))
-        self.check_not_dir(fd)
-        self.fdopenstream(stream, fd, mode)
+        self.stream = rfile.create_fdopen_rfile(fd, mode)
+        self.mode = mode
+        #self.binary = "b" in mode
 
     def direct_close(self):
         stream = self.stream
         if stream is not None:
-            self.newlines = self.stream.getnewlines()
+            #self.newlines = self.stream.getnewlines()
             self.stream = None
-            self.fd = -1
-            openstreams = getopenstreams(self.space)
-            try:
-                del openstreams[stream]
-            except KeyError:
-                pass
+            #openstreams = getopenstreams(self.space)
+            #try:
+            #    del openstreams[stream]
+            #except KeyError:
+            #    pass
             # close the stream.  If cffi_fileobj is None, we close the
             # underlying fileno too.  Otherwise, we leave that to
             # cffi_fileobj.close().
-            cffifo = self.cffi_fileobj
-            self.cffi_fileobj = None
-            stream.close1(cffifo is None)
-            if cffifo is not None:
-                cffifo.close()
+            stream.close()
 
     def direct_fileno(self):
-        self.getstream()    # check if the file is still open
-        return self.fd
+        stream = self.getstream()    # check if the file is still open
+        return stream.fileno()
 
     def direct_flush(self):
         self.getstream().flush()
@@ -180,7 +169,7 @@
     def direct_read(self, n=-1):
         stream = self.getstream()
         if n < 0:
-            return stream.readall()
+            return stream.read()
         else:
             result = StringBuilder(n)
             while n > 0:
@@ -204,6 +193,7 @@
     @unwrap_spec(size=int)
     def direct_readline(self, size=-1):
         stream = self.getstream()
+        return stream.readline()
         if size < 0:
             return stream.readline()
         else:
@@ -233,7 +223,7 @@
         # this is implemented as: .read().split('\n')
         # except that it keeps the \n in the resulting strings
         if size <= 0:
-            data = stream.readall()
+            data = stream.read()
         else:
             data = stream.read(size)
         result = []
@@ -292,8 +282,8 @@
     direct_xreadlines = direct___iter__
 
     def direct_isatty(self):
-        self.getstream()    # check if the file is still open
-        return os.isatty(self.fd)
+        stream = self.getstream()    # check if the file is still open
+        return os.isatty(stream.fileno())
 
     # ____________________________________________________________
     #
@@ -339,8 +329,8 @@
                 try:
                     try:
                         result = self.direct_%(name)s(%(callsig)s)
-                    except StreamErrors, e:
-                        raise wrap_streamerror(space, e, self.w_name)
+                    except OSError as e:
+                        raise wrap_oserror_as_ioerror(self.space, e, self.w_name)
                 finally:
                     self.unlock()
                 return %(wrapresult)s
@@ -512,7 +502,8 @@
 
 def descr_file_newlines(space, file):
     if file.stream:
-        newlines = file.stream.getnewlines()
+        #newlines = file.stream.getnewlines()
+        newlines = file.newlines
     else:
         newlines = file.newlines
     if newlines == 0:


More information about the pypy-commit mailing list