| 35 | |
| 36 | |
| 37 | class Connection(object): |
| 38 | |
| 39 | _source_traceback = None |
| 40 | _transport = None |
| 41 | |
| 42 | def __init__(self, connector, key, request, transport, protocol, loop): |
| 43 | self._key = key |
| 44 | self._connector = connector |
| 45 | self._request = request |
| 46 | self._transport = transport |
| 47 | self._protocol = protocol |
| 48 | self._loop = loop |
| 49 | self.reader = protocol.reader |
| 50 | self.writer = protocol.writer |
| 51 | |
| 52 | if loop.get_debug(): |
| 53 | self._source_traceback = traceback.extract_stack(sys._getframe(1)) |
| 54 | |
| 55 | def __repr__(self): |
| 56 | return 'Connection<{}>'.format(self._key) |
| 57 | |
| 58 | def __del__(self, _warnings=warnings): |
| 59 | if self._transport is not None: |
| 60 | _warnings.warn('Unclosed connection {!r}'.format(self), |
| 61 | ResourceWarning) |
| 62 | if hasattr(self._loop, 'is_closed'): |
| 63 | if self._loop.is_closed(): |
| 64 | return |
| 65 | |
| 66 | self._connector._release( |
| 67 | self._key, self._request, self._transport, self._protocol, |
| 68 | should_close=True) |
| 69 | |
| 70 | context = {'client_connection': self, |
| 71 | 'message': 'Unclosed connection'} |
| 72 | if self._source_traceback is not None: |
| 73 | context['source_traceback'] = self._source_traceback |
| 74 | self._loop.call_exception_handler(context) |
| 75 | |
| 76 | @property |
| 77 | def loop(self): |
| 78 | return self._loop |
| 79 | |
| 80 | def close(self): |
| 81 | if self._transport is not None: |
| 82 | self._connector._release( |
| 83 | self._key, self._request, self._transport, self._protocol, |
| 84 | should_close=True) |
| 85 | self._transport = None |
| 86 | |
| 87 | def release(self): |
| 88 | if self._transport is not None: |
| 89 | self._connector._release( |
| 90 | self._key, self._request, self._transport, self._protocol, |
| 91 | should_close=False) |
| 92 | self._transport = None |
| 93 | |
| 94 | def detach(self): |
no outgoing calls