diff options
| -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): | 
