summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/python_session.py4
-rw-r--r--wsgi_server.py21
2 files changed, 24 insertions, 1 deletions
diff --git a/server/python_session.py b/server/python_session.py
index 161ba0d..4c4a781 100644
--- a/server/python_session.py
+++ b/server/python_session.py
@@ -28,6 +28,8 @@ class PythonSession(object):
_m.connect()
self._python = _m.Python()
+ self.create()
+
def run(self, code=None, inputs=None, timeout=1.0):
with self._access_lock:
return self._python.run(code, inputs, timeout)
@@ -40,7 +42,7 @@ class PythonSession(object):
def pull(self):
with self._access_lock:
if self._interpreter is None:
- return 'Python is not running'
+ return None
return self._python.pull(self._interpreter)
def push(self, stdin):
diff --git a/wsgi_server.py b/wsgi_server.py
index fda576b..324f338 100644
--- a/wsgi_server.py
+++ b/wsgi_server.py
@@ -143,6 +143,24 @@ class Query(CodeqService):
session.update_solution(problem_id, trace, program)
return result
+# Pull stdout/stderr from the session's Python interpreter.
+class PythonPull(CodeqService):
+ def process(self, js, session):
+ python = session.get_python()
+ output = python.pull()
+ return {'code': 0, 'message': 'ok', 'terminal': {'text': output if output else ''}}
+
+# Push stdin to the session's Python interpreter.
+class PythonPush(CodeqService):
+ def process(self, js, session):
+ text = js.get('text')
+ if text is None:
+ return {'code': 1, 'message': 'No input specified'}
+
+ python = session.get_python()
+ python.push(text)
+ return {'code': 0, 'message': 'ok'}
+
class Hint(CodeqService):
def process(self, js, session):
language = js.get('language')
@@ -211,6 +229,9 @@ api.add_route('/activity', activity)
query = Query()
api.add_route('/query', query)
+api.add_route('/python_pull', PythonPull())
+api.add_route('/python_push', PythonPush())
+
hint = Hint()
api.add_route('/hint', hint)