[Python-checkins] r87429 - in python/branches/release27-maint: Lib/_pyio.py Lib/test/test_io.py Misc/NEWS Modules/_io/bufferedio.c

antoine.pitrou python-checkins at python.org
Tue Dec 21 22:26:55 CET 2010


Author: antoine.pitrou
Date: Tue Dec 21 22:26:55 2010
New Revision: 87429

Log:
Merged revisions 87427 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r87427 | antoine.pitrou | 2010-12-21 22:20:59 +0100 (mar., 21 déc. 2010) | 3 lines
  
  Issue #10750: The `raw` attribute of buffered IO objects is now read-only.
........


Modified:
   python/branches/release27-maint/   (props changed)
   python/branches/release27-maint/Lib/_pyio.py
   python/branches/release27-maint/Lib/test/test_io.py
   python/branches/release27-maint/Misc/NEWS
   python/branches/release27-maint/Modules/_io/bufferedio.c

Modified: python/branches/release27-maint/Lib/_pyio.py
==============================================================================
--- python/branches/release27-maint/Lib/_pyio.py	(original)
+++ python/branches/release27-maint/Lib/_pyio.py	Tue Dec 21 22:26:55 2010
@@ -678,7 +678,7 @@
     """
 
     def __init__(self, raw):
-        self.raw = raw
+        self._raw = raw
 
     ### Positioning ###
 
@@ -722,8 +722,8 @@
         if self.raw is None:
             raise ValueError("raw stream already detached")
         self.flush()
-        raw = self.raw
-        self.raw = None
+        raw = self._raw
+        self._raw = None
         return raw
 
     ### Inquiries ###
@@ -738,6 +738,10 @@
         return self.raw.writable()
 
     @property
+    def raw(self):
+        return self._raw
+
+    @property
     def closed(self):
         return self.raw.closed
 
@@ -1456,7 +1460,7 @@
             if not isinstance(errors, basestring):
                 raise ValueError("invalid errors: %r" % errors)
 
-        self.buffer = buffer
+        self._buffer = buffer
         self._line_buffering = line_buffering
         self._encoding = encoding
         self._errors = errors
@@ -1511,6 +1515,10 @@
     def line_buffering(self):
         return self._line_buffering
 
+    @property
+    def buffer(self):
+        return self._buffer
+
     def seekable(self):
         return self._seekable
 
@@ -1724,8 +1732,8 @@
         if self.buffer is None:
             raise ValueError("buffer is already detached")
         self.flush()
-        buffer = self.buffer
-        self.buffer = None
+        buffer = self._buffer
+        self._buffer = None
         return buffer
 
     def seek(self, cookie, whence=0):

Modified: python/branches/release27-maint/Lib/test/test_io.py
==============================================================================
--- python/branches/release27-maint/Lib/test/test_io.py	(original)
+++ python/branches/release27-maint/Lib/test/test_io.py	Tue Dec 21 22:26:55 2010
@@ -701,6 +701,13 @@
         b.close()
         self.assertRaises(ValueError, b.flush)
 
+    def test_readonly_attributes(self):
+        raw = self.MockRawIO()
+        buf = self.tp(raw)
+        x = self.MockRawIO()
+        with self.assertRaises((AttributeError, TypeError)):
+            buf.raw = x
+
 
 class BufferedReaderTest(unittest.TestCase, CommonBufferedTests):
     read_mode = "rb"
@@ -2211,6 +2218,12 @@
         txt.close()
         self.assertRaises(ValueError, txt.flush)
 
+    def test_readonly_attributes(self):
+        txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii")
+        buf = self.BytesIO(self.testdata)
+        with self.assertRaises((AttributeError, TypeError)):
+            txt.buffer = buf
+
 class CTextIOWrapperTest(TextIOWrapperTest):
 
     def test_initialization(self):

Modified: python/branches/release27-maint/Misc/NEWS
==============================================================================
--- python/branches/release27-maint/Misc/NEWS	(original)
+++ python/branches/release27-maint/Misc/NEWS	Tue Dec 21 22:26:55 2010
@@ -22,6 +22,8 @@
 Library
 -------
 
+- Issue #10750: The ``raw`` attribute of buffered IO objects is now read-only.
+
 - Issue #10242: unittest.TestCase.assertItemsEqual makes too many assumgptions
   about input.
 

Modified: python/branches/release27-maint/Modules/_io/bufferedio.c
==============================================================================
--- python/branches/release27-maint/Modules/_io/bufferedio.c	(original)
+++ python/branches/release27-maint/Modules/_io/bufferedio.c	Tue Dec 21 22:26:55 2010
@@ -1513,7 +1513,7 @@
 };
 
 static PyMemberDef bufferedreader_members[] = {
-    {"raw", T_OBJECT, offsetof(buffered, raw), 0},
+    {"raw", T_OBJECT, offsetof(buffered, raw), READONLY},
     {NULL}
 };
 
@@ -1896,7 +1896,7 @@
 };
 
 static PyMemberDef bufferedwriter_members[] = {
-    {"raw", T_OBJECT, offsetof(buffered, raw), 0},
+    {"raw", T_OBJECT, offsetof(buffered, raw), READONLY},
     {NULL}
 };
 
@@ -2286,7 +2286,7 @@
 };
 
 static PyMemberDef bufferedrandom_members[] = {
-    {"raw", T_OBJECT, offsetof(buffered, raw), 0},
+    {"raw", T_OBJECT, offsetof(buffered, raw), READONLY},
     {NULL}
 };
 


More information about the Python-checkins mailing list