summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--database.py97
-rw-r--r--smarker.conf4
-rw-r--r--smarker.conf.example17
4 files changed, 117 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index b8bb272..d7b0b3f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*_report.*
*.zip
+smarker.conf
# Byte-compiled / optimized / DLL files
__pycache__/
diff --git a/database.py b/database.py
new file mode 100644
index 0000000..a0e3640
--- /dev/null
+++ b/database.py
@@ -0,0 +1,97 @@
+from dataclasses import dataclass
+import pymysql
+
+@dataclass
+class SmarkerDatabase:
+ host:str
+ user:str
+ passwd:str
+ db:str
+ port:int = 3306
+
+ def __enter__(self):
+ try:
+ self.__connection = self.__get_connection()
+ except pymysql.err.OperationalError as e:
+ if e.args[0] == 1049:
+ self.__build_db()
+ return self
+
+ def __exit__(self, type, value, traceback):
+ self.__connection.close()
+
+ def __get_connection(self):
+ return pymysql.connect(
+ host = self.host,
+ port = self.port,
+ user = self.user,
+ passwd = self.passwd,
+ charset = "utf8mb4",
+ database = self.db
+ )
+
+ def __build_db(self):
+ self.__connection = pymysql.connect(
+ host = self.host,
+ port = self.port,
+ user = self.user,
+ passwd = self.passwd,
+ charset = "utf8mb4",
+ )
+ with self.__connection.cursor() as cursor:
+ # unsafe:
+ cursor.execute("CREATE DATABASE %s" % self.db)
+ cursor.execute("USE %s" % self.db)
+ cursor.execute("""
+ CREATE TABLE students(
+ student_no VARCHAR(10) PRIMARY KEY NOT NULL,
+ name TEXT NOT NULL,
+ email VARCHAR(50) NOT NULL
+ );
+ """)
+ cursor.execute("""
+ CREATE TABLE assessment(
+ assessment_name VARCHAR(30) PRIMARY KEY NOT NULL,
+ yaml_path TEXT NOT NULL,
+ num_enrolled INT UNSIGNED NULL
+ );
+ """)
+ cursor.execute("""
+ CREATE TABLE submissions(
+ submission_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ student_no VARCHAR(10) NOT NULL,
+ assessment_name VARCHAR(30) NOT NULL,
+ submission_dt DATETIME NOT NULL default CURRENT_TIMESTAMP,
+ submission_zip_path TEXT NOT NULL,
+ FOREIGN KEY (student_no) REFERENCES students(student_no),
+ FOREIGN KEY (assessment_name) REFERENCES assessment(assessment_name)
+ );
+ """)
+ cursor.execute("""
+ CREATE TABLE assessment_file(
+ file_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ assessment_name VARCHAR(30) NOT NULL,
+ file_name VARCHAR(30) NOT NULL,
+ FOREIGN KEY (assessment_name) REFERENCES assessment(assessment_name)
+ );
+ """)
+ cursor.execute("""
+ CREATE TABLE submitted_files(
+ submission_id INT UNSIGNED NOT NULL,
+ file_id INT UNSIGNED NOT NULL,
+ file_text TEXT NOT NULL,
+ FOREIGN KEY (submission_id) REFERENCES submissions(submission_id),
+ FOREIGN KEY (file_id) REFERENCES assessment_file(file_id),
+ PRIMARY KEY(submission_id, file_id)
+ );
+ """)
+
+
+ self.__connection.commit()
+ return self.__connection
+
+
+ def get_tables(self):
+ with self.__connection.cursor() as cursor:
+ cursor.execute("SHOW TABLES;")
+ return cursor.fetchall()
diff --git a/smarker.conf b/smarker.conf
index e8db25c..62180b5 100644
--- a/smarker.conf
+++ b/smarker.conf
@@ -1,8 +1,8 @@
[mysql]
host = 192.168.1.92
port = 3306
-user = smarker
-passwd = smarkerPassword
+user = root
+passwd = *************
[md]
show_full_docs = False
diff --git a/smarker.conf.example b/smarker.conf.example
new file mode 100644
index 0000000..e8db25c
--- /dev/null
+++ b/smarker.conf.example
@@ -0,0 +1,17 @@
+[mysql]
+host = 192.168.1.92
+port = 3306
+user = smarker
+passwd = smarkerPassword
+
+[md]
+show_full_docs = False
+show_source = False
+show_all_regex_occurrences = True
+show_all_run_output = False
+
+[txt]
+show_full_docs = False
+show_source = False
+show_all_regex_occurrences = True
+show_all_run_output = False \ No newline at end of file