Newer
Older
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
#!/usr/bin/env python3
import json
import argparse
from urllib import request, error
# 提交答案服务域名或IP, 将在赛前告知
JUDGE_SERVER = "http://judge.aiops-challenge.com" # 评测服务地址
# 团队标识, 可通过界面下方权限获取, 每个ticket仅在当前赛季有效,如未注明团队标识,结果不计入成绩
TICKET = "TeamID"
def submit(data, judge_server=None, ticket=None):
judge_server = judge_server or JUDGE_SERVER
ticket = ticket or TICKET
if not judge_server or not ticket:
missing = ["judge_server" if not judge_server else "", "ticket" if not ticket else ""]
missing = [m for m in missing if m]
print("Required fields must be provided: %s" % ', '.join(missing))
return None
req_data = json.dumps({'data': data}).encode('utf-8')
req = request.Request(judge_server, data=req_data, headers={'ticket': ticket, 'Content-Type': 'application/json'})
try:
with request.urlopen(req) as response:
response_body = response.read().decode('utf-8')
return json.loads(response_body)['submission_id']
except error.HTTPError as e:
msg = e.reason
response_body = e.read().decode('utf-8')
if response_body:
try:
msg = json.loads(response_body)['detail']
except:
pass
print("[Error %s] %s" % (e.code, msg))
except error.URLError as e:
print(e.reason)
return None
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Submit to judge server")
parser.add_argument('result_path', nargs='?', default='result.jsonl', help='Path to the submission file, default is result.jsonl')
parser.add_argument('-s', '--server', help='Judge server URL, if not specified, the global JUDGE_SERVER variable will be used')
parser.add_argument('-k', '--ticket', help='Submission ticket, if not specified, the global TICKET variable will be used')
args = parser.parse_args()
try:
with open(args.result_path, 'r') as file:
data = [json.loads(line.strip()) for line in file if line.strip()]
except Exception as e:
print(e)
exit(1)
submission_id = submit(data, judge_server=args.server, ticket=args.ticket)
if submission_id:
print("Success! Your submission ID is %s." % submission_id)
exit(0)
else:
exit(1)