This commit is contained in:
WorldTeacher
2024-01-26 13:10:33 +01:00
parent d07de40dbc
commit 1c1b5802f6
14 changed files with 176 additions and 117 deletions

View File

@@ -20,3 +20,11 @@ exclude = [
]
line-length = 88
indent-width = 4
target-version = "py312"
[lint]
# 1. Enable flake8-bugbear (`B`) rules, in addition to the defaults.
select = ["E4", "E7", "E9", "F", "B"]
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
[lint.per-file-ignores]
"__init__.py" = ["E402"]
"**/{tests,docs,tools}/*" = ["E402"]

0
semap.db Normal file
View File

View File

@@ -8,12 +8,12 @@ from typing import Any
from omegaconf import OmegaConf
from src.backend.db import main as template
# from src.data import pickles
import pickle
from src.logic.constants import SEMAP_MEDIA_ACCOUNTS
from src.logic.dataclass import ApparatData, BookData
from log import MyLogger
from src.logic.log import MyLogger
from icecream import ic
config = OmegaConf.load("config.yaml")
@@ -35,7 +35,6 @@ class Database:
pass
def create_database(self):
#create database from template
template(self.database_path)
subjects = config.subjects
for subject in subjects:
self.cur.execute(f"INSERT INTO subjects (name) VALUES ('{subject}')")

View File

@@ -0,0 +1,87 @@
import datetime
import os
import re
import sqlite3 as sql
import tempfile
import pickle
from src.logic.log import MyLogger
from icecream import ic
from typing import List, Tuple, Dict, Any, Optional, Union
from omegaconf import OmegaConf
from src.backend.db import CREATE_TABLE_APPARAT, CREATE_TABLE_MESSAGES, CREATE_TABLE_MEDIA, CREATE_TABLE_APPKONTOS, CREATE_TABLE_FILES, CREATE_TABLE_MESSAGES, CREATE_TABLE_PROF, CREATE_TABLE_USER, CREATE_TABLE_SUBJECTS
from src.logic.constants import SEMAP_MEDIA_ACCOUNTS
from src.logic.dataclass import ApparatData, BookData
config = OmegaConf.load("config.yaml")
logger = MyLogger(__name__)
def load_pickle(data):
return pickle.loads(data)
def dump_pickle(data):
return pickle.dumps(data)
def create_blob(data):
with open(data, "rb") as f:
return f.read()
def create_file(filename:str, blob):
with tempfile.TemporaryDirectory(delete=False) as tmpdir:
filepath = os.path.join(tmpdir, filename)
with open(filepath, "wb") as f:
f.write(blob)
return filepath
class Database:
def __init__(self, db_path: str = None):
if db_path is None:
self.db_path = config.database.path
else:
self.db_path = db_path
if self.get_db_contents() is None:
self.create_tables()
def get_db_contents(self):
try:
with sql.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM sqlite_master WHERE type='table'")
return cursor.fetchall()
except sql.OperationalError:
return None
def connect(self):
return sql.connect(self.db_path)
def close_connection(self, conn: sql.Connection):
conn.close()
def create_tables(self):
conn = self.connect()
cursor = conn.cursor()
cursor.execute(CREATE_TABLE_APPARAT)
cursor.execute(CREATE_TABLE_MESSAGES)
cursor.execute(CREATE_TABLE_MEDIA)
cursor.execute(CREATE_TABLE_APPKONTOS)
cursor.execute(CREATE_TABLE_FILES)
cursor.execute(CREATE_TABLE_PROF)
cursor.execute(CREATE_TABLE_USER)
cursor.execute(CREATE_TABLE_SUBJECTS)
conn.commit()
self.close_connection(conn)
def query_db(self, query: str, args: Tuple = (), one: bool = False):
conn = self.connect()
cursor = conn.cursor()
cursor.execute(query, args)
rv = cursor.fetchall()
conn.commit()
self.close_connection(conn)
return (rv[0] if rv else None) if one else rv

