예제 #1
0
def save():
 userId = None
 
 nodes = request.get_json().get("nodes")
 input = request.get_json().get("input")
 output = request.get_json().get("out")
 problemId = request.get_json().get("problemId")
 solutionId = request.get_json().get("solutionId")

 if session.has_key("account.id"):
  userId = session["account.id"]

 solution = None
 problem = None

 if request.get_json().has_key("problemId"):
  problem = Problem.query.filter_by(id = problemId).first()
 else:
  for value in input:
   if not (value["active"] == 0 or value["active"] == 1):
    return jsonify(err = [{'type':'danger', 'out' : "illegal data"}])
  problem = Problem(
  nodes[0][0].get("state"),nodes[0][1].get("state"),nodes[0][2].get("state"),nodes[0][3].get("state"),
  nodes[1][0].get("state"),nodes[1][1].get("state"),nodes[1][2].get("state"),nodes[1][3].get("state"),
  nodes[2][0].get("state"),nodes[2][1].get("state"),nodes[2][2].get("state"),nodes[2][3].get("state"),
  int(input[0]["active"]),int(input[1]["active"]),int(input[2]["active"]),int(input[3]["active"]),
  int(output[0]["active"]),int(output[1]["active"]),int(output[2]["active"]),int(output[3]["active"]),userId)
  
  if not problem.isValid():
   return jsonify(err = [{'type':'danger', 'out' : "illegal data"}])
  db.session.add(problem)
  db.session.flush()

 s = Solution.query.filter(Solution.userId == userId, Solution.id == solutionId ).first()
 if(s == None or userId == None):
  solution = Solution( 
   nodes[0][0].get("text"),nodes[0][1].get("text"),nodes[0][2].get("text"),nodes[0][3].get("text"),
   nodes[1][0].get("text"),nodes[1][1].get("text"),nodes[1][2].get("text"),nodes[1][3].get("text"),
   nodes[2][0].get("text"),nodes[2][1].get("text"),nodes[2][2].get("text"),nodes[2][3].get("text"),problem.id,userId)
  db.session.add(solution)
 else:
  solution = s
  solution.__init__(
   nodes[0][0].get("text"),nodes[0][1].get("text"),nodes[0][2].get("text"),nodes[0][3].get("text"),
   nodes[1][0].get("text"),nodes[1][1].get("text"),nodes[1][2].get("text"),nodes[1][3].get("text"),
   nodes[2][0].get("text"),nodes[2][1].get("text"),nodes[2][2].get("text"),nodes[2][3].get("text"),problem.id,userId)

 if solution.isEmpty():
  return jsonify(err = [{'type':'danger', 'out' : "no solution submitted"}])

 db.session.commit()
 return jsonify(solutionId = solution.id)