And when card appears there is olsa GUI which is made with tkinter. They all work seperetaly but I could not work them asynchronously
I've read a lot about asyncronous jobs I am totally confused. Which library and WHY should I use among Processing or Threads or asyncio or something else...
Can anyone help me?
Here is some parts of my code
Reader.py
Code: Select all
from datetime import datetime,timedelta
import sys
from pirc522 import RFID
class Reader(object):
def __init__(self,accessList,entryLogger):
self.reader = RFID()
self.accessList = accessList
self.entryLogger = entryLogger
self.ex_time = datetime(2017,12,12,12,12,12)
self.ex_uid = ""
def read(self):
cardUID = ""
self.reader.wait_for_tag()
(error,data) = self.reader.request()
(error, uid) = self.reader.anticoll()
if not error:
for number in uid[:4]:
cardUID += format(number,"02X")
new_time = self._readed_at()
if(new_time - self.ex_time > timedelta(seconds = 3)):
self.ex_time = datetime.now()
return cardUID
def is_granted(self,uid):
if uid is not None and uid in self.accessList:
self.entryLogger.log(uid)
print("Access Granted. UID: " + uid)
return uid
def _readed_at(self):
return datetime.now()
Code: Select all
def main():
download_settings()
create_folders()
settings = read_settings()
accessList = get_user_list(settings)
configure_scheduler(settings)
reader = Reader(accessList, entryLogger)
message_sender = MessageSender(client.check,client.bulk)
while True:
authorized_uid = reader.is_granted(reader.read())
#TODO:If not authorized in AccessList.txt look to the server
if authorized_uid is not None:
open_door()
check_model = CheckModel(configs.DeviceSerialNumber, authorized_uid)
message.put_message(check_model)Code: Select all
from json_helper import JSONHelper
from database_helper import *
from model_helper import ModelHelper
class Message():
def __init__(self, queue, client, syncLogger=None, entryLogger=None, errorLogger=None):
self.queue = queue
self.entryLogger = entryLogger if entryLogger is not None else None
self.errorLogger = errorLogger if errorLogger is not None else None
self.syncLogger = syncLogger if syncLogger is not None else None
self.DatabaseAction = DBHelper()
def put_message(self, message):
self.put_to_queue(self.queue, message)
self.put_to_db(message)
def get_message(self):
return self.get_from_queue(self.queue)
def put_to_queue(self, queue, message):
self.queue.put(message)
def get_from_queue(self, queue):
if not queue.empty():
return queue.get()
else:
print("Queue is empty")
return None
def put_to_db(self, message):
message = ModelHelper.checkmodel_to_log(message)
self.DatabaseAction.insert(Record(message.__dict__))
def get_from_db(self,message,criteria):
pass