Python trio.ClosedResourceError() Examples
The following are 23
code examples of trio.ClosedResourceError().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
trio
, or try the search function
.
Example #1
Source File: _impl.py From trio-websocket with MIT License | 6 votes |
def _send(self, event): ''' Send an to the remote WebSocket. The reader task and one or more writers might try to send messages at the same time, so this method uses an internal lock to serialize requests to send data. :param wsproto.events.Event event: ''' data = self._wsproto.send(event) async with self._stream_lock: logger.debug('%s sending %d bytes', self, len(data)) try: await self._stream.send_all(data) except (trio.BrokenResourceError, trio.ClosedResourceError): await self._abort_web_socket() raise ConnectionClosed(self._close_reason) from None
Example #2
Source File: _impl.py From trio-websocket with MIT License | 6 votes |
def get_message(self): ''' Receive the next WebSocket message. If no message is available immediately, then this function blocks until a message is ready. If the remote endpoint closes the connection, then the caller can still get messages sent prior to closing. Once all pending messages have been retrieved, additional calls to this method will raise ``ConnectionClosed``. If the local endpoint closes the connection, then pending messages are discarded and calls to this method will immediately raise ``ConnectionClosed``. :rtype: str or bytes :raises ConnectionClosed: if the connection is closed. ''' try: message = await self._recv_channel.receive() except (trio.ClosedResourceError, trio.EndOfChannel): raise ConnectionClosed(self._close_reason) from None return message
Example #3
Source File: subscription.py From starbelly with MIT License | 6 votes |
def run(self): """ Run the subscription. :returns: This function returns when the sync is complete. """ logger.info("%r Starting", self) async with trio.open_nursery() as nursery: self._cancel_scope = nursery.cancel_scope await self._set_initial_job_status() nursery.start_soon(self._job_status_task) try: await self._run_sync() except (trio.BrokenResourceError, trio.ClosedResourceError): logger.info("%r Aborted", self) nursery.cancel_scope.cancel() try: await self._send_complete() logger.info("%r Finished", self) except (trio.BrokenResourceError, trio.ClosedResourceError): # If we can't send the completion message, then bail out. pass
Example #4
Source File: transport.py From parsec-cloud with GNU Affero General Public License v3.0 | 5 votes |
def acquire(self, force_fresh=False): """ Raises: BackendConnectionError trio.ClosedResourceError: if used after having being closed """ async with self._lock: transport = None if not force_fresh: try: # Fifo style to retrieve oldest first transport = self._transports.pop(0) except IndexError: pass if not transport: if self._closed: raise trio.ClosedResourceError() transport = await self._connect_cb() try: yield transport except TransportClosedByPeer: raise except Exception: await transport.aclose() raise else: self._transports.append(transport)
Example #5
Source File: endpoint.py From lahja with MIT License | 5 votes |
def _process_item( self, item: BaseEvent, config: Optional[BroadcastConfig] ) -> None: event_type = type(item) # handle request/response if config is not None and config.filter_event_id in self._pending_requests: fut = self._pending_requests.pop(config.filter_event_id) fut.set_result(item) # handle stream channel if event_type in self._stream_channels: channels = tuple(self._stream_channels[event_type]) for send_channel in channels: try: await send_channel.send(item) except trio.ClosedResourceError: self._stream_channels[event_type].remove(send_channel) # handle subscriptions if event_type in self._sync_handlers: for handler_fn in self._sync_handlers[event_type]: try: handler_fn(item) except Exception as err: self.logger.debug( "%s: handler function %s error: %s", self, handler_fn, err ) if event_type in self._async_handlers: for handler_fn in self._async_handlers[event_type]: try: await handler_fn(item) except Exception as err: self.logger.debug( "%s: handler function %s error: %s", self, handler_fn, err ) # # Server API #
Example #6
Source File: endpoint.py From lahja with MIT License | 5 votes |
def read_message(self) -> Message: buffer = bytearray() while len(buffer) < 4: try: data = await self._socket.receive_some(4 - len(buffer)) except (trio.ClosedResourceError, trio.BrokenResourceError) as err: raise RemoteDisconnected from err if data == b"": raise RemoteDisconnected() buffer.extend(data) t_size = 4 + int.from_bytes(buffer[:4], "little") while len(buffer) < t_size: try: data = await self._socket.receive_some(t_size - len(buffer)) except (trio.ClosedResourceError, trio.BrokenResourceError) as err: raise RemoteDisconnected from err if data == b"": raise RemoteDisconnected() buffer.extend(data) msg = cast(Message, pickle.loads(buffer[4:t_size])) return msg
Example #7
Source File: endpoint.py From lahja with MIT License | 5 votes |
def send_message(self, message: Msg) -> None: msg_data = pickle.dumps(message, protocol=pickle.HIGHEST_PROTOCOL) size = len(msg_data) try: async with self._write_lock: await self._socket.send_all(size.to_bytes(4, "little") + msg_data) except (trio.ClosedResourceError, trio.BrokenResourceError) as err: raise RemoteDisconnected from err
Example #8
Source File: test_apiv1_anonymous_cmds.py From parsec-cloud with GNU Affero General Public License v3.0 | 5 votes |
def test_backend_closed_cmds(running_backend, coolorg): async with apiv1_backend_anonymous_cmds_factory(coolorg.addr) as cmds: pass with pytest.raises(trio.ClosedResourceError): await cmds.ping()
Example #9
Source File: test_authenticated_cmds.py From parsec-cloud with GNU Affero General Public License v3.0 | 5 votes |
def test_backend_closed_cmds(running_backend, alice): async with backend_authenticated_cmds_factory( alice.organization_addr, alice.device_id, alice.signing_key ) as cmds: pass with pytest.raises(trio.ClosedResourceError): await cmds.ping()
Example #10
Source File: test_invited_cmds.py From parsec-cloud with GNU Affero General Public License v3.0 | 5 votes |
def test_backend_closed_cmds(running_backend, invitation_addr): async with backend_invited_cmds_factory(invitation_addr) as cmds: pass with pytest.raises(trio.ClosedResourceError): await cmds.ping()
Example #11
Source File: test_apiv1_authenticated_cmds.py From parsec-cloud with GNU Affero General Public License v3.0 | 5 votes |
def test_backend_closed_cmds(running_backend, alice): async with apiv1_backend_authenticated_cmds_factory( alice.organization_addr, alice.device_id, alice.signing_key ) as cmds: pass with pytest.raises(trio.ClosedResourceError): await cmds.ping()
Example #12
Source File: test_apiv1_administration_cmds.py From parsec-cloud with GNU Affero General Public License v3.0 | 5 votes |
def test_backend_closed_cmds(running_backend): async with apiv1_backend_administration_cmds_factory( running_backend.addr, running_backend.backend.config.administration_token ) as cmds: pass with pytest.raises(trio.ClosedResourceError): await cmds.ping()
Example #13
Source File: tcp_server.py From hypercorn with MIT License | 5 votes |
def protocol_send(self, event: Event) -> None: if isinstance(event, RawData): async with self.send_lock: try: with trio.CancelScope() as cancel_scope: cancel_scope.shield = True await self.stream.send_all(event.data) except (trio.BrokenResourceError, trio.ClosedResourceError): await self.protocol.handle(Closed()) elif isinstance(event, Closed): await self._close() await self.protocol.handle(Closed()) elif isinstance(event, Updated): pass # Triggers the keep alive timeout update await self._update_keep_alive_timeout()
Example #14
Source File: net_trio.py From rethinkdb-python with Apache License 2.0 | 5 votes |
def close(self, noreply_wait=False, token=None, exception=None): self._closing = True if exception is not None: err_message = "Connection is closed (%s)." % str(exception) else: err_message = "Connection is closed." # Cursors may remove themselves when errored, so copy a list of them for cursor in list(self._cursor_cache.values()): cursor._error(err_message) for _, future in self._user_queries.values(): if not future.done(): future.set_exception(ReqlDriverError(err_message)) self._user_queries = {} self._cursor_cache = {} if noreply_wait: noreply = Query(P_QUERY.NOREPLY_WAIT, token, None, None) await self.run_query(noreply, False) try: await self._stream.aclose() except (trio.ClosedResourceError, trio.BrokenResourceError): pass # We must not wait for the _reader_task if we got an exception, because that # means that we were called from it. Waiting would lead to a deadlock. if self._reader_ended_event: await self._reader_ended_event.wait() return None
Example #15
Source File: net_trio.py From rethinkdb-python with Apache License 2.0 | 5 votes |
def _read_exactly(self, num): data = b'' try: while len(data) < num: data += await self._stream.receive_some(num - len(data)) return data except (trio.BrokenResourceError, trio.ClosedResourceError): self._closed = True
Example #16
Source File: net_trio.py From rethinkdb-python with Apache License 2.0 | 5 votes |
def _read_until(self, delimiter): """ Naive implementation of reading until a delimiter. """ buffer = bytearray() try: while True: data = await self._stream.receive_some(1) buffer.append(data[0]) if data == delimiter: break except (trio.BrokenResourceError, trio.ClosedResourceError): self._closed = True return bytes(buffer)
Example #17
Source File: net_trio.py From rethinkdb-python with Apache License 2.0 | 5 votes |
def _send(self, data): async with self._stream_lock: try: await self._stream.send_all(data) except (trio.BrokenResourceError, trio.ClosedResourceError): self._closed = True
Example #18
Source File: tcp_server.py From hypercorn with MIT License | 5 votes |
def _close(self) -> None: try: await self.stream.send_eof() except ( trio.BrokenResourceError, AttributeError, trio.BusyResourceError, trio.ClosedResourceError, ): # They're already gone, nothing to do # Or it is a SSL stream pass await self.stream.aclose()
Example #19
Source File: tcp_server.py From hypercorn with MIT License | 5 votes |
def _read_data(self) -> None: while True: try: data = await self.stream.receive_some(MAX_RECV) except (trio.ClosedResourceError, trio.BrokenResourceError): await self.protocol.handle(Closed()) break else: if data == b"": await self._update_keep_alive_timeout() break await self.protocol.handle(RawData(data)) await self._update_keep_alive_timeout()
Example #20
Source File: apiv1_annonymous.py From parsec-cloud with GNU Affero General Public License v3.0 | 4 votes |
def apiv1_backend_anonymous_cmds_factory( addr: BackendOrganizationAddr, keepalive: Optional[int] = None ) -> AsyncGenerator[APIV1_BackendAnonymousCmds, None]: """ Raises: BackendConnectionError """ transport_lock = trio.Lock() transport = None closed = False async def _init_transport(): nonlocal transport if not transport: if closed: raise trio.ClosedResourceError transport = await apiv1_connect(addr, keepalive=keepalive) transport.logger = transport.logger.bind(auth="<anonymous>") async def _destroy_transport(): nonlocal transport if transport: await transport.aclose() transport = None @asynccontextmanager async def _acquire_transport(**kwargs): nonlocal transport async with transport_lock: await _init_transport() try: yield transport except BackendNotAvailable: await _destroy_transport() raise try: yield APIV1_BackendAnonymousCmds(addr, _acquire_transport) finally: async with transport_lock: closed = True await _destroy_transport()
Example #21
Source File: authenticated.py From parsec-cloud with GNU Affero General Public License v3.0 | 4 votes |
def backend_authenticated_cmds_factory( addr: BackendOrganizationAddr, device_id: DeviceID, signing_key: SigningKey, keepalive: Optional[int] = None, ) -> AsyncGenerator[BackendAuthenticatedCmds, None]: """ Raises: BackendConnectionError """ transport_lock = trio.Lock() transport = None closed = False async def _init_transport(): nonlocal transport if not transport: if closed: raise trio.ClosedResourceError transport = await connect_as_authenticated( addr, device_id=device_id, signing_key=signing_key, keepalive=keepalive ) transport.logger = transport.logger.bind(device_id=device_id) async def _destroy_transport(): nonlocal transport if transport: await transport.aclose() transport = None @asynccontextmanager async def _acquire_transport(**kwargs): nonlocal transport async with transport_lock: await _init_transport() try: yield transport except BackendNotAvailable: await _destroy_transport() raise try: yield BackendAuthenticatedCmds(addr, _acquire_transport) finally: async with transport_lock: closed = True await _destroy_transport()
Example #22
Source File: apiv1_administration.py From parsec-cloud with GNU Affero General Public License v3.0 | 4 votes |
def apiv1_backend_administration_cmds_factory( addr: BackendOrganizationAddr, token: str, keepalive: Optional[int] = None ) -> AsyncGenerator[APIV1_BackendAdministrationCmds, None]: """ Raises: BackendConnectionError """ transport_lock = trio.Lock() transport = None closed = False async def _init_transport(): nonlocal transport if not transport: if closed: raise trio.ClosedResourceError transport = await apiv1_connect(addr, administration_token=token, keepalive=keepalive) transport.logger = transport.logger.bind(auth="<administration>") async def _destroy_transport(): nonlocal transport if transport: await transport.aclose() transport = None @asynccontextmanager async def _acquire_transport(**kwargs): nonlocal transport async with transport_lock: await _init_transport() try: yield transport except BackendNotAvailable: await _destroy_transport() raise try: yield APIV1_BackendAdministrationCmds(addr, _acquire_transport) finally: async with transport_lock: closed = True await _destroy_transport()
Example #23
Source File: invited.py From parsec-cloud with GNU Affero General Public License v3.0 | 4 votes |
def backend_invited_cmds_factory( addr: BackendInvitationAddr, keepalive: Optional[int] = None ) -> AsyncGenerator[BackendInvitedCmds, None]: """ Raises: BackendConnectionError """ transport_lock = trio.Lock() transport = None closed = False async def _init_transport(): nonlocal transport if not transport: if closed: raise trio.ClosedResourceError transport = await connect_as_invited(addr, keepalive=keepalive) transport.logger = transport.logger.bind(auth="<invited>") async def _destroy_transport(): nonlocal transport if transport: await transport.aclose() transport = None @asynccontextmanager async def _acquire_transport(**kwargs): nonlocal transport async with transport_lock: await _init_transport() try: yield transport except BackendNotAvailable: await _destroy_transport() raise try: yield BackendInvitedCmds(addr, _acquire_transport) finally: async with transport_lock: closed = True await _destroy_transport()