View File

@@ -1,73 +1,4 @@
import sqlite3
from omegaconf import OmegaConf
config = OmegaConf.load("config.yaml")
subjects = config.subjects
# Connect to the database
def main(database):
conn = sqlite3.connect(database)
conn.execute(
"""CREATE TABLE app_kontos (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
app_id INTEGER,
konto INTEGER,
passwort TEXT,
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
)"""
)
conn.execute(
"""CREATE TABLE files (
id INTEGER PRIMARY KEY,
filename TEXT,
fileblob BLOB,
app_id INTEGER,
filetyp TEXT,
prof_id INTEGER REFERENCES prof (id),
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
)"""
)
conn.execute(
"""CREATE TABLE media (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
bookdata BLOB,
app_id INTEGER,
prof_id INTEGER,
deleted INTEGER DEFAULT (0),
available BOOLEAN,
reservation BOOLEAN,
FOREIGN KEY (prof_id) REFERENCES prof (id),
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
)"""
)
conn.execute(
"""CREATE TABLE messages (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
created_at date NOT NULL DEFAULT CURRENT_TIMESTAMP,
message TEXT NOT NULL,
remind_at date NOT NULL DEFAULT CURRENT_TIMESTAMP,
user_id INTEGER NOT NULL,
appnr INTEGER,
FOREIGN KEY (user_id) REFERENCES user (id)
)"""
)
conn.execute(
"""CREATE TABLE prof (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
titel TEXT,
fname TEXT,
lname TEXT,
fullname TEXT NOT NULL UNIQUE,
mail TEXT,
telnr TEXT
)"""
)
conn.execute(
"""CREATE TABLE semesterapparat (
CREATE_TABLE_APPARAT = """CREATE TABLE semesterapparat (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT,
prof_id INTEGER,
@@ -84,10 +15,52 @@ def main(database):
konto INTEGER REFERENCES app_kontos (id),
FOREIGN KEY (prof_id) REFERENCES prof (id)
)"""
)
conn.execute(
"""CREATE TABLE user (
CREATE_TABLE_MEDIA = """CREATE TABLE media (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
bookdata BLOB,
app_id INTEGER,
prof_id INTEGER,
deleted INTEGER DEFAULT (0),
available BOOLEAN,
reservation BOOLEAN,
FOREIGN KEY (prof_id) REFERENCES prof (id),
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
)"""
CREATE_TABLE_APPKONTOS = """CREATE TABLE app_kontos (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
app_id INTEGER,
konto INTEGER,
passwort TEXT,
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
)"""
CREATE_TABLE_FILES = """CREATE TABLE files (
id INTEGER PRIMARY KEY,
filename TEXT,
fileblob BLOB,
app_id INTEGER,
filetyp TEXT,
prof_id INTEGER REFERENCES prof (id),
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
)"""
CREATE_TABLE_MESSAGES = """CREATE TABLE messages (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
created_at date NOT NULL DEFAULT CURRENT_TIMESTAMP,
message TEXT NOT NULL,
remind_at date NOT NULL DEFAULT CURRENT_TIMESTAMP,
user_id INTEGER NOT NULL,
appnr INTEGER,
FOREIGN KEY (user_id) REFERENCES user (id)
)"""
CREATE_TABLE_PROF = """CREATE TABLE prof (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
titel TEXT,
fname TEXT,
lname TEXT,
fullname TEXT NOT NULL UNIQUE,
mail TEXT,
telnr TEXT
)"""
CREATE_TABLE_USER = """CREATE TABLE user (
id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
username TEXT NOT NULL UNIQUE,
@@ -97,34 +70,9 @@ def main(database):
email TEXT UNIQUE,
name TEXT
)"""
)
conn.execute(
"""
CREATE TABLE subjects (
CREATE_TABLE_SUBJECTS = """CREATE TABLE subjects (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT NOT NULL UNIQUE
)
"""
)
conn.execute(
"""
CREATE TABLE aliases (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT NOT NULL UNIQUE,
subject_id INTEGER,
FOREIGN KEY (subject_id) REFERENCES subjects (id)
)
"""
)
# Commit the changes and close the connection
conn.commit()
#insert subjects
conn.close()
)"""
if __name__ == "__main__":
main()

View File

@@ -4,7 +4,7 @@ import time
from PyQt6.QtCore import QThread, pyqtSignal
from src.backend.database import Database
from log import MyLogger
from src.logic.log import MyLogger
from src.transformers import RDS_AVAIL_DATA
from src.logic.webrequest import BibTextTransformer, WebRequest
import sqlite3

View File

@@ -18,7 +18,7 @@ from src.logic import c_sort
from src.backend.database import Database
from src.logic.constants import APP_NRS, PROF_TITLES
from src.logic.dataclass import ApparatData, BookData, MailData
from log import MyLogger
from src.logic.log import MyLogger
from src.logic.threads import BookGrabber,AvailChecker
from src.ui import (
App_Ext_Dialog,

View File

@@ -3,7 +3,7 @@ from bs4 import BeautifulSoup
from omegaconf import OmegaConf
from src.logic.dataclass import BookData
from log import MyLogger
from src.logic.log import MyLogger
from src.transformers import ARRAYData, BibTeXData, COinSData, RDSData, RISData
#import sleep_and_retry decorator to retry requests
from ratelimit import limits, sleep_and_retry

View File

@@ -1 +1,6 @@
from .transformers import RDS_AVAIL_DATA, ARRAYData, COinSData, BibTeXData, RISData, RDSData
from .transformers import (RDS_AVAIL_DATA,
ARRAYData,
COinSData,
BibTeXData,
RISData,
RDSData)

View File

@@ -9,7 +9,7 @@ from typing import Any, List, Optional
from pydantic import BaseModel, Field
from src.logic.dataclass import BookData
from log import MyLogger
from src.logic.log import MyLogger
logger = MyLogger("transformers.py")

View File

@@ -8,7 +8,7 @@
from PyQt6 import QtCore, QtGui, QtWidgets
from log import MyLogger
from src.logic.log import MyLogger
from src.logic.threads import AutoAdder
logger = MyLogger("AutoTitleAdder")

21
test.py
View File

@@ -125,11 +125,18 @@
# data = ['YH 6876 S344', 'YM 3500 L925', 'CU 3200 W862', 'CW 6940 W842', 'CZ 1360 M379', 'CU 3800 V445', 'CU 3100 L948', 'CU 3200 H379 (3)', 'YC 7093 K95', 'CU 8590 E34 (2)', 'MS 6410 L744 (2)+1', 'CUS778', 'Psy K 120: 125 b', 'Psy L 170: 66', 'MR 2600 M474 (12)+16', 'Psy K 760: 19', 'Psy K 110: 92', 'Psy K 400: 45 a', 'CD 20/10,6']
# main(data)
from src.backend.database import Database
import pickle
db = Database()
# from src.backend.database import Database
# import pickle
# db = Database()
query="SELECT * from media where id=1"
_data = db.database.execute(query).fetchall()
var = _data[0][1]
print(pickle.loads(var))
# query="SELECT * from media where id=1"
# _data = db.database.execute(query).fetchall()
# var = _data[0][1]
# print(pickle.loads(var))
from src.backend.database_rewrite import Database
from omegaconf import OmegaConf
config = OmegaConf.load("config.yaml")
subjects = [subject["name"] for subject in config.subjects]
print(subjects)

5
test/test_database.py Normal file
View File

@@ -0,0 +1,5 @@
from src.backend.database_rewrite import Database
db = Database("semap.db")
print(db.query_db("SELECT * FROM subjects WHERE id=1"))