StreamWriter: close() now clears the reference to the transport

StreamWriter now raises an exception if it is closed: write(), writelines(),
write_eof(), can_write_eof(), get_extra_info(), drain().
This commit is contained in:
Victor Stinner 2015-01-15 09:33:50 +01:00
parent caa12dab69
commit e7a35717d2
1 changed files with 21 additions and 4 deletions

View 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: