81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
import time
|
|
|
|
# from icecream import ic
|
|
from PySide6.QtCore import QThread
|
|
from PySide6.QtCore import Signal as Signal
|
|
|
|
from src.backend.database import Database
|
|
from src import LOG_DIR
|
|
from src.logic.webrequest import BibTextTransformer, WebRequest
|
|
|
|
# from src.transformers import RDS_AVAIL_DATA
|
|
import loguru
|
|
import sys
|
|
|
|
log = loguru.logger
|
|
log.remove()
|
|
log.add(sys.stdout, level="INFO")
|
|
log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days")
|
|
|
|
|
|
|
|
class AvailChecker(QThread):
|
|
updateSignal = Signal(str, int)
|
|
updateProgress = Signal(int, int)
|
|
|
|
def __init__(
|
|
self, links: list = None, appnumber: int = None, parent=None, books=list[dict]
|
|
):
|
|
if links is None:
|
|
links = []
|
|
super().__init__(parent)
|
|
log.info("Starting worker thread")
|
|
log.info(
|
|
"Checking availability for "
|
|
+ str(links)
|
|
+ " with appnumber "
|
|
+ str(appnumber)
|
|
+ "..."
|
|
)
|
|
self.links = links
|
|
self.appnumber = appnumber
|
|
self.books = books
|
|
log.info(
|
|
f"Started worker with appnumber: {self.appnumber} and links: {self.links} and {len(self.books)} books..."
|
|
)
|
|
time.sleep(2)
|
|
|
|
def run(self):
|
|
self.db = Database()
|
|
state = 0
|
|
count = 0
|
|
for link in self.links:
|
|
log.info("Processing entry: " + str(link))
|
|
data = WebRequest().set_apparat(self.appnumber).get_ppn(link).get_data()
|
|
transformer = BibTextTransformer("RDS")
|
|
rds = transformer.get_data(data).return_data("rds_availability")
|
|
|
|
book_id = None
|
|
for item in rds.items:
|
|
sign = item.superlocation
|
|
loc = item.location
|
|
# # print(item.location)
|
|
if self.appnumber in sign or self.appnumber in loc:
|
|
state = 1
|
|
break
|
|
for book in self.books:
|
|
if book["bookdata"].signature == link:
|
|
book_id = book["id"]
|
|
break
|
|
log.info(f"State of {link}: " + str(state))
|
|
# print("Updating availability of " + str(book_id) + " to " + str(state))
|
|
self.db.setAvailability(book_id, state)
|
|
count += 1
|
|
self.updateProgress.emit(count, len(self.links))
|
|
self.updateSignal.emit(item.callnumber, state)
|
|
|
|
log.info("Worker thread finished")
|
|
# teminate thread
|
|
|
|
self.quit()
|