Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
	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
Esempio n. 4
0
 def test_not_state(self):
     self.assertFalse(state.is_replace(object()))
Esempio n. 5
0
 def test_not_replace(self):
     self.assertFalse(state.is_replace(state.done(None)))
     self.assertFalse(state.is_replace(state.next(None)))
Esempio n. 6
0
 def test_replace(self):
     self.assertTrue(state.is_replace(state.replace(None)))