209 lines
6.6 KiB
Python
209 lines
6.6 KiB
Python
from PyQt6.QtCore import QThread
|
|
from PyQt6.QtCore import pyqtSignal as Signal
|
|
from src.backend import Database
|
|
|
|
from src.logic.webrequest import BibTextTransformer, WebRequest
|
|
import sys
|
|
from loguru import logger as log
|
|
|
|
logger = log
|
|
logger.remove()
|
|
logger.add("logs/bookgrabber_thread.log", rotation="1 week", enqueue=True)
|
|
log.add(
|
|
"logs/application.log",
|
|
rotation="1 day",
|
|
compression="zip",
|
|
)
|
|
|
|
# logger.add(sys.stderr, format="{time} {level} {message}", level="INFO")
|
|
logger.add(sys.stdout)
|
|
|
|
|
|
class BookGrabber(QThread):
|
|
updateSignal = Signal(int, int)
|
|
done = Signal()
|
|
|
|
def __init__(self):
|
|
super(BookGrabber, self).__init__(parent=None)
|
|
self.is_Running = True
|
|
logger.info("Starting worker thread")
|
|
self.data = []
|
|
self.app_id = None
|
|
self.prof_id = None
|
|
self.mode = None
|
|
self.book_id = None
|
|
self.use_any = False
|
|
self.use_exact = False
|
|
self.app_id = None
|
|
self.tstate = (self.app_id, self.prof_id, self.mode, self.data)
|
|
self.request = WebRequest()
|
|
|
|
def add_values(
|
|
self, app_id: int, prof_id: int, mode: str, data, any_book=False, exact=False
|
|
):
|
|
self.app_id = app_id
|
|
self.prof_id = prof_id
|
|
self.mode = mode
|
|
self.data: list[str] = data
|
|
self.use_any = any_book
|
|
self.use_exact = exact
|
|
logger.info(f"Working on {len(self.data)} entries")
|
|
self.tstate = (self.app_id, self.prof_id, self.mode, self.data)
|
|
logger.debug("State: " + str(self.tstate))
|
|
self.request.set_apparat(self.app_id)
|
|
# logger.debug(self.tstate)
|
|
|
|
def run(self):
|
|
self.db = Database()
|
|
item = 0
|
|
iterdata = self.data
|
|
# logger.debug(iterdata)
|
|
|
|
for entry in iterdata:
|
|
# logger.debug(entry)
|
|
logger.info("Processing entry: {}", entry)
|
|
|
|
webdata = self.request.get_ppn(entry)
|
|
if self.use_any:
|
|
webdata = webdata.use_any_book
|
|
webdata = webdata.get_data()
|
|
|
|
if webdata == "error":
|
|
continue
|
|
|
|
bd = BibTextTransformer(self.mode)
|
|
logger.debug(webdata)
|
|
if self.mode == "ARRAY":
|
|
if self.use_exact:
|
|
bd = bd.use_signature(entry)
|
|
bd = bd.get_data(webdata).return_data()
|
|
logger.debug(bd)
|
|
if bd is None:
|
|
# bd = BookData
|
|
continue
|
|
bd.signature = entry
|
|
transformer = (
|
|
BibTextTransformer("RDS").get_data(webdata).return_data("rds_data")
|
|
)
|
|
|
|
# confirm lock is acquired
|
|
self.db.addBookToDatabase(bd, self.app_id, self.prof_id)
|
|
# get latest book id
|
|
self.book_id = self.db.getLastBookId()
|
|
logger.info("Added book to database")
|
|
state = 0
|
|
for result in transformer.RDS_DATA:
|
|
# logger.debug(result.RDS_LOCATION)
|
|
if str(self.app_id) in result.RDS_LOCATION:
|
|
state = 1
|
|
break
|
|
|
|
logger.info(f"State of {entry}: {state}")
|
|
logger.debug(
|
|
"updating availability of " + str(self.book_id) + " to " + str(state)
|
|
)
|
|
try:
|
|
self.db.setAvailability(self.book_id, state)
|
|
logger.debug("Added book to database")
|
|
except Exception as e:
|
|
logger.error(f"Failed to update availability: {e}")
|
|
logger.debug("Failed to update availability: " + str(e))
|
|
|
|
# time.sleep(5)
|
|
item += 1
|
|
self.updateSignal.emit(item, len(self.data))
|
|
logger.info("Worker thread finished")
|
|
# self.done.emit()
|
|
self.quit()
|
|
|
|
def stop(self):
|
|
self.is_Running = False
|
|
|
|
|
|
class BookGrabberTest(QThread):
|
|
updateSignal = Signal(int, int)
|
|
done = Signal()
|
|
|
|
def __init__(self, appnr: int):
|
|
super(BookGrabberTest, self).__init__(parent=None)
|
|
self.is_Running = True
|
|
logger.info("Starting worker thread")
|
|
self.data = None
|
|
self.app_id = None
|
|
self.prof_id = None
|
|
self.mode = None
|
|
self.book_id = None
|
|
self.use_any = False
|
|
self.use_exact = False
|
|
self.app_id = appnr
|
|
self.tstate = (self.app_id, self.prof_id, self.mode, self.data)
|
|
self.results = []
|
|
|
|
def add_values(
|
|
self, app_id: int, prof_id: int, mode: str, data, any_book=False, exact=False
|
|
):
|
|
self.app_id = app_id
|
|
self.prof_id = prof_id
|
|
self.mode = mode
|
|
self.data = data
|
|
self.use_any = any_book
|
|
self.use_exact = exact
|
|
logger.info(f"Working on {len(self.data)} entries")
|
|
self.tstate = (self.app_id, self.prof_id, self.mode, self.data)
|
|
logger.debug("State: " + str(self.tstate))
|
|
# logger.debug(self.tstate)
|
|
|
|
def run(self):
|
|
item = 0
|
|
iterdata = self.data
|
|
# logger.debug(iterdata)
|
|
for entry in iterdata:
|
|
# logger.debug(entry)
|
|
signature = str(entry)
|
|
logger.info("Processing entry: " + signature)
|
|
|
|
webdata = WebRequest().set_apparat(self.app_id).get_ppn(entry)
|
|
if self.use_any:
|
|
webdata = webdata.use_any_book
|
|
webdata = webdata.get_data()
|
|
|
|
if webdata == "error":
|
|
continue
|
|
|
|
bd = BibTextTransformer(self.mode)
|
|
if self.mode == "ARRAY":
|
|
if self.use_exact:
|
|
bd = bd.use_signature(entry)
|
|
bd = bd.get_data(webdata).return_data()
|
|
if bd is None:
|
|
# bd = BookData
|
|
continue
|
|
bd.signature = entry
|
|
transformer = (
|
|
BibTextTransformer("RDS").get_data(webdata).return_data("rds_data")
|
|
)
|
|
|
|
# confirm lock is acquired
|
|
# get latest book id
|
|
logger.info("Added book to database")
|
|
state = 0
|
|
for result in transformer.RDS_DATA:
|
|
# logger.debug(result.RDS_LOCATION)
|
|
if str(self.app_id) in result.RDS_LOCATION:
|
|
state = 1
|
|
break
|
|
|
|
logger.info(f"State of {signature}: {state}")
|
|
# logger.debug("updating availability of " + str(self.book_id) + " to " + str(state))
|
|
self.results.append(bd)
|
|
|
|
# time.sleep(5)
|
|
item += 1
|
|
self.updateSignal.emit(item, len(self.data))
|
|
logger.info("Worker thread finished")
|
|
# self.done.emit()
|
|
self.quit()
|
|
|
|
def stop(self):
|
|
self.is_Running = False
|