Skip to content

Commit 45f5f32

Browse files
committed
changes for v0.3
1 parent 282ed9e commit 45f5f32

File tree

4 files changed

+125
-110
lines changed

4 files changed

+125
-110
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ script:
1111
- python tests.py
1212
- isort --check-only --recursive coderunner
1313
- black --check --diff coderunner
14-
- flake8 coderunner --max-line-length=88
15-
- pylint coderunner --disable=bad-continuation,invalid-name
14+
- flake8 coderunner --max-line-length=88 --ignore=F401
15+
- pylint coderunner --disable=bad-continuation,invalid-name,too-many-instance-attributes

coderunner/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
from coderunner.coderunner import Run
1+
"""Import Run() for initializing program data"""
2+
from coderunner.coderunner import Run

coderunner/coderunner.py

Lines changed: 113 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
1-
import time
2-
import sys
1+
"""coderunner helps you run your programs on Judge0's Server"""
32
import requests
43

54
# language IDs on judge0, see README.md
6-
languages = {
7-
"C++" : 10,
8-
"Java" : 27,
9-
"Python": 34,
10-
"C": 4
11-
}
5+
languages = {"C++": 10, "Java": 27, "Python": 34, "C": 4}
126

137
api_params = {
148
"number_of_runs": "1",
@@ -18,106 +12,119 @@
1812
"memory_limit": "128000",
1913
"stack_limit": "64000",
2014
"max_processes_and_or_threads": "30",
21-
"enable_per_process_and_thread_time_limit": 'false',
22-
"enable_per_process_and_thread_memory_limit": 'true',
23-
"max_file_size": "1024"
15+
"enable_per_process_and_thread_time_limit": "false",
16+
"enable_per_process_and_thread_memory_limit": "true",
17+
"max_file_size": "1024",
2418
}
2519

2620
API_URL = "https://api.judge0.com/submissions/"
2721

28-
class Run:
29-
30-
def __init__(self, program_name: str, lang: str, output: str, inp: str = None):
31-
self.program_name = program_name
32-
self.lang = lang
33-
if lang not in languages:
34-
raise ValueError(f"{lang} is not a supported languige {languages.keys()}")
35-
36-
self.output = output
37-
self.inp = inp
38-
self.language_id = languages[lang]
39-
40-
def __readCode(self):
41-
"""
42-
Read Source Code & return as string
43-
"""
44-
with open(self.program_name, 'r') as myfile:
45-
data = myfile.read()
46-
return data
47-
48-
49-
def __readExpectedOutput(self):
50-
with open(self.output, 'r') as out:
51-
data = out.read()
52-
return data
53-
54-
55-
def __readStandardInput(self):
56-
with open(self.inp, 'r') as out:
57-
data = out.read()
58-
return data
59-
60-
61-
def __readStatus(self, token: str):
62-
"""
63-
Check Submission status
64-
"""
65-
while True:
66-
req = requests.get(API_URL + token['token'])
67-
self.__response = req.json()
68-
self.__memory = self.__response["memory"]
69-
self.__time = self.__response["time"]
70-
status = self.__response['status']['description']
71-
if status != "Processing" and status != "In Queue":
72-
break
73-
74-
if status == "Accepted":
75-
self.__stdout = self.__response["stdout"]
76-
return status
77-
else:
78-
return self.__response['status']['description']
79-
80-
def __submit(self):
81-
if self.inp != None:
82-
api_params['stdin'] = self.inp
83-
84-
api_params['expected_output'] = self.output
85-
api_params['language_id'] = self.language_id
86-
api_params['source_code'] = self.program_name
87-
88-
res = requests.post(API_URL, data=api_params)
89-
token = res.json()
90-
return token
91-
92-
93-
def getStandardOutput(self):
94-
return self.__stdout
95-
96-
97-
def getMemory(self):
98-
return self.__memory
99-
100-
101-
def getError(self):
102-
if self.__response['stderr'] != '':
103-
return self.__response['stderr']
104-
return None
105-
106-
107-
def getTime(self):
108-
return self.__time
109-
110-
111-
def getStatus(self):
112-
self.program_name = self.__readCode()
113-
self.output = self.__readExpectedOutput()
114-
115-
if self.inp != None:
116-
self.inp = self.__readStandardInput()
117-
token = self.__submit()
118-
status = self.__readStatus(token)
119-
else:
120-
token = self.__submit()
121-
status = self.__readStatus(token)
122-
return status
12322

