-
Notifications
You must be signed in to change notification settings - Fork 0
/
functions.py
121 lines (106 loc) · 3.65 KB
/
functions.py
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import csv
import os
import subprocess
from data_structure import testResult,markings,results,responseBody
from data_structure import add_testResult,add_markings,add_results
import fnmatch
import time
from subprocess import STDOUT, check_output
from threading import Timer
import json
import requests
import urllib.request
from zipfile import ZipFile
from urllib.request import urlopen
from io import BytesIO
import shutil
def Run(args,markings): #args is receiveBody[configuration] dictionary, filename is the one of keys in configuration
filename = args["filename"]
dirpath = os.getcwd()
if dirpath.endswith("EXTRACTED"):
p = dirpath
# print(True)
else:
p = dirpath + '/EXTRACTED'
os.chdir(p)
# global EXEname
for file in os.listdir(p):
if fnmatch.fnmatch(file,filename):
EXEname = file[:-2] # name of .exe
command = "gcc -o " + EXEname + " " + filename
os.system(command)
temp_testResult = dict(testResult)
for y in args["testCases"]:
para = y["input"]
ans = y["output"]
mark = y["marks"]
command = "./" + EXEname
output = check_output([command]+para.split(),stderr=STDOUT,timeout=5.5)
output = str(output)
output.strip("\n")
output.strip("\r")
output=output[2:-1]
temp_testResult["output"] = output
temp_testResult["expectOutput"] = ans
if output == ans:
temp_testResult["match"] = True
temp_testResult["marks"] = mark
else:
temp_testResult["match"] = False
temp_testResult["marks"] = mark
markings["marked"]=True
add_testResult(temp_testResult,markings)
temp_testResult = dict(testResult)
return markings
def sendResult(fdata,secretKey):
# fdata =open("send.json","rb")
# r = requests.put('https://pretty-printed-request-bin.herokuapp.com/1kvflzr1',data=fdata, headers={"key":"oursecret","Content-Type":"application/json"}, timeout=5)
r = requests.put('http://backend-test-my-grading-space.apps.us-east-1.starter.openshift-online.com:80/grading',data=fdata, headers={"key": secretKey,"Content-Type":"application/json"}, timeout=10)
return
def receiveData(gradingID,secretKey):
r = requests.get('http://backend-test-my-grading-space.apps.us-east-1.starter.openshift-online.com:80/joblinks',params={"gradingId" : gradingID},headers={"key":secretKey}, timeout=10)
return r
def getGradingID():
gradingID = os.environ['GRADINGID']
return gradingID
def download(zipurl):
clearFolder()
cwd = os.getcwd()
if cwd.endswith("EXTRACTED"):
folder = cwd
else:
folder = os.path.join(cwd,'EXTRACTED')
zipresp = urlopen(zipurl,timeout=5)
zfile = ZipFile(BytesIO(zipresp.read()))
zfile.extractall(path=folder)
zipresp.close()
zfile.close()
return
def clearFolder():
cwd = os.getcwd()
if cwd.endswith("EXTRACTED"):
folder = cwd
else:
folder = os.path.join(cwd,'EXTRACTED')
if not os.path.exists(folder):
os.umask(0)
os.makedirs(folder,mode=0o777)
for the_file in os.listdir(folder):
file_path = os.path.join(folder, the_file)
try:
if os.path.isfile(file_path):
os.unlink(file_path)
elif os.path.isdir(file_path):
shutil.rmtree(file_path)
except Exception as e:
print(e)
if cwd.endswith("EXTRACTED"):
folder = cwd
else:
folder = os.path.join(cwd,'EXTRACTED')
try:
os.umask(0)
os.rmdir(folder)
except OSError as e:
print("Error: %s : %s" % (folder, e.strerror))
return