summaryrefslogtreecommitdiff
path: root/worker/JOJWorker.py
diff options
context:
space:
mode:
authorBoYanZh <bomingzh@sjtu.edu.cn>2020-11-22 18:38:34 +0800
committerBoYanZh <bomingzh@sjtu.edu.cn>2020-11-22 18:38:34 +0800
commit10ed594c47469f55fec73cb22754abc3074a1925 (patch)
treef9e5cc66e94821f6e8732c3878ac06912e5a780c /worker/JOJWorker.py
parentc6cba8975eeb0f26b290b8799e85d9a27394568d (diff)
update for project complication
Diffstat (limited to 'worker/JOJWorker.py')
-rw-r--r--worker/JOJWorker.py63
1 files changed, 48 insertions, 15 deletions
diff --git a/worker/JOJWorker.py b/worker/JOJWorker.py
index b0f316d..3724b7c 100644
--- a/worker/JOJWorker.py
+++ b/worker/JOJWorker.py
@@ -1,5 +1,5 @@
from bs4 import BeautifulSoup
-from util import Logger
+from util import Logger, getProjRepoName
import multiprocessing
import requests
import zipfile
@@ -64,13 +64,7 @@ class JOJWorker():
for result in resultSet
])
- def getProblemResult(self,
- homeworkID,
- problemID,
- zipPath,
- lang,
- groupName='',
- hwNum=0):
+ def getProblemResult(self, homeworkID, problemID, zipPath, lang):
tryTime = 0
while True:
tryTime += 1
@@ -78,12 +72,13 @@ class JOJWorker():
if response.status_code == 200:
break
self.logger.error(
- f"{groupName} h{hwNum} {problemID} upload error, code {response.status_code}, url {response.url}"
+ f"{zipPath} {problemID} upload error, code {response.status_code}, url {response.url}"
)
time.sleep(1)
+ res = self.getProblemStatus(response.url)
self.logger.debug(
- f"{groupName} h{hwNum} {problemID} upload succeed, url {response.url}")
- return self.getProblemStatus(response.url)
+ f"{zipPath} upload succeed, url {response.url}, result {res}")
+ return res
def checkGroupJOJProcess(self, groupNum, hwNum, jojInfo, fns, problemID):
groupName = f"hgroup-{groupNum:02}"
@@ -96,13 +91,13 @@ class JOJWorker():
filePath = os.path.join(hwDir, fn)
if not os.path.exists(filePath):
if not fn.endswith(".h"):
- self.logger.warning(f"{groupName} h{hwNum} {fn} not exist")
+ self.logger.warning(
+ f"{groupName} h{hwNum} {fn} not exist")
return 0
else:
zf.write(filePath, fn)
- res = self.getProblemResult(jojInfo["homeworkID"], problemID,
- zipPath, jojInfo["lang"],
- groupName, hwNum)
+ res = self.getProblemResult(jojInfo["homeworkID"], problemID, zipPath,
+ jojInfo["lang"])
# os.remove(zipPath)
return res
@@ -143,6 +138,44 @@ class JOJWorker():
}
return res
+ def checkProjJOJProcess(self, repoName, homeworkID, problemID):
+ def zipdir(path, zipPath, zf):
+ for root, dirs, files in os.walk(path):
+ for file in files:
+ if os.path.join(root, file) == zipPath:
+ continue
+ if 'cmake-build-debug' in root or '.git' in root:
+ continue
+ zf.write(
+ os.path.join(root, file),
+ os.path.relpath(os.path.join(root, file),
+ os.path.join(path, '.')))
+
+ projDir = os.path.join('projrepos', f'p{self.args.proj}', repoName)
+ if not os.path.exists(projDir): return 0
+ zipPath = os.path.join(projDir, problemID) + ".zip"
+ if os.path.exists(zipPath): os.remove(zipPath)
+ with zipfile.ZipFile(zipPath, mode='w') as zf:
+ zipdir(projDir, zipPath, zf)
+ if self.getProblemResult(homeworkID, problemID, zipPath, "cmake") == 0:
+ return 'JOJ copmile success with CMake'
+ if self.getProblemResult(homeworkID, problemID, zipPath, "make") == 0:
+ return 'JOJ copmile success with GNU Make'
+ return 'JOJ copmile failure with both GNU Make and CMake'
+
+ def checkProjJOJ(self, jojInfo):
+ res = {}
+ projNum, milestoneNum = self.args.proj, self.args.ms
+ homeworkID, problemID = jojInfo[projNum]["homeworkID"], jojInfo[projNum]["problemID"]
+ infos = [[*info, projNum, milestoneNum]
+ for hgroup in self.hgroups.values() for info in hgroup]
+ for id_, name, projNum, milestoneNum in infos:
+ repoName = getProjRepoName([id_, name, projNum, milestoneNum])
+ comments = [self.checkProjJOJProcess(repoName, homeworkID,
+ problemID)]
+ res[name] = {"jojComment": comments}
+ return res
+
if __name__ == "__main__":
from settings import *