23+
class Run:
24+
"""
25+
Initialize program data like name,expected input/output etc
26+
"""
27+
28+
def __init__(self, program_name: str, lang: str, output: str, inp: str = None):
29+
self.program_name = program_name
30+
self.lang = lang
31+
if lang not in languages:
32+
raise ValueError(f"{lang} is not a supported language {languages.keys()}")
33+
34+
self.output = output
35+
self.inp = inp
36+
self.language_id = languages[lang]
37+
self.__response = None
38+
self.__memory = None
39+
self.__time = None
40+
self.__stdout = None
41+
42+
def __readCode(self):
43+
"""
44+
Read Source Code & return as string
45+
"""
46+
with open(self.program_name, "r") as myfile:
47+
data = myfile.read()
48+
return data
49+
50+
def __readExpectedOutput(self):
51+
with open(self.output, "r") as out:
52+
data = out.read()
53+
return data
54+
55+
def __readStandardInput(self):
56+
with open(self.inp, "r") as out:
57+
data = out.read()
58+
return data
59+
60+
def __readStatus(self, token: str):
61+
"""
62+
Check Submission status
63+
"""
64+
while True:
65+
req = requests.get(API_URL + token["token"])
66+
self.__response = req.json()
67+
self.__memory = self.__response["memory"]
68+
self.__time = self.__response["time"]
69+
status = self.__response["status"]["description"]
70+
if status not in ("Processing", "In Queue"):
71+
break
72+
73+
if status == "Accepted":
74+
self.__stdout = self.__response["stdout"]
75+
return status
76+
return self.__response["status"]["description"]
77+
78+
def __submit(self):
79+
if self.inp is not None:
80+
api_params["stdin"] = self.inp
81+
82+
api_params["expected_output"] = self.output
83+
api_params["language_id"] = self.language_id
84+
api_params["source_code"] = self.program_name
85+
86+
res = requests.post(API_URL, data=api_params)
87+
token = res.json()
88+
return token
89+
90+
def getStandardOutput(self):
91+
"""
92+
Return the standard output of the program
93+
"""
94+
return self.__stdout
95+
96+
def getMemory(self):
97+
"""
98+
Return the memory used by the program (in bytes)
99+
"""
100+
return self.__memory
101+
102+
def getError(self):
103+
"""
104+
Return any error occured during program execution
105+
"""
106+
if self.__response["stderr"] != "":
107+
return self.__response["stderr"]
108+
return None
109+
110+
def getTime(self):
111+
"""
112+
Return execution time used by the program
113+
"""
114+
return self.__time
115+
116+
def getStatus(self):
117+
"""
118+
Submits the program on Judge0's server and returns its status
119+
"""
120+
self.program_name = self.__readCode()
121+
self.output = self.__readExpectedOutput()
122+
123+
if self.inp is not None:
124+
self.inp = self.__readStandardInput()
125+
token = self.__submit()
126+
status = self.__readStatus(token)
127+
else:
128+
token = self.__submit()
129+
status = self.__readStatus(token)
130+
return status

setup.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,20 @@
55

66
setuptools.setup(
77
name="coderunner",
8-
version="0.2",
8+
version="0.3",
99
author="Bhupesh Varshey",
1010
author_email="[email protected]",
1111
description="Judge0 API Interface written in Python",
12+
keywords='judge0 coderunner judge0-api codeclassroom',
1213
long_description=long_description,
1314
long_description_content_type="text/markdown",
1415
url="https://github.com/codeclassroom/CodeRunner",
16+
project_urls={
17+
"Documentation": "https://github.com/codeclassroom/CodeRunner/wiki/Documentation---coderunner-v0.3",
18+
"Source Code": "https://github.com/codeclassroom/CodeRunner",
19+
"Funding": "https://www.patreon.com/bePatron?u=18082750",
20+
"Say Thanks!": "https://github.com/codeclassroom/CodeRunner/issues/new?assignees=&labels=&template=---say-thank-you.md&title=",
21+
},
1522
packages=setuptools.find_packages(),
1623
install_requires=[
1724
'requests',

0 commit comments

Comments
 (0)