summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@fri.uni-lj.si>2016-02-25 15:56:26 +0100
committerTimotej Lazar <timotej.lazar@fri.uni-lj.si>2016-02-25 15:56:26 +0100
commit3f9c073475628db7ae400e0df028b6b066ebf26c (patch)
treede460dbad672a81339d1516424324ef6997da4af
parente8e0e93719cf276d1d3df6b47c53f30c5ad83ac8 (diff)
Add a get_solutions(problem_ids) API function
It returns the user’s solutions to given problems.
-rw-r--r--server/handlers.py10
-rw-r--r--server/user_session.py7
-rw-r--r--web/main.js1
3 files changed, 18 insertions, 0 deletions
diff --git a/server/handlers.py b/server/handlers.py
index f427056..d1ad634 100644
--- a/server/handlers.py
+++ b/server/handlers.py
@@ -288,6 +288,15 @@ class GetAttempts(CodeqService):
request.reply({'code': 0, 'data': request.session.get_attempts(language)})
+class GetSolutions(CodeqService):
+ def process(self, request):
+ problem_ids = request.data.get('problem_ids')
+ if problem_ids is None:
+ request.reply({'code': 1, 'message': 'No problem IDs specified'})
+ else:
+ request.reply({'code': 0, 'data': request.session.get_solutions(problem_ids)})
+
+
class GetCurrentSolution(CodeqService):
def process(self, request):
js = request.data
@@ -354,6 +363,7 @@ incoming_handlers = {
'signup': Signup(),
'change_password': ChangePassword(),
'get_attempts': GetAttempts(),
+ 'get_solutions': GetSolutions(),
'get_current_solution': GetCurrentSolution(),
'logout': Logout(),
'activity': Activity(),
diff --git a/server/user_session.py b/server/user_session.py
index 63d3459..af28046 100644
--- a/server/user_session.py
+++ b/server/user_session.py
@@ -433,6 +433,13 @@ class UserSession(object):
results.extend(group_results)
return results
+ def get_solutions(self, problem_ids):
+ uid = self.get_uid()
+ solutions = {s.problem_id: s.content for s in Solution.filter(codeq_user_id=uid)
+ if s.problem_id in problem_ids}
+ # return solutions in the same order as in [problem_pids]
+ return [solutions[pid] for pid in problem_ids if pid in solutions]
+
def send(self, json_obj):
"""Sends a message to the user.
diff --git a/web/main.js b/web/main.js
index 81897cf..3e2c0a7 100644
--- a/web/main.js
+++ b/web/main.js
@@ -323,6 +323,7 @@ var guiHandlers = {
'hint': true,
'test': true,
'get_attempts': true,
+ 'get_solutions': true,
'get_current_solution': true,
'update_settings': true,
'load_problem': true,