diff options
author | Martin <martin@leo.fri1.uni-lj.si> | 2015-09-22 13:13:31 +0200 |
---|---|---|
committer | Martin <martin@leo.fri1.uni-lj.si> | 2015-09-22 13:13:31 +0200 |
commit | 68acd82d75106cddd3d4b79365672cad7391c3cd (patch) | |
tree | cc9448103c9a21bed694abe6f818a9eed8ecccb6 /server/python_session.py | |
parent | 63dff6d770ecb98d7f8f9337449b3450d3abb0de (diff) | |
parent | 2c61fec2140da5ec9a5aee8a7d6d3f0f2d3b0897 (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.py | 20 |
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: |