]> granicus.if.org Git - python/commitdiff
StreamWriter: close() now clears the reference to the transport
authorVictor Stinner <victor.stinner@gmail.com>
Thu, 15 Jan 2015 08:33:50 +0000 (09:33 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Thu, 15 Jan 2015 08:33:50 +0000 (09:33 +0100)
StreamWriter now raises an exception if it is closed: write(), writelines(),
write_eof(), can_write_eof(), get_extra_info(), drain().

Lib/asyncio/streams.py

index 7ff16a488f9ef3f39e85a56ae24fcdf16cc73eea..12ab1c52cb71df71b3652313b22692cb0d721b5c 100644 (file)
@@ -258,8 +258,22 @@ class StreamWriter:
         self._reader = reader
         self._loop = loop
 
+    def close(self):
+        if self._transport is None:
+            return
+        self._transport.close()
+        self._transport = None
+
+    def _check_closed(self):
+        if self._transport is None:
+            raise RuntimeError('StreamWriter is closed')
+
     def __repr__(self):
-        info = [self.__class__.__name__, 'transport=%r' % self._transport]
+        info = [self.__class__.__name__]
+        if self._transport is not None:
+            info.append('transport=%r' % self._transport)
+        else:
+            info.append('closed')
         if self._reader is not None:
             info.append('reader=%r' % self._reader)
         return '<%s>' % ' '.join(info)
@@ -269,21 +283,23 @@ class StreamWriter:
         return self._transport
 
     def write(self, data):
+        self._check_closed()
         self._transport.write(data)
 
     def writelines(self, data):
+        self._check_closed()
         self._transport.writelines(data)
 
     def write_eof(self):
+        self._check_closed()
         return self._transport.write_eof()
 
     def can_write_eof(self):
+        self._check_closed()
         return self._transport.can_write_eof()
 
-    def close(self):
-        return self._transport.close()
-
     def get_extra_info(self, name, default=None):
+        self._check_closed()
         return self._transport.get_extra_info(name, default)
 
     @coroutine
@@ -295,6 +311,7 @@ class StreamWriter:
           w.write(data)
           yield from w.drain()
         """
+        self._check_closed()
         if self._reader is not None:
             exc = self._reader.exception()
             if exc is not None: