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

@@ -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()