diff options
author | jwansek <eddie.atten.ea29@gmail.com> | 2022-04-27 19:42:55 +0100 |
---|---|---|
committer | jwansek <eddie.atten.ea29@gmail.com> | 2022-04-27 19:42:55 +0100 |
commit | d0f18184cb8619a1b4c1c540cf6af66eaacac239 (patch) | |
tree | 0066a262a65ac3d0c0377c96d24b774ac73b58c6 | |
parent | 2c891af807fd46b72a539ee99040dee18b3cd6e3 (diff) | |
download | Smarker-d0f18184cb8619a1b4c1c540cf6af66eaacac239.tar.gz Smarker-d0f18184cb8619a1b4c1c540cf6af66eaacac239.zip |
Added adding submissions to database
-rw-r--r-- | Smarker/database.py | 6 | ||||
-rw-r--r-- | 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): |