def parse(self, msg): """ Parse a message, return relevant output. @param msg: unparsed message @type msg: str @return: message to print or None (if there's no output to print) @rtype: str|None """ # split message into first word + rest of line try: command, args = msg.split(None, 1) except ValueError: command, args = msg, "" if command in self.COMMANDS: stat = self.COMMANDS[command](args) if state.is_done(stat): return stat.value elif state.is_next(stat): print(stat.value) return None else: return None for func in self.FILTERS: stat = func(msg) if state.is_done(stat): return stat.value elif state.is_replace(stat): msg = stat.value return msg
def parse(self, msg): """ Parse a message, return relevant output. @param msg: unparsed message @type msg: str @return: message to print or None (if there's no output to print) @rtype: str|None """ # split msg into command & arguments try: command, args = msg.split(None, 1) except ValueError: # split failed command, args = msg.rstrip(), "" # try execute command if command in self.COMMANDS: rval = self.COMMANDS[command](args) if state.is_done(rval): return rval.value # run text HOOKS for f in self.FILTERS: rval = f(msg) if state.is_done(rval): return rval.value if state.is_replace(rval): msg = rval.value return msg
def parse(self, msg): """ Parses given input. @param msg: input message to parse @type msg: str @return: return message processed with associated commands and filters @rtype: str """ try: cmd, args = msg.split(" ", 1) except ValueError: cmd, args = msg.rstrip(), "" if cmd in self.COMMANDS: ret = self.COMMANDS[cmd](args) if state.is_done(ret): return ret.value elif state.is_next(ret): pass else: raise Exception("Illegal state of command.") for filter in self.FILTERS: ret = filter(msg) if state.is_done(ret): return ret.value if state.is_replace(ret): msg = ret.value return msg
def test_not_state(self): self.assertFalse(state.is_replace(object()))
def test_not_replace(self): self.assertFalse(state.is_replace(state.done(None))) self.assertFalse(state.is_replace(state.next(None)))
def test_replace(self): self.assertTrue(state.is_replace(state.replace(None)))