def DispatchWrapped(connection: ConnectionWrapper) -> None: """Dispatches a request to the proper OperationHandler.""" state = State() while True: try: request, att = connection.Recv() if state.filesystem is None and not request.HasField( 'init_request'): raise DispatchError('The first request must be Init') if request.HasField('init_request'): handler_class = InitHandler elif request.HasField('open_request'): handler_class = OpenHandler elif request.HasField('read_request'): handler_class = ReadHandler elif request.HasField('close_request'): handler_class = CloseHandler elif request.HasField('stat_request'): handler_class = StatHandler elif request.HasField('list_files_request'): handler_class = ListFilesHandler elif request.HasField('lookup_case_insensitive_request'): handler_class = LookupCaseInsensitiveHandler else: raise DispatchError('No request set.') handler = handler_class(state, request, connection) handler.Run() except: # pylint: disable=bare-except exception = filesystem_pb2.Exception( message=str(sys.exc_info()[1]), formatted_exception=traceback.format_exc()) connection.Send(filesystem_pb2.Response(exception=exception), b'')
def Read(self, offset: int, size: int) -> bytes: device_data_request = filesystem_pb2.DeviceDataRequest( offset=offset, size=size) self._connection.Send( filesystem_pb2.Response(device_data_request=device_data_request), b'') _, attachment = self._connection.Recv() return attachment
def Recv(self) -> Tuple[filesystem_pb2.Response, bytes]: raw_response, attachment = self._connection.Recv() response = filesystem_pb2.Response() response.ParseFromString(raw_response) return response, attachment
def PackResponse( self, response: filesystem_pb2.LookupCaseInsensitiveResponse ) -> filesystem_pb2.Response: return filesystem_pb2.Response(lookup_case_insensitive_response=response)
def PackResponse( self, response: filesystem_pb2.CloseResponse) -> filesystem_pb2.Response: return filesystem_pb2.Response(close_response=response)
def PackResponse( self, response: filesystem_pb2.ListFilesResponse) -> filesystem_pb2.Response: return filesystem_pb2.Response(list_files_response=response)
def PackResponse( self, response: filesystem_pb2.StatResponse) -> filesystem_pb2.Response: return filesystem_pb2.Response(stat_response=response)
def PackResponse( self, response: filesystem_pb2.ReadResponse) -> filesystem_pb2.Response: return filesystem_pb2.Response(read_response=response)
def PackResponse( self, response: filesystem_pb2.OpenResponse) -> filesystem_pb2.Response: return filesystem_pb2.Response(open_response=response)
def PackResponse( self, response: filesystem_pb2.InitResponse) -> filesystem_pb2.Response: return filesystem_pb2.Response(init_response=response)