summaryrefslogtreecommitdiffstats
path: root/API/helpers.py
blob: 692e566e6b35f433a08677a48122262219e93300 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import tempfile
import docker
import json
import os

CLIENT = docker.from_env()

def run_smarker_simple(db, zip_name, assessment_name, volumes):
    with tempfile.TemporaryDirectory() as td:   # remember to passthru /tmp/ as a volume
        env = [                                 # probably need to find a better way tbh
            "submission=/tmp/%s" % zip_name,
            "assessment=%s" % assessment_name,
            "format=json",
            "output=/out/report.json"
        ]
        outjson = os.path.join(td, "report.json")
        volumes.append("%s:/out/report.json" % (outjson))
        # print("file_deps:", volumes)
        
        try:
            pypideps = db.get_assessment_yaml(assessment_name)["dependencies"]["libraries"]
            env.append("SMARKERDEPS=" + ",".join(pypideps))
        except KeyError:
            pass
        # print("env: ", env)

        open(outjson, 'a').close()  # make a blank file so docker doesnt make it as a directory
        log = CLIENT.containers.run(
            "smarker",
            remove = True,
            volumes = volumes,
            environment = env
        )
        print("log: ", log)

        for f in os.listdir(".uploads"):
            os.remove(os.path.join(".uploads", f))

        with open(outjson, "r") as f:
            return json.load(f)