summaryrefslogtreecommitdiff
path: root/server/user_session.py
diff options
context:
space:
mode:
authorAleš Smodiš <aless@guru.si>2015-08-25 14:20:42 +0200
committerAleš Smodiš <aless@guru.si>2015-08-25 14:20:42 +0200
commit88a5cd83b47a9dfb5a832936095c7b99ce0d8179 (patch)
treea01f0696da1d31201f42242cf61cbc664df65401 /server/user_session.py
parent816d11b6e238e389f84430196bed19d66f49d751 (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.py28
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):