diff options
author | Aleš Smodiš <aless@guru.si> | 2015-08-25 14:20:42 +0200 |
---|---|---|
committer | Aleš Smodiš <aless@guru.si> | 2015-08-25 14:20:42 +0200 |
commit | 88a5cd83b47a9dfb5a832936095c7b99ce0d8179 (patch) | |
tree | a01f0696da1d31201f42242cf61cbc664df65401 /server/user_session.py | |
parent | 816d11b6e238e389f84430196bed19d66f49d751 (diff) |
Implemented methods to fetch a list of available problems and the problem description.
JavaScript no longer parses pythonic problem descriptions, instead they are loaded by server and JSONized.
Diffstat (limited to 'server/user_session.py')
-rw-r--r-- | server/user_session.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/server/user_session.py b/server/user_session.py index b12d6f1..bb4179d 100644 --- a/server/user_session.py +++ b/server/user_session.py @@ -6,6 +6,7 @@ import hashlib import base64 import random from . import prolog_session +from . import problems import db from errors.session import NoSuchSession, AuthenticationFailed @@ -51,6 +52,33 @@ class UserSession(object): self.prolog_session = prolog_session.PrologSession() # lazy init return self.prolog_session + def get_problem_data(self, language, problem_group, problem): + mod = problems.load_problem(language, problem_group, problem, 'en') + conn = db.get_connection() + try: + cur = conn.cursor() + try: + cur.execute("select l.id, l.name, g.id, g.name, p.id, p.name from problem p inner join language l on l.id = p.language_id inner join problem_group g on g.id = p.problem_group_id where l.identifier = %s and g.identifier = %s and p.identifier = %s", (language, problem_group, problem)) + row = cur.fetchone() + problem_id = row[4] + result = { + 'language': {'id': row[0], 'identifier': language, 'name': row[1]}, + 'problem_group': {'id': row[2], 'identifier': problem_group, 'name': row[3]}, + 'problem': {'id': problem_id, 'identifier': problem, 'name': row[5], 'slug': mod.slug, 'description': mod.description, 'hint': mod.hint} + } + cur.execute("select content from solution where problem_id = %s and codeq_user_id = %s", (problem_id, self.uid)) + row = cur.fetchone() + if row: + result['solution'] = row[0] + else: + result['solution'] = '' + return result + finally: + cur.close() + finally: + conn.commit() + db.return_connection(conn) + def __del__(self): # no locking needed if GC is removing us, as there cannot be any concurrent access by definition if hasattr(self, 'prolog_session') and (self.prolog_session is not None): |