def send(self, **named): """ Send signal from signal to all connected receivers catching errors. Arguments: named Named arguments which will be passed to receivers. These arguments must be a subset of the argument names defined in providing_args. Return a list of tuple pairs [(receiver, response), ... ]. May raise DispatcherKeyError. If any receiver raises an error (specifically any subclass of Exception), the error instance is returned as the result for that receiver. """ responses = [] if not self.receivers: return responses # Call each receiver with whatever arguments it can accept. # Return a list of tuple pairs [(receiver, response), ... ]. for receiver in self._live_receivers(): try: response = receiver(signal=self, **named) except Exception as err: _log.err() responses.append((receiver, err)) else: responses.append((receiver, response)) return responses
def segmentReceived(self): data = self.data_buffer self.data_buffer = '' # don't lead with a newline if data[0] == NL: data = data[1:] # Fix color-only leading line color_newline = self.color_newline.match(data) if color_newline: color = data[0:color_newline.end() - 1] data = color + data[color_newline.end():] data = data.split('\n') pre_prompt.send(raw_data=data) # lines received lines = data[:-1] # last line is always the prompt prompt_data = data[-1] # Send the prompt to the prompt receiver try: prompt_output = prompt.receiver(prompt_data) except Exception as err: _log.err() prompt_output = "%s - %s" % (ansi.bold_red('ERROR:'), ansi.red(str(err))) # send lines to inbound receiver lines = inbound.receiver(lines) post_prompt.send() signal.pre_outbound.send( raw_lines=sage.buffer, lines=lines, ansi_prompt=prompt_output, prompt=ansi.filter_ansi(prompt_output) ) self.receivers.input(lines, prompt_output)
def send(self, sender, param=None): responses = [] if not self.receivers: return responses # Call each receiver with whatever arguments it can accept. # Return a list of tuple pairs [(receiver, response), ... ]. for receiver in self._live_receivers(): try: if param: response = receiver(sender, param) else: response = receiver(sender) except Exception as err: _log.err() responses.append((receiver, err)) else: responses.append((receiver, response)) return responses
def segmentReceived(self): data = self.data_buffer self.data_buffer = '' # don't lead with a newline if data[0] == NL: data = data[1:] # Fix color-only leading line color_newline = self.color_newline.match(data) if color_newline: color = data[0:color_newline.end() - 1] data = color + data[color_newline.end():] data = data.split('\n') pre_prompt.send(raw_data=data) # lines received lines = data[:-1] # last line is always the prompt prompt_data = data[-1] # Send the prompt to the prompt receiver try: prompt_output = prompt.receiver(prompt_data) except Exception as err: _log.err() prompt_output = "%s - %s" % (ansi.bold_red('ERROR:'), ansi.red(str(err))) # send lines to inbound receiver lines = inbound.receiver(lines) post_prompt.send() signal.pre_outbound.send(raw_lines=sage.buffer, lines=lines, ansi_prompt=prompt_output, prompt=ansi.filter_ansi(prompt_output)) self.receivers.input(lines, prompt_output)