def lineReceived(self, line):
     """(Internal) Handle Twisted's report of an incoming line from AMI"""
     log.debug('Line In: %r', line)
     if self.readingVariables:
         if not line.strip():
             self.readingVariables = False
             self.factory.mainFunction(self)
         else:
             try:
                 key, value = line.split(b':', 1)
                 value = value[1:].rstrip(b'\n').rstrip(b'\r')
             except ValueError as err:
                 log.error("""Invalid variable line: %r""", line)
             else:
                 self.variables[key.lower()] = value
                 log.debug("""%s = %r""", key, value)
     else:
         try:
             df = self.pendingMessages.pop(0)
         except IndexError as err:
             log.warn("Line received without pending deferred: %r", line)
         else:
             if line.startswith(b'200'):
                 line = line[4:]
                 if line.lower().startswith(b'result='):
                     line = line[7:]
                 df.callback(line)
             else:
                 # XXX parse out the error code
                 try:
                     errCode, line = line.split(b' ', 1)
                     errCode = int(errCode)
                 except ValueError as err:
                     errCode = 500
                 df.errback(error.AGICommandFailure(errCode, line))
 def checkFailure(self, result, failure='-1'):
     """(Internal) Check for a failure-code, raise error if == result"""
     # result code may have trailing information...
     try:
         resultInt, line = result.split(b' ', 1)
     except ValueError as err:
         resultInt = result
     if resultInt.strip() == failure:
         raise error.AGICommandFailure(FAILURE_CODE, result)
     return result
    def onStreamingComplete(self, resultLine, skipMS=0):
        """(Internal) Handle putative success

        Also watch for failure-on-load problems
        """
        try:
            digit, endposStuff = resultLine.split(b' ', 1)
        except ValueError as err:
            pass
        else:
            digit = int(digit)
            endposStuff = endposStuff.strip()
            if endposStuff.startswith(b'endpos='):
                endpos = int(endposStuff[7:].strip())
                if endpos == skipMS:
                    # "likely" an error according to the wiki,
                    # we'll raise an error...
                    raise error.AGICommandFailure(
                        FAILURE_CODE, "End position %s == original position, "
                        "result code %s" % (endpos, digit))
                return digit, endpos
        raise ValueError("Unexpected result on streaming completion: %r" %
                         resultLine)
 def resultAsInt(self, result):
     """(Internal) Convert result to an integer value"""
     try:
         return int(result.strip())
     except ValueError as err:
         raise error.AGICommandFailure(FAILURE_CODE, result)
Example #5
0
            except IndexError, err:
                log.warn("Line received without pending deferred: %r", line)
            else:
                if line.startswith('200'):
                    line = line[4:]
                    if line.lower().startswith('result='):
                        line = line[7:]
                    df.callback(line)
                else:
                    # XXX parse out the error code
                    try:
                        errCode, line = line.split(' ', 1)
                        errCode = int(errCode)
                    except ValueError, err:
                        errCode = 500
                    df.errback(error.AGICommandFailure(errCode, line))

    def sendCommand(self, commandString):
        """(Internal) Send the given command to the other side"""
        log.info("Send Command: %r", commandString)
        commandString = commandString.rstrip('\n').rstrip('\r')
        df = defer.Deferred()
        self.pendingMessages.append(df)
        self.sendLine(commandString)
        return df

    def checkFailure(self, result, failure='-1'):
        """(Internal) Check for a failure-code, raise error if == result"""
        # result code may have trailing information...
        try:
            resultInt, line = result.split(' ', 1)