diff --git a/config/config.py b/config/config.py index 9a50cb9..d013607 100644 --- a/config/config.py +++ b/config/config.py @@ -7,6 +7,7 @@ from pathlib import Path @dataclass class OpenAI: api_key: str + model: str def getattr(self, name: str): return getattr(self, name) diff --git a/src/__init__.py b/src/__init__.py index fdef22f..32f9353 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -1,17 +1,25 @@ +__version__ = "0.2.1" +__author__ = "Alexander Kirchner" __all__ = ["__version__", "__author__", "Icon", "settings"] -from config import Config import os +from config import Config +from appdirs import AppDirs + +app = AppDirs("SemesterApparatsManager", "SAM") +LOG_DIR = app.user_log_dir +CONFIG_DIR = app.user_config_dir +if not os.path.exists(LOG_DIR): + os.makedirs(LOG_DIR) +if not os.path.exists(CONFIG_DIR): + os.makedirs(CONFIG_DIR) + settings = Config("config/config.yaml") if not os.path.exists(settings.database.temp.expanduser()): settings.database.temp.expanduser().mkdir(parents=True, exist_ok=True) from .utils.icon import Icon -__version__ = "0.2.1" -__author__ = "Alexander Kirchner" - - if not os.path.exists("logs"): os.mkdir("logs") # open and close the file to create it diff --git a/src/backend/create_file.py b/src/backend/create_file.py index 5be6d59..ce1e2b9 100644 --- a/src/backend/create_file.py +++ b/src/backend/create_file.py @@ -6,11 +6,11 @@ from src.backend.database import Database import loguru import sys - +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") db = Database() diff --git a/src/backend/database.py b/src/backend/database.py index 2341db3..90f765d 100644 --- a/src/backend/database.py +++ b/src/backend/database.py @@ -1,12 +1,18 @@ -import os -import sqlite3 as sql -import tempfile -from pathlib import Path -from src import settings -from typing import Any, List, Optional, Tuple, Union import datetime import json +import os +import sqlite3 as sql +import sys +import tempfile from dataclasses import asdict +from pathlib import Path +from string import ascii_lowercase as lower +from string import digits, punctuation +from typing import Any, List, Optional, Tuple, Union + +import loguru + +from src import LOG_DIR, settings from src.backend.db import ( CREATE_ELSA_FILES_TABLE, CREATE_ELSA_MEDIA_TABLE, @@ -19,20 +25,17 @@ from src.backend.db import ( CREATE_TABLE_SUBJECTS, CREATE_TABLE_USER, ) -from pathlib import Path from src.errors import AppPresentError, NoResultError -from src.logic import ApparatData, BookData, Prof, Apparat, ELSA +from src.logic import ELSA, Apparat, ApparatData, BookData, Prof from src.logic.constants import SEMAP_MEDIA_ACCOUNTS from src.utils.blob import create_blob + from .semester import Semester -from string import ascii_lowercase as lower, digits, punctuation -import loguru -import sys log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") diff --git a/src/backend/semester.py b/src/backend/semester.py index 42a101a..392e593 100644 --- a/src/backend/semester.py +++ b/src/backend/semester.py @@ -3,11 +3,11 @@ import datetime from dataclasses import dataclass import loguru import sys - +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") diff --git a/src/backend/thread_bookgrabber.py b/src/backend/thread_bookgrabber.py index 36c99f9..0db468e 100644 --- a/src/backend/thread_bookgrabber.py +++ b/src/backend/thread_bookgrabber.py @@ -5,11 +5,11 @@ from src.backend import Database from src.logic.webrequest import BibTextTransformer, WebRequest import loguru import sys - +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") # logger.add(sys.stderr, format="{time} {level} {message}", level="INFO") diff --git a/src/backend/threads_autoadder.py b/src/backend/threads_autoadder.py index fa73c55..6ac53bf 100644 --- a/src/backend/threads_autoadder.py +++ b/src/backend/threads_autoadder.py @@ -7,11 +7,11 @@ from PyQt6.QtCore import pyqtSignal as Signal from src.backend import Database import loguru import sys - +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") # from src.transformers import RDS_AVAIL_DATA diff --git a/src/backend/threads_availchecker.py b/src/backend/threads_availchecker.py index 7d6b3b4..b3b08c5 100644 --- a/src/backend/threads_availchecker.py +++ b/src/backend/threads_availchecker.py @@ -5,7 +5,7 @@ from PyQt6.QtCore import QThread from PyQt6.QtCore import pyqtSignal 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 @@ -15,7 +15,7 @@ import sys log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") diff --git a/src/logic/openai.py b/src/logic/openai.py index f8b00a7..6ee11fe 100644 --- a/src/logic/openai.py +++ b/src/logic/openai.py @@ -1,8 +1,9 @@ from openai import OpenAI from src import settings import json +from src import LOG_DIR -model = "gpt-4o" +model = settings.openAI.model api_key = settings.openAI.api_key client = OpenAI(api_key = api_key) diff --git a/src/logic/webrequest.py b/src/logic/webrequest.py index ee12047..19505d1 100644 --- a/src/logic/webrequest.py +++ b/src/logic/webrequest.py @@ -11,10 +11,11 @@ from src.transformers import ARRAYData, BibTeXData, COinSData, RDSData, RISData from src.transformers.transformers import RDS_AVAIL_DATA, RDS_GENERIC_DATA import loguru import sys +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") # logger.add(sys.stderr, format="{time} {level} {message}", level="INFO") diff --git a/src/logic/wordparser.py b/src/logic/wordparser.py index c113e16..e3741c9 100644 --- a/src/logic/wordparser.py +++ b/src/logic/wordparser.py @@ -1,18 +1,21 @@ -import pandas as pd -from docx import Document -from dataclasses import dataclass -from src.backend import Semester -from typing import Union, Any -from src.logic.openai import name_tester, run_shortener, semester_converter -import zipfile -from bs4 import BeautifulSoup -import loguru import sys +import zipfile +from dataclasses import dataclass +from typing import Any, Union + +import loguru +import pandas as pd +from bs4 import BeautifulSoup +from docx import Document + +from src import LOG_DIR +from src.backend import Semester +from src.logic.openai import name_tester, run_shortener, semester_converter log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") diff --git a/src/transformers/transformers.py b/src/transformers/transformers.py index 84f8a22..a7ef88a 100644 --- a/src/transformers/transformers.py +++ b/src/transformers/transformers.py @@ -6,7 +6,7 @@ from dataclasses import dataclass from dataclasses import field as dataclass_field from typing import Any, List - +from src import LOG_DIR from src.logic.dataclass import BookData import loguru import sys @@ -14,7 +14,7 @@ import sys log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") ###Pydatnic models diff --git a/src/ui/dialogs/login.py b/src/ui/dialogs/login.py index a446ec0..39b8fd1 100644 --- a/src/ui/dialogs/login.py +++ b/src/ui/dialogs/login.py @@ -1,20 +1,19 @@ import hashlib +import sys +import loguru from PyQt6 import QtCore, QtWidgets - +from src import LOG_DIR, Icon from src.backend.admin_console import AdminCommands from src.backend.database import Database from .dialog_sources.login_ui import Ui_Dialog -import sys -import loguru -from src import Icon log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") class LoginDialog(Ui_Dialog): diff --git a/src/ui/dialogs/mail.py b/src/ui/dialogs/mail.py index 7b59e9b..c631610 100644 --- a/src/ui/dialogs/mail.py +++ b/src/ui/dialogs/mail.py @@ -10,11 +10,11 @@ from .dialog_sources.Ui_mail_preview import Ui_eMailPreview as MailPreviewDialog from .mailTemplate import MailTemplateDialog import loguru import sys - +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") diff --git a/src/ui/dialogs/parsed_titles.py b/src/ui/dialogs/parsed_titles.py index e1f2777..cf4d50f 100644 --- a/src/ui/dialogs/parsed_titles.py +++ b/src/ui/dialogs/parsed_titles.py @@ -6,11 +6,11 @@ from src.backend import AutoAdder from .dialog_sources.parsed_titles_ui import Ui_Form import loguru import sys - +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") class ParsedTitles(QtWidgets.QWidget, Ui_Form): def __init__(self, parent=None): diff --git a/src/ui/dialogs/settings.py b/src/ui/dialogs/settings.py index 51ed07b..bdd4502 100644 --- a/src/ui/dialogs/settings.py +++ b/src/ui/dialogs/settings.py @@ -4,11 +4,12 @@ from .dialog_sources.settings_ui import Ui_Dialog as _settings from src.ui.widgets.iconLine import IconWidget import loguru import sys +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") diff --git a/src/ui/userInterface.py b/src/ui/userInterface.py index f79c41f..8003f86 100644 --- a/src/ui/userInterface.py +++ b/src/ui/userInterface.py @@ -1,70 +1,68 @@ # encoding: utf-8 import atexit import os -import time import sys import tempfile +import time import webbrowser +from datetime import datetime from pathlib import Path from typing import Any, Union +import loguru from natsort import natsorted from PyQt6 import QtCore, QtGui, QtWidgets from PyQt6.QtCore import QThread from PyQt6.QtGui import QRegularExpressionValidator -from src import Icon -from src.backend import Database, BookGrabber, AvailChecker, DocumentationThread -from src.backend.semester import Semester +from src import LOG_DIR, Icon +from src.backend import AvailChecker, BookGrabber, Database, DocumentationThread from src.backend.create_file import recreateFile from src.backend.delete_temp_contents import delete_temp_contents as tempdelete -from src.ui import Ui_Semesterapparat +from src.backend.semester import Semester from src.logic import ( APP_NRS, + Apparat, # PROF_TITLES, ApparatData, BookData, + Prof, + SemapDocument, csv_to_list, word_to_semap, - SemapDocument, - Prof, - Apparat, ) +from src.ui import Ui_Semesterapparat from src.ui.dialogs import ( - popus_confirm, - MedienAdder, About, ApparatExtendDialog, - Mail_Dialog, - Settings, BookDataUI, + DocumentPrintDialog, LoginDialog, + Mail_Dialog, + MedienAdder, ParsedTitles, ReminderDialog, - DocumentPrintDialog, + Settings, + popus_confirm, ) from src.ui.widgets import ( - ElsaDialog, - MessageCalendar, - FilePicker, CalendarEntry, - UserCreate, - SearchStatisticPage, - EditUser, EditProf, + EditUser, + ElsaDialog, + FilePicker, + MessageCalendar, + SearchStatisticPage, + UserCreate, ) -from datetime import datetime - -import loguru - log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") log.add( - f"logs/{datetime.now().strftime('%Y-%m-%d')}.log", + f"{LOG_DIR}/{datetime.now().strftime('%Y-%m-%d')}.log", rotation="1 day", retention="1 month", ) diff --git a/src/ui/widgets/MessageCalendar.py b/src/ui/widgets/MessageCalendar.py index 00ee0d0..47b0a62 100644 --- a/src/ui/widgets/MessageCalendar.py +++ b/src/ui/widgets/MessageCalendar.py @@ -6,11 +6,12 @@ from typing import Any import darkdetect import loguru import sys +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") color = "#ddfb00" if darkdetect.isDark() else "#2204ff" diff --git a/src/ui/widgets/admin_edit_prof.py b/src/ui/widgets/admin_edit_prof.py index d4f4384..4ef209a 100644 --- a/src/ui/widgets/admin_edit_prof.py +++ b/src/ui/widgets/admin_edit_prof.py @@ -5,11 +5,11 @@ from src.logic import Prof from src.backend import Database import loguru import sys - +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") diff --git a/src/ui/widgets/elsa_main.py b/src/ui/widgets/elsa_main.py index ef3052f..1c83a6d 100644 --- a/src/ui/widgets/elsa_main.py +++ b/src/ui/widgets/elsa_main.py @@ -11,11 +11,11 @@ from src.ui.widgets import FilePicker, DataGraph from src.backend import recreateElsaFile import loguru import sys - +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") diff --git a/src/ui/widgets/graph.py b/src/ui/widgets/graph.py index e17523c..93f2cde 100644 --- a/src/ui/widgets/graph.py +++ b/src/ui/widgets/graph.py @@ -5,11 +5,12 @@ import pyqtgraph as pg from PyQt6 import QtWidgets import loguru import sys +from src import LOG_DIR log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days") def mergedicts(d1: dict[str, Any], d2: dict[str, Any]): diff --git a/src/ui/widgets/searchPage.py b/src/ui/widgets/searchPage.py index 27b556f..3a298d9 100644 --- a/src/ui/widgets/searchPage.py +++ b/src/ui/widgets/searchPage.py @@ -6,7 +6,7 @@ from src.backend import Database, Semester from src.logic import custom_sort, Prof, sort_semesters_list from src.ui.dialogs import Mail_Dialog, ApparatExtendDialog, ReminderDialog from src.ui.widgets import DataGraph, StatusWidget - +from src import LOG_DIR from natsort import natsorted import loguru import sys @@ -14,7 +14,7 @@ import sys log = loguru.logger log.remove() log.add(sys.stdout, level="INFO") -log.add("logs/application.log", rotation="1 MB", retention="10 days") +log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days")