summaryrefslogtreecommitdiff
path: root/server/python_session.py
diff options
context:
space:
mode:
authorAleš Smodiš <aless@guru.si>2015-10-04 19:43:09 +0200
committerAleš Smodiš <aless@guru.si>2015-10-04 19:43:09 +0200
commit361f8245079b625560449324faf111ed6fcf3b1b (patch)
treea484991b6e3456545d6d5437a17201ab0a8e7b8a /server/python_session.py
parent8c61a1980c973c649a2d9b3b9da67f2a680f4139 (diff)
Unification of language session implementations. Added load_problem and end_problem actions so handlers get appropriately created and destroyed upon loading and unloading the problem solving screen.
Diffstat (limited to 'server/python_session.py')
-rw-r--r--server/python_session.py16
1 files changed, 9 insertions, 7 deletions
diff --git a/server/python_session.py b/server/python_session.py
index 55a4812..91ce1e8 100644
--- a/server/python_session.py
+++ b/server/python_session.py
@@ -12,13 +12,12 @@ import sys
import threading
import time
-import server.user_session
+import server
from db.models import Problem
-from . import problems
__all__ = ['PythonSession']
-class PythonSession(object):
+class PythonSession(server.LanguageSession):
"""Abstracts a Python session.
Only public methods are available to the outside world due to the use of multiprocessing managers.
Therefore prefix any private methods with an underscore (_).
@@ -73,8 +72,8 @@ class PythonSession(object):
def hint(self, sid, problem_id, program):
language, problem_group, problem = Problem.get_identifier(problem_id)
- language_module = problems.load_language(language, 'common')
- problem_module = problems.load_problem(language, problem_group, problem, 'common')
+ language_module = server.problems.load_language(language, 'common')
+ problem_module = server.problems.load_problem(language, problem_group, problem, 'common')
hints = []
if hasattr(language_module, 'hint'):
@@ -89,8 +88,8 @@ class PythonSession(object):
def test(self, sid, problem_id, program):
language, problem_group, problem = Problem.get_identifier(problem_id)
- language_module = problems.load_language(language, 'common')
- problem_module = problems.load_problem(language, problem_group, problem, 'common')
+ language_module = server.problems.load_language(language, 'common')
+ problem_module = server.problems.load_problem(language, problem_group, problem, 'common')
try:
passed, hints = problem_module.test(self.run, program)
@@ -209,3 +208,6 @@ def _run_exec(conn, code, expr=None, stdin=''):
sys.stdout.close()
sys.stderr.close()
conn.send((result, out, err, exc))
+
+server.language_session_handlers['python'] = lambda user_session, problem_id, language_identifier, group_identifier, problem_identifier: PythonSession(lambda text: user_session.send({'event': 'terminal_output', 'text': text}))
+