def run(self): self.reload_boards() for api in self.authModules: try: api.refresh_database() except Exception as e: logger.error( f"Failed to refresh database, module: {api.__module__}, e: {e}" ) while self._run: try: r = self._inqueue.get(block=True, timeout=60) except Empty: # Do our AWS checks for api in self.authModules: try: api.refresh_database() except Exception as e: logger.error( f"Failed to refresh database, module: {api.__module__}, e: {e}" ) continue if type(r) == tuple: if r[0] == 'unlock': (c, board, relay, duration, credential) = r self.boards[board].Unlock(relay, duration, credential) elif r[0] == "lock": (a, board, relay, credential) = r self.boards[board].Lock(relay, credential) elif r[0] == 'aws': for api in self.authModules: api.refresh_database() elif r[0] == "status": fv: Facility # def facilityStatus(f : Facility): # return self.boards[f.board].relaystatus[f.relay] status = dict( (f.name, self.boards[f.board].relaystatus[f.relay]) for f in Config.Facilities.values()) # status = list(map(facilityStatus,Config.Facilities.values())) self._outqueue.put(status) elif r[0] == "query": response = [] bv: ReaderBoard for bn, bv in self.boards.items(): response.append(bv.__repr__()) for bv in query_devices( ignored_devices=self.boards.values()): response.append(bv) self._outqueue.put(response) elif r[0] == "reload": # We have to do this here, even though it's also done in the webpanel, because # Config is different here vs webpanel due to multiprocessing Config.Reload() self.reload_boards() for api in self.authModules: api.on_close() self.authModules = self.load_authorizations() self._outqueue.put("OK")
def update_config(): try: newconfig = request.form['config'] cc = Configuration(newconfig) with open(Config.FileName,'w') as out: out.write(newconfig) Config.Reload() q: Queue = webpanel.config['squeue'] w: Queue = webpanel.config['wqueue'] q.put(("reload",)) try: w.get(True, 3.00) #wait for a response before doing anything else except Empty: #TODO pass return redirect("/config") except ConfigurationException as ce: return jsonify({'result':'failed', "message" : str(ce) })