From 29892da19ae7c1b2777f48bce4674262d2a19cef Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Fri, 28 Aug 2015 17:44:51 +0200 Subject: Add a hint service for Prolog --- server/prolog_session.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'server/prolog_session.py') diff --git a/server/prolog_session.py b/server/prolog_session.py index ff44a56..d83d62d 100644 --- a/server/prolog_session.py +++ b/server/prolog_session.py @@ -88,6 +88,27 @@ class PrologSession(object): prolog.engine.destroy(self._engine_id) self._engine_id = None + def hint(self, user_id, problem_id, program): + language, problem_group, problem = Problem.identifier(problem_id) + + # If compilation fails just return compiler messages. + engine_id, output = prolog.engine.create(code=program) + if engine_id is not None: + prolog.engine.destroy(engine_id) + if 'error' in map(operator.itemgetter(0), output): + errors_msg = '\n'.join(['{}: {}'.format(m_type, m_text) for m_type, m_text in output]) + return [{'id': 'syntax_error', 'args': {'messages': errors_msg}}] + + # Otherwise try problem-specific hints. + problem_module = problems.load_problem(language, problem_group, problem, 'common') + if hasattr(problem_module, 'hint'): + hints = problem_module.hint(program) + if hints: + return hints + + # Finally return a generic "try thinking a bit" message. + return [{'id': 'no_hint'}] + def test(self, user_id, problem_id, program): language, problem_group, problem = Problem.identifier(problem_id) problem_module = problems.load_problem(language, problem_group, problem, 'common') -- cgit v1.2.1