From d0f18184cb8619a1b4c1c540cf6af66eaacac239 Mon Sep 17 00:00:00 2001 From: jwansek Date: Wed, 27 Apr 2022 19:42:55 +0100 Subject: Added adding submissions to database --- Smarker/database.py | 6 +++--- Smarker/reflect.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Smarker/database.py b/Smarker/database.py index f17c285..38af6a7 100644 --- a/Smarker/database.py +++ b/Smarker/database.py @@ -140,11 +140,11 @@ class SmarkerDatabase: def add_submission(self, student_id, assessment_name, report_yaml, files): with self.__connection.cursor() as cursor: cursor.execute("INSERT INTO submissions (student_no, assessment_name, report_yaml) VALUES (%s, %s, %s);", ( - student_id, assessment_name, report_yaml + student_id, assessment_name, yaml.dump(report_yaml) )) submission_id = cursor.lastrowid - for file_name, file_contents in files: + for file_name, file_contents in files.items(): cursor.execute(""" INSERT INTO submitted_files (submission_id, file_id, file_text) @@ -152,4 +152,4 @@ class SmarkerDatabase: """, ( submission_id, file_name, file_contents )) - + self.__connection.commit() diff --git a/Smarker/reflect.py b/Smarker/reflect.py index bc5ae0e..2a1f552 100644 --- a/Smarker/reflect.py +++ b/Smarker/reflect.py @@ -8,6 +8,7 @@ import subprocess import importlib import traceback import tempfile +import database import inspect import pkgutil import shutil @@ -62,6 +63,9 @@ class Reflect: "doc": self.__format_doc(inspect.getdoc(self.imported_modules[module_name])) } + def get_module_source(self, module_name): + return inspect.getsource(self.imported_modules[module_name]).rstrip() + def get_classes(self, module_name): """Gets the classes in a given module. The module must be imported first. @@ -237,6 +241,7 @@ def gen_reflection_report(client_code_path, assessment_struct, student_no, confi out = assessment_struct out["student_no"] = student_no tests_to_run = {} + files_sources = {} try: produced_files = assessment_struct["produced_files"] @@ -247,6 +252,8 @@ def gen_reflection_report(client_code_path, assessment_struct, student_no, confi required_file = list(required_file.keys())[0] module_name = os.path.splitext(required_file)[0] + files_sources[required_file] = None + if module_name in present_module_names: out["files"][i][required_file]["present"] = True else: @@ -269,6 +276,7 @@ def gen_reflection_report(client_code_path, assessment_struct, student_no, confi required_files_features = assessment_struct["files"][i][required_file] out["files"][i][required_file]["has_exception"] = False out["files"][i][required_file]["documentation"] = reflection.get_module_doc(module_name) + files_sources[required_file] = reflection.get_module_source(module_name) if "classes" in required_files_features.keys(): present_classes = reflection.get_classes(module_name) @@ -374,6 +382,12 @@ def gen_reflection_report(client_code_path, assessment_struct, student_no, confi out["test_results"] = reflection.run_tests(tests_to_run, configuration["out"] == "stdout" and configuration["format"] in ["text", "txt"]) out["class_tree"] = reflection.get_class_tree() + + with database.SmarkerDatabase( + configuration["mysql_host"], configuration["mysql_user"], configuration["mysql_passwd"], + "Smarker", int(configuration["mysql_port"])) as db: + + db.add_submission(student_no, out["name"], out, files_sources) return out class MonitoredFileNotInProducedFilesException(Exception): -- cgit v1.2.3