コード例 #1
0
ファイル: appdaemon.py プロジェクト: beeaton/appdaemon
def worker():
  while True:
    args = q.get()
    type = args["type"]
    function = args["function"]
    id = args["id"]
    name = args["name"]
    if name in conf.objects and conf.objects[name]["id"] == id:
      try:
        if type == "initialize":
          function()
        if type == "timer":
          function(ha.sanitize_timer_kwargs(args["kwargs"]))
        if type == "attr":
          entity = args["entity"]
          attr = args["attribute"]
          old_state = args["old_state"]
          new_state = args["new_state"]
          function(entity, attr, old_state, new_state, ha.sanitize_state_kwargs(args["kwargs"]))
        if type == "event":
          data = args["data"]
          function(args["event"], data, args["kwargs"])

      except:
        ha.log(conf.error, "WARNING", '-'*60)
        ha.log(conf.error, "WARNING", "Unexpected error:")
        ha.log(conf.error, "WARNING", '-'*60)
        ha.log(conf.error, "WARNING", traceback.format_exc())
        ha.log(conf.error, "WARNING", '-'*60)
        if conf.errorfile != "STDERR" and conf.logfile != "STDOUT":
          ha.log(conf.logger, "WARNING", "Logged an error to {}".format(conf.errorfile))

    else:
      conf.logger.warning("Found stale callback for {} - discarding".format(name))
    q.task_done()
コード例 #2
0
 def info_listen_state(self, handle):
     name = self.name
     ha.log(conf.logger, "DEBUG",
            "Calling info_listen_state for {}".format(name))
     if name in conf.callbacks and handle in conf.callbacks[name]:
         callback = conf.callbacks[name][handle]
         return (callback["entity"],
                 callback["kwargs"].get("attribute", None),
                 ha.sanitize_state_kwargs(callback["kwargs"]))
     else:
         raise ValueError("Invalid handle: {}".format(handle))