summaryrefslogtreecommitdiff
path: root/server/python_session.py
diff options
context:
space:
mode:
authorMartin <martin@leo.fri1.uni-lj.si>2015-09-22 13:13:31 +0200
committerMartin <martin@leo.fri1.uni-lj.si>2015-09-22 13:13:31 +0200
commit68acd82d75106cddd3d4b79365672cad7391c3cd (patch)
treecc9448103c9a21bed694abe6f818a9eed8ecccb6 /server/python_session.py
parent63dff6d770ecb98d7f8f9337449b3450d3abb0de (diff)
parent2c61fec2140da5ec9a5aee8a7d6d3f0f2d3b0897 (diff)
Merge branch 'master' of ssh://212.235.189.51:22122/codeq-server
Diffstat (limited to 'server/python_session.py')
-rw-r--r--server/python_session.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/server/python_session.py b/server/python_session.py
index 7ffb070..85e1d2e 100644
--- a/server/python_session.py
+++ b/server/python_session.py
@@ -6,6 +6,7 @@ import io
import multiprocessing
import os
import queue
+import signal
import subprocess
import sys
import threading
@@ -55,9 +56,15 @@ class PythonSession(object):
p.terminate()
return results
+ def exec(self, program):
+ self._control.put_nowait(('exec', program))
+
def push(self, stdin):
self._control.put_nowait(('push', stdin))
+ def stop(self):
+ self._control.put_nowait(('stop', None))
+
def destroy(self):
self._control.put_nowait(('done', None))
@@ -86,10 +93,9 @@ class PythonSession(object):
problem_module = problems.load_problem(language, problem_group, problem, 'common')
try:
- n_correct, n_all = problem_module.test(self.run, program)
- hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': n_all}}]
+ passed, hints = problem_module.test(self.run, program)
except AttributeError as ex:
- hints = [{'id': 'test_results', 'args': {'passed': 0, 'total': 0}}]
+ hints = [{'id': 'system_error', 'args': {'message': 'test function does not exist'}}]
self._instantiate_and_save_hints(language_module, problem_module, hints)
return hints
@@ -125,9 +131,15 @@ def _interpreter(control, callback):
# Get a control command.
try:
cmd, data = control.get_nowait()
- if cmd == 'push':
+ if cmd == 'exec':
+ exec_str = 'exec("""\\\n{}\n""")\n'.format(data.replace('"', '\\"'))
+ proc.stdin.write(exec_str.encode('utf-8'))
+ proc.stdin.flush()
+ elif cmd == 'push':
proc.stdin.write(data.encode('utf-8'))
proc.stdin.flush()
+ elif cmd == 'stop':
+ proc.send_signal(signal.SIGINT)
elif cmd == 'done':
break
except: