summaryrefslogtreecommitdiffstats
path: root/Smarker/assessments.py
diff options
context:
space:
mode:
Diffstat (limited to 'Smarker/assessments.py')
-rw-r--r--Smarker/assessments.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/Smarker/assessments.py b/Smarker/assessments.py
new file mode 100644
index 0000000..d5c8daf
--- /dev/null
+++ b/Smarker/assessments.py
@@ -0,0 +1,96 @@
+import misc_classes
+import configparser
+import jinja_helpers
+import database
+import argparse
+import yaml
+import os
+
+if __name__ == "__main__":
+ config = configparser.ConfigParser()
+ config.read(os.path.join(os.path.split(__file__)[0], "smarker.conf"))
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "-l", "--list",
+ action = misc_classes.EnvDefault,
+ envvar = "list",
+ help = "List assessment names, number enrolled, and number of files",
+ required = False
+ )
+ parser.add_argument(
+ "-c", "--create_assessment",
+ action = misc_classes.EnvDefault,
+ envvar = "create_assessment",
+ help = "Path to an assessment .yml file",
+ required = False
+ )
+ parser.add_argument(
+ "-rm", "--remove_assessment",
+ action = misc_classes.EnvDefault,
+ envvar = "remove_assessment",
+ help = "Name of an assessment to remove",
+ required = False
+ )
+ parser.add_argument(
+ "-e", "--number_enrolled",
+ action = misc_classes.EnvDefault,
+ envvar = "number_enrolled",
+ help = "Number of students enrolled onto an assessment. Required argument to create.",
+ required = False,
+ type = int
+ )
+ parser.add_argument(
+ "-s", "--create_student",
+ action = misc_classes.EnvDefault,
+ envvar = "create_student",
+ help = "Add a student in the form e.g. 123456789,Eden,Attenborough,E.Attenborough@uea.ac.uk",
+ required = False
+ )
+
+ for option in config.options("mysql"):
+ parser.add_argument(
+ "--%s_%s" % ("mysql", option),
+ action = misc_classes.EnvDefault,
+ envvar = "--%s_%s" % ("mysql", option),
+ default = config.get("mysql", option),
+ help = "Optional argument inherited from config file. Read smarker.conf for details."
+ )
+
+ args = vars(parser.parse_args())
+
+ with database.SmarkerDatabase(
+ args["mysql_host"], args["mysql_user"], args["mysql_passwd"],
+ "Smarker", int(args["mysql_port"])) as db:
+
+ if args["create_assessment"] is not None:
+ with open(args["create_assessment"], "r") as f:
+ assessment = yaml.safe_load(f)
+
+ db.create_assessment(
+ assessment["name"],
+ yaml.dump(assessment),
+ args["number_enrolled"],
+ jinja_helpers.flatten_struct(assessment["files"]).keys()
+ )
+
+ print("Added assessment %s..." % assessment["name"])
+
+ if args["remove_assessment"] is not None:
+ db.remove_assessment(args["remove_assessment"])
+
+ print("Removed %s..." % args["remove_assessment"])
+
+ if args["list"] is not None:
+ if args["list"] in ["True", "yes"]:
+ print(yaml.dump(db.get_assessments(), indent = 4))
+
+ if args["create_student"] is not None:
+ sid, name, email = args["create_student"].split(",")
+ db.add_student(int(sid), name, email)
+
+ print("Added student %s" % name)
+
+
+ # print(db.get_assessment_yaml("CMP-4009B-2020-A2"))
+