Beispiel #1
0
    def getme(self):

        err = 0

        while True:

            try:
                r = self.session.get(self.getmeurl)
                response = r.json()
            except:
                err += 1
                log.exc("fail #%d: error getting initial information" % err)
                if err >= 80:
                    log.out("fail #%d: waiting 30 minutes, then retrying" % err)
                    time.sleep(30 * 60)
                elif err >= 20:
                    log.out("fail #%d: waiting 60 seconds, then retrying" % err)
                    time.sleep(60)
                if err >= 10:
                    log.out("renewing session")
                    self.newsession()
                continue

            if not response["ok"]:
                log.out("response not ok, ignoring")
                continue

            break

        return response["result"]
Beispiel #2
0
 def sendfile(self, filename, mimetype, content, message):
     try:
         r = self.session.post(self.senddocurl, params=message, files={"document": (filename, content, mimetype)})
         return r.json()["result"]["document"]["file_id"]
     except:
         log.exc(
             "failed sending document: filename %s, message %s" % (repr(filename), json.dumps(message, indent=4))
         )
Beispiel #3
0
 def run(self):        
     self.server.addMsgHandler("default", self.default_handler)
     while True:
         try:
             self.server.handle_request()
         except Exception as e:
             log.error(log.exc(e))
Beispiel #4
0
    def receive(self):

        cnt = 0
        err = 0

        while True:

            try:
                r = self.session.get(self.recvurl, params={"offset": self.offset, "timeout": 60})
                response = r.json()
                cnt += 1
            except:
                err += 1
                log.exc("fail #%d: error receiving messages" % err)
                if err >= 80:
                    log.out("fail #%d: waiting 30 minutes, then retrying" % err)
                    time.sleep(30 * 60)
                elif err >= 20:
                    log.out("fail #%d: waiting 60 seconds, then retrying" % err)
                    time.sleep(60)
                if err >= 10:
                    log.out("renewing session")
                    self.newsession()
                    cnt = 0
                continue

            err = 0

            log.out("receive: %s" % (json.dumps(response, indent=4),))

            if not response["ok"]:
                log.out("response not ok, ignoring")
            else:
                for result in response["result"]:
                    update_id = result["update_id"]
                    message = result["message"]

                    yield message

                    self.offset = update_id + 1

            if cnt >= 8192:
                log.out("cnt is %d, renewing session")
                self.newsession()
                cnt = 0
Beispiel #5
0
def safestr(s):
    if isinstance(s, str):
        return s
    if isinstance(s, unicode):
        try:
            s = s.encode('utf-8')   
        except UnicodeEncodeError, e:
            log.error(log.exc(e))
            return ""
        return s
Beispiel #6
0
def safestr(s):
    if isinstance(s, str):
        return s
    if isinstance(s, unicode):
        try:
            s = s.encode('utf-8')
        except UnicodeEncodeError, e:
            log.error(log.exc(e))
            return ""
        return s
Beispiel #7
0
 def send(self, address, data=None):
     message = OSC.OSCMessage()
     message.setAddress(address)
     if data is not None:
         if type(data) is dict:
             data = json.dumps(data)
         if type(data) is tuple:
             data = list(data)
         message.extend(data)
     if verbose:
         log.info("OSC send (%s): %s" % (len(self.targets), message))
     for location, target in self.targets.iteritems():            
         try:
             target.send(message, timeout=1)
         except Exception as e:
             log.error(log.exc(e))
Beispiel #8
0
def kill_process(pid):
    log.info("--> attempting to kill process %s" % pid)
    try:
        pid = int(pid)
        os.kill(pid, signal.SIGKILL)
        killed_pid, stat = os.waitpid(pid, os.WNOHANG)
        if killedpid == 0:
            log.error("--> could not kill process %s" % pid)
            return False
    except (ValueError, OSError) as e:
        if e.args[0] == 3:
            log.info("--> no process was running with pid %s" % pid)
        else:
            log.error(log.exc(e))
        return True
    else:
        log.info("--> killed process %s" % pid)
        return True            
Beispiel #9
0
def kill_process(pid):
    log.info("--> attempting to kill process %s" % pid)
    try:
        pid = int(pid)
        os.kill(pid, signal.SIGKILL)
        killed_pid, stat = os.waitpid(pid, os.WNOHANG)
        if killedpid == 0:
            log.error("--> could not kill process %s" % pid)
            return False
    except (ValueError, OSError) as e:
        if e.args[0] == 3:
            log.info("--> no process was running with pid %s" % pid)
        else:
            log.error(log.exc(e))
        return True
    else:
        log.info("--> killed process %s" % pid)
        return True
Beispiel #10
0
 def process(self, msginfo):
     if (time.time() - START_TIME) < 2:
         log.out("not processing message, started less than 2 seconds ago")
         return
     iscommand = msginfo["type"] == "text" and msginfo["message"]["text"].startswith("/")
     for triginfo in TRIGGERS:
         if iscommand and not (triginfo.has_key("commands") and triginfo["commands"]):
             continue
         if triginfo["message"].has_key(msginfo["type"]):
             func = triginfo["message"][msginfo["type"]]
         elif triginfo["message"].has_key("*"):
             func = triginfo["message"]["*"]
         else:
             continue
         info = {
             "logic": self,
             "fromuser": msginfo["from"],
             "inchat": msginfo["chat"],
             "msginfo": msginfo
         }
         if triginfo.has_key("require") and not self.addrequirements(triginfo["require"], info):
             continue
         try:
             returnmsg = func(info)
         except:
             log.exc("exception in trigger function")
             return
         if returnmsg:
             if returnmsg == True:
                 log.exc("ignoring message, trigger '%s' returned True" % (triginfo["id"] if triginfo.has_key("id") else ""))
                 return
             self.returnmsg(msginfo, returnmsg)
     if iscommand:
         cmdstr = msginfo["message"]["text"][1:]
         try:
             returnmsg = self.quickexeccmd(cmdstr, msginfo["from"], msginfo["chat"])
         except:
             log.exc("exception in command function")
             return
         if returnmsg:
             self.returnmsg(msginfo, returnmsg)
Beispiel #11
0
 def resendfile(self, message):
     try:
         r = self.session.post(self.senddocurl, params=message)
     except:
         log.exc("failed resending document: message %s" % (json.dumps(message, indent=4)))
Beispiel #12
0
 def send(self, message):
     try:
         self.session.post(self.sendurl, params=message)
     except:
         log.exc("failed sending message: %s" % json.dumps(message, indent=4))