diff options
| -rw-r--r-- | Dockerfile | 11 | ||||
| -rw-r--r-- | Smarker/misc_classes.py | 14 | ||||
| -rw-r--r-- | Smarker/smarker.py (renamed from Smarker/mark.py) | 10 | 
3 files changed, 35 insertions, 0 deletions
| diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b688e0c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM ubuntu:latest +MAINTAINER Eden Attenborough "gae19jtu@uea.ac.uk" +ENV TZ=Europe/London +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN apt-get update -y +RUN apt-get install -y python3-pip python3-dev build-essential texlive-base wkhtmltopdf +COPY ./Smarker /Smarker +WORKDIR /Smarker +RUN pip3 install -r requirements.txt +ENTRYPOINT ["python3"] +CMD ["smarker.py"]
\ No newline at end of file diff --git a/Smarker/misc_classes.py b/Smarker/misc_classes.py index 09c3a7d..17ad36a 100644 --- a/Smarker/misc_classes.py +++ b/Smarker/misc_classes.py @@ -1,4 +1,5 @@  from dataclasses import dataclass
 +import argparse
  import tempfile
  import zipfile
  import shutil
 @@ -19,6 +20,19 @@ latex_jinja_env = jinja2.Environment(  	loader = jinja2.FileSystemLoader(os.path.abspath(os.path.join(os.path.split(__file__)[0], "templates")))
  )
 +class EnvDefault(argparse.Action):
 +    def __init__(self, envvar, required=True, default=None, **kwargs):
 +        if not default and envvar:
 +            if envvar in os.environ:
 +                default = os.environ[envvar]
 +        if required and default:
 +            required = False
 +        super(EnvDefault, self).__init__(default=default, required=required, 
 +                                         **kwargs)
 +
 +    def __call__(self, parser, namespace, values, option_string=None):
 +        setattr(namespace, self.dest, values)
 +
  @dataclass
  class ExtractZipToTempDir(tempfile.TemporaryDirectory):
      zip_file:str
 diff --git a/Smarker/mark.py b/Smarker/smarker.py index e8070f8..106d426 100644 --- a/Smarker/mark.py +++ b/Smarker/smarker.py @@ -69,18 +69,24 @@ if __name__ == "__main__":      parser = argparse.ArgumentParser()      parser.add_argument(          "-a", "--assessment", +        action = misc_classes.EnvDefault, +        envvar = "assessment",          help = "Path to an assessment .yml file",          type = os.path.abspath,          required = True      )      parser.add_argument(          "-s", "--submission", +        action = misc_classes.EnvDefault, +        envvar = "submission",          help = "Path to a zip of a student's code",          type = os.path.abspath,          required = True      )      parser.add_argument(          "-f", "--format", +        action = misc_classes.EnvDefault, +        envvar = "format",          help = "Output format type",          type = str,          choices = ["yaml", "json", "pdf"] + [os.path.splitext(f)[0] for f in os.listdir(os.path.join(os.path.split(__file__)[0], "templates"))], @@ -88,6 +94,8 @@ if __name__ == "__main__":      )      parser.add_argument(          "-o", "--out", +        action = misc_classes.EnvDefault, +        envvar = "out",          help = "Path to write the output to, or, by default write to stdout. 'auto' automatically generates a file name.",          default = "stdout",      ) @@ -96,6 +104,8 @@ if __name__ == "__main__":          for option in config.options(section):              parser.add_argument(                  "--%s_%s" % (section, option), +                action = misc_classes.EnvDefault, +                envvar = "--%s_%s" % (section, option),                  default = config.get(section, option),                  help = "Optional argument inherited from config file. Read smarker.conf for details."              ) | 
