def post(self): user = self.current_user if user["user_class"] < 1: return problem = self.get_argument("problem",None) if not problem: self.write(fx.gen_result("1","Missing data")) return cursor = db.problems.find({"problem":{"$in":[problem]},"end":{"$lt":now()}}) print list(cursor) n = None #n = cursor.count() if n: self.write(fx.gen_result("2","Problem is used",list(cursor))) return result = db.problems.find_one({"name":problem})['archive'] result = not result db.problems.update({"name":problem},{"$set":{"archive":result}}) if result: self.write(fx.gen_result("0","Problem added to archive")) else: self.write(fx.gen_result("0","Problem removed from archive"))
def add_gesture(self,name,training_data): if(self.get_gesture(name)): return fx.gen_result(1,"Gesture already exists") data = dict( name = name, training_data = training_data, trained = False ) data["class"] = self.db.gestures.find().count()+1 self.db.gestures.insert(data) return fx.gen_result(0,"Gesture added")
def post(self): if self.current_user['user_class'] < 1: self.write(fx.gen_result("1","Non authorized")) return problem = self.get_argument("problem",None) testcase = self.get_argument("testcase",None) testcase = int(testcase)-1 value = self.get_argument("value",None) if not problem or not value: self.write(fx.gen_result("1","Missing data")) return query = db.problems.update({'name':problem},{'$set':{'testcases.'+str(testcase): value} }) self.write(fx.gen_result("0","Ok"))
def signup(self): if self.user_exists(): return fx.gen_result("1","User exists") user = dict( name = self.name, password = fx.hash(self.password), email = self.email, user_class = self.user_class ) db.users.insert(user) curr_dir = "data/users"+"/"+self.email+"/" try: os.mkdir(curr_dir) except OSError: pass return fx.gen_result("0","Signup Ok. Now you can <a href='#' onclick=\"show_box('login-box'); return false;\"> login.</a>")
def post(self): if self.current_user['user_class'] == 0: self.redirect("/home") return type = self.get_argument("type",None) if not type: self.write(fx.gen_result("1","No type specified")) return if type == "submission": submission = self.get_argument("submission",None) if not submission: self.write(fx.gen_result("2","No submission specified")) return db.submissions.update({"id":int(submission)},{"$set":{"status":"pending"}})
def get(self): if self.current_user['user_class'] < 1: self.write(fx.gen_result("1","Non authorized")) return problem = self.get_argument("problem",None) if not problem: self.write(fx.gen_result("2","No problem")) return problem = db.problems.find_one({"name":problem}) if not problem: self.write(fx.gen_result("3","DB Error")) return result = fx.gen_result("0","Ok",problem['testcases']) self.write(result)
def authenticate(self): user = dict( email = str(self.email), password = fx.hash(self.password) ) user = db.users.find_one(user) if not(user): return fx.gen_result("1","Failed") self.name = user["name"] self.email = user["email"] self.user_class = user["user_class"] data = dict( name = self.name, email = self.email, user_class = self.user_class ) return fx.gen_result("0", "Login ok",data)
def add(self): problem_data = dict( name = self.name, author = self.author, testcases = self.testcases, timelimit = self.timelimit, memorylimit = self.memorylimit, archive = self.archive ) db.problems.insert(problem_data) return fx.gen_result("0","Problem added")
def add(self): contest_data = dict( name = self.name, start = int(self.start), end = int(self.end), author = self.author, problems = self.problems, enrolled = [] ) db.contests.insert(contest_data) return fx.gen_result("0","Contest added")
def post(self): user = self.current_user if user["user_class"] < 1: return data = urllib.unquote(self.request.body).decode('utf8').split('&') name = self.get_argument('name',None) start_date = self.get_argument("start_date",None) start_time = self.get_argument("start_time",None) end_date = self.get_argument("end_date",None) end_time = self.get_argument("end_time",None) if not start_date or not start_time or not end_date or not end_time or not name: self.write(fx.gen_result("1","Missing data")) return #get problems problems = [] for item in data: this = item.split('=') if this[0] == "problems": problems.append(this[1]) start = start_date+" "+start_time start = datetime.datetime.strptime(start,"%d-%m-%Y %H:%M:%S").strftime("%s") end = end_date+" "+end_time end = datetime.datetime.strptime(end,"%d-%m-%Y %H:%M:%S").strftime("%s") contest_data = dict( author = self.current_user, name = name, start = start, end = end, problems = problems, ) contest = models.Contest(**contest_data) if contest.exists(): self.write(fx.gen_result("1","Contests exists")) return result = contest.add() self.write(result)
def post(self): user = self.current_user if user["user_class"] < 1: return required = ["name","memorylimit","timelimit","testcases"] problem_data = dict( name = self.get_argument('name',None), memorylimit = self.get_argument('memorylimit',None), timelimit = self.get_argument('timelimit',None), author = self.current_user ) try: problem_data['testcases'] = self.request.files['testcases'][0]["body"] except: pass for field in required: if not problem_data[field]: self.write(fx.gen_result("1","Missing data")) return problem = models.Problem(**problem_data) if problem.exists(): self.write(fx.gen_result("2","Problem exists")) return problem.set_dir() if problem_data['testcases']: result = problem.prepare_testcases() if result['status'] != "0": self.write(fx.gen_result(**result)) return result = problem.add() self.write(result)
def get(self): problem = self.get_argument("problem",None) if not problem: self.write(fx.gen_result("1","Problem not found")) return n = db.problems.find_one({"name":problem,"archive":True}) if not n: self.write(fx.gen_result("2","Problem not archived")) return file_name = 'file.ext' buf_size = 4096 self.set_header('Content-Type', 'application/zip') self.set_header('Content-Disposition', 'attachment; filename=' + problem+".zip") with open("data/problems/"+problem+"/testcases.zip", 'r') as f: while True: data = f.read(buf_size) if not data: break self.write(data) self.finish()
def put(self): pprint(self.request.body) submission = dict() try: data = json.loads(self.request.body) except: self.write(fx.gen_result("1","Wrong request")) return fields = ["email","contest","language","source","problem"] if not set(fields).issubset(data): self.write(fx.gen_result("2","Missing data")) return submission['user'] = {'email':data['email'], 'user_class':0, 'name':data['email']} n = db.users.find({"email":submission['user']['email']}).count() if n == 0: self.write(fx.gen_result("3","No user")) return filename = data['problem'] submission['contest'] = data['contest'] submission['problem'] = filename submission['lang'] = data['language'] n = db.contests.find({"problems":submission['problem'],"name":submission['contest']}).count() if n == 0: self.write(fx.gen_result("5","No such problem")) return if not (submission['lang'] in ["pas","c","cpp"]): self.write(fx.gen_result("6","Wrong language")) return submission['time'] = now() submission['id'] = int(fx.get_submission_id()) submission['body'] = data['source'] submission_obj = models.Submission(**submission) result = submission_obj.validate() if not result: self.write(fx.gen_result("7","Security alert")) return result = submission_obj.add() print "\n" pprint(submission) f = open("data/users/"+submission["user"]['email']+"/"+str(int(submission["id"]))+"."+submission["lang"],"w") f.write(submission['body']) f.close() self.write(fx.gen_result(**result))
def get(self): id = self.get_argument("id",None) if not id: submissions = db.submissions.find({"user.email":self.current_user['email']}).sort("time",-1) self.write(dumps(list(submissions))) return submission = db.submissions.find_one({"id":int(id)}) if not submission: self.write(fx.gen_result("1","Error")) return field = "result" type = self.get_argument("type",None) if self.current_user['user_class'] == 1 and not type: field = "data" if self.request.headers.get('Referer').split("/")[-2] == "archive": field = "data" if not submission[field]: field = "result" self.write(fx.gen_result("0","Success",submission[field]))
def post(self): email = self.get_argument("email",None) password = self.get_argument("password",None) if not email or not password: self.finish(fx.gen_result("1","Missing data")) return user_data = dict( email = email, password = password, ) user = models.User(**user_data) result = json.loads(user.authenticate()) if(result['status'] != '0'): self.write(json.dumps(result)) return self.set_secure_cookie("user", tornado.escape.json_encode(result["data"])) self.write(json.dumps(result))
def post(self): #print self.request.body name = self.get_argument("name",None) email = self.get_argument("email",None) password = self.get_argument("password",None) if not name or not email or not password: self.finish(fx.gen_result("1","Missing data")) return user_data = dict( name = name, email = email, password = password ) user = models.User(**user_data) result = user.signup() print result self.write(result)
def post(self): curr_time = now() last = db.submission.find_one({"user":self.current_user}).sort("_id",-1) if last and now()-int(last["time"]) < 60: self.write(fx.gen_result("6","Wait")) return try: source = self.request.files['source'] except: self.write(fx.gen_result("2","No source")) return contest = self.get_argument("contest",None) filename = source[0]['filename'].split('.') problem = filename[0] if len(filename) < 2: lang = "exe" else: lang = filename[1] body = source[0]['body'] print problem if not (lang in ["pas","c","cpp"]): self.write(fx.gen_result("4","Wrong language")) return if contest: n = db.contests.find({"problems":problem,"name":contest}).count() else: n = db.problems.find({"name":problem,"archive":True}).count() if n == 0: self.write(fx.gen_result("5","No such problem")) return time = now() if contest: n = db.contests.find({ "start" : { "$lte": time }, "end" : { "$gte" : time } }).count() if n == 0: self.write(fx.gen_result("5","Too late")) return submission_data = dict( user = self.current_user, problem = problem, time = time, contest = contest, lang = lang, id = fx.get_submission_id(), body = body ) submission = models.Submission(**submission_data) result = submission.validate() if not result: self.write(fx.gen_result("1","Security alert")) return result = submission.add() os.umask(0) f = open("data/users/"+self.current_user["email"]+"/"+str(int(submission_data["id"]))+"."+submission_data["lang"],"w") f.write(body) f.close() self.write(fx.gen_result(**result)) @tornado.web.authenticated def get(self): id = self.get_argument("id",None) if not id: submissions = db.submissions.find({"user.email":self.current_user['email']}).sort("time",-1) self.write(dumps(list(submissions))) return submission = db.submissions.find_one({"id":int(id)}) if not submission: self.write(fx.gen_result("1","Error")) return field = "result" type = self.get_argument("type",None) if self.current_user['user_class'] == 1 and not type: field = "data" if self.request.headers.get('Referer').split("/")[-2] == "archive": field = "data" if not submission[field]: field = "result" self.write(fx.gen_result("0","Success",submission[field]))
def post(self): curr_time = now() last = db.submissions.find_one({"user":self.current_user},sort=[("time", pymongo.DESCENDING)]) if last and curr_time-int(last["time"]) < 20: self.write(fx.gen_result("6","Wait for 20 seconds")) return try: source = self.request.files['source'] if len(source[0]['body']) > 1024*1024: self.write(fx.gen_result("6","File too big")) return except: self.write(fx.gen_result("2","No source")) return contest = self.get_argument("contest",None) filename = source[0]['filename'].split('.') problem = filename[0] if len(filename) < 2: lang = "exe" else: lang = filename[1] body = source[0]['body'] print problem if not (lang in ["pas","c","cpp"]): self.write(fx.gen_result("4","Wrong language")) return if contest: n = db.contests.find({"problems":problem,"name":contest}).count() else: n = db.problems.find({"name":problem,"archive":True}).count() if n == 0: self.write(fx.gen_result("4","No such problem")) return time = now() if contest: n = db.contests.find({ "start" : { "$lte": time }, "end" : { "$gte" : time } }).count() if n == 0: self.write(fx.gen_result("5","Too late")) return submission_data = dict( user = self.current_user, problem = problem, time = time, contest = contest, lang = lang, id = fx.get_submission_id(), body = body ) submission = models.Submission(**submission_data) result = submission.validate() if not result: self.write(fx.gen_result("1","Security alert")) return result = submission.add() os.umask(0) f = open("data/users/"+self.current_user["email"]+"/"+str(int(submission_data["id"]))+"."+submission_data["lang"],"w") f.write(body) f.close() self.write(fx.gen_result(**result))