def get_notice(self, noticeid): cur = self.db.cursor() sqlstr = ('SELECT "noticeid", "uid", "title", "content", "time", ' '"noticemodid", "metadata", "unread" FROM "NOTICE" WHERE ' '"noticeid" = %s;') sqlarr = (noticeid, ) cur.execute(sqlstr, sqlarr) ret = None for data in cur: ret = {} ret['noticeid'] = data[0] ret['uid'] = data[1] ret['title'] = data[2] ret['content'] = data[3] ret['time'] = data[4] ret['noticemodid'] = data[5] ret['metadata'] = data[6] ret['unread'] = data[7] if ret == None: return None uid = mod.UserMg.get_current_uid() if uid != ret['uid']: TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_EXECUTE) return ret
def get_user_info_by_uid(self, uid): cur = self.db.cursor() sqlstr = ('SELECT "uid", "username", "nickname", "email", "avatar", ' '"aboutme", "cover" FROM "USER" WHERE "uid" = %s;') sqlarr = (uid, ) cur.execute(sqlstr, sqlarr) ret = None for data in cur: ret = {} ret['uid'] = data[0] ret['username'] = data[1] ret['nickname'] = data[2] ret['email'] = data[3] ret['avatar'] = data[4] ret['aboutme'] = data[5] ret['cover'] = data[6] uid = self.get_current_uid() if uid != ret['uid']: try: TOJAuth.check_access_func( self._accessid, TOJAuth.ACCESS_EXECUTE) except Exception: del ret['email'] return ret
def _set_mode(self, modeid, content, testmodeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('UPDATE "PMOD_TEST_MODE" SET "content" = %s, ' '"testmodeid" = %s WHERE "proid" = %s AND "modeid" = %s;') sqlarr = (content, testmodeid, self._proid, modeid) cur.execute(sqlstr, sqlarr)
def _del_mode(self, modeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('DELETE FROM "PMOD_TEST_MODE" WHERE "proid" = %s AND ' '"modeid" = %s;') sqlarr = (self._proid, modeid) cur.execute(sqlstr, sqlarr)
def set_problem(self, proid, title): accessid = self.get_accessid_by_proid(proid) TOJAuth.check_access_func(accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('UPDATE "PROBLEM" SET "title" = %s WHERE "proid" = %s;') sqlarr = (title, proid) cur.execute(sqlstr, sqlarr)
def _add_testmode(self, testmodename, timelimit, memlimit): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('INSERT INTO "PMOD_TEST_TESTMODE" ("proid", "testmodename", ' '"timelimit", "memlimit") VALUES (%s, %s, %s, %s);') sqlarr = (self._proid, testmodename, timelimit, memlimit) cur.execute(sqlstr, sqlarr)
def _set_testmode(self, testmodeid, testmodename, timelimit, memlimit): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('UPDATE "PMOD_TEST_TESTMODE" SET "testmodename" = %s, ' '"timelimit" = %s, "memlimit" = %s WHERE "proid" = %s AND ' '"testmodeid" = %s;') sqlarr = (testmodename, timelimit, memlimit, self._proid, testmodeid) cur.execute(sqlstr, sqlarr)
def set_square(self, sqid, title, start_time, end_time, intro, logo): accessid = self.get_accessid_by_sqid(sqid) TOJAuth.check_access_func(accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('UPDATE "SQUARE" SET "title" = %s, "start_time" = %s, ' '"end_time" = %s, "intro" = %s, "logo" = %s ' 'WHERE "sqid" = %s;') sqlarr = (title, start_time, end_time, intro, logo, sqid) cur.execute(sqlstr, sqlarr)
def _set_square_category(self, sqid, category): sq_accessid = self.get_accessid_by_sqid(sqid) TOJAuth.check_access_func(sq_accessid, TOJAuth.ACCESS_WRITE) if category == []: category = [0] cur = self.db.cursor() sqlstr = ('UPDATE "SQUARE" SET "cateid" = %s WHERE "sqid" = %s;') sqlarr = (category, sqid) cur.execute(sqlstr, sqlarr)
def _list_testdata(self): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) with TOJAuth.change_current_iden(self._idendesc): testdata_list = mod.TestdataMg.instance._list_testdata(self._proid) for test in testdata_list: del test['blobname'] del test['proid'] return testdata_list
def _create_testdata(self, info, filekey, expire): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) # Upload file blobname = 'TEST_BLOBNAME' with TOJAuth.change_current_iden(self._idendesc): testid = mod.TestdataMg.instance._add_testdata( blobname, expire, self._proid, info) return testid
def _add_mode(self, modeid, content, testmodeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqltab = ('INSERT INTO "PMOD_TEST_MODE" (') sqlcol = ('"proid", "content", "testmodeid"') sqlval = (') VALUES (%s, %s, %s') sqlend = (');') sqlarr = [self._proid, content, testmodeid] if modeid != None: sqlcol = sqlcol + ', "modeid"' sqlval = sqlval + ', %s' sqlarr.append(modeid) sqlstr = sqltab + sqlcol + sqlval + sqlend cur.execute(sqlstr, sqlarr)
def _list_mode(self): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('SELECT "modeid", "testmodeid" FROM "PMOD_TEST_MODE" ' 'WHERE "proid" = %s ORDER BY "modeid" ASC;') sqlarr = (self._proid, ) cur.execute(sqlstr, sqlarr) mode_list = [] for data in cur: obj = {} obj['modeid'] = data[0] obj['testmodeid'] = data[1] mode_list.append(obj) return mode_list
def _get_mode_by_modeid(self, modeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('SELECT "proid", "modeid", "content", "testmodeid" FROM ' '"PMOD_TEST_MODE" WHERE "proid" = %s AND "modeid" = %s;') sqlarr = (self._proid, modeid) cur.execute(sqlstr, sqlarr) mode = None for data in cur: mode = {} mode['proid'] = data[0] mode['modeid'] = data[1] mode['content'] = data[2] mode['testmodeid'] = data[3] return mode
def _get_testmode(self, testmodeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('SELECT "testmodeid", "testmodename", "timelimit", ' '"memlimit" FROM "PMOD_TEST_TESTMODE" WHERE "proid" = %s AND ' '"testmodeid" = %s;') sqlarr = (self._proid, testmodeid) cur.execute(sqlstr, sqlarr) testmode = None for data in cur: testmode = {} testmode['testmodeid'] = data[0] testmode['testmodename'] = data[1] testmode['timelimit'] = data[2] testmode['memlimit'] = data[3] return testmode
def _set_problem_hidden(self, proid, hidden): accessid = self.get_accessid_by_proid(proid) TOJAuth.check_access_func(accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('UPDATE "PROBLEM" SET "hidden" = %s WHERE "proid" = %s;') sqlarr = (hidden, proid) cur.execute(sqlstr, sqlarr) if hidden == True: TOJAuth.instance.set_access_list( accessid, TOJAuth.ROLEID_GUEST, TOJAuth.ACCESS_READ) TOJAuth.instance.set_access_list( accessid, TOJAuth.ROLEID_USER_GROUP, TOJAuth.ACCESS_READ) else: TOJAuth.instance.del_access_list( accessid, TOJAuth.ROLEID_GUEST) TOJAuth.instance.del_access_list( accessid, TOJAuth.ROLEID_USER_GROUP)
def _delete_problem(self, proid): accessid = self.get_accessid_by_proid(proid) TOJAuth.check_access_func(accessid, TOJAuth.ACCESS_DELETE) proinfo = self.get_problem_info_by_proid(proid) pmodname = proinfo['pmodname'] pmod = mod.load_pmod(pmodname) with TOJAuth.change_current_iden(self._idendesc): self.unload_problem(proid) pmod.delete_problem_data(proid) TOJAuth.instance.del_access(accessid) cur = self.db.cursor() sqlstr = ('DELETE FROM "PROBLEM" WHERE "proid" = %s;') sqlarr = (proid, ) cur.execute(sqlstr, sqlarr)
def _set_problem_hidden(self, proid, hidden): accessid = self.get_accessid_by_proid(proid) TOJAuth.check_access_func(accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('UPDATE "PROBLEM" SET "hidden" = %s WHERE "proid" = %s;') sqlarr = (hidden, proid) cur.execute(sqlstr, sqlarr) if hidden == True: TOJAuth.instance.set_access_list(accessid, TOJAuth.ROLEID_GUEST, TOJAuth.ACCESS_READ) TOJAuth.instance.set_access_list(accessid, TOJAuth.ROLEID_USER_GROUP, TOJAuth.ACCESS_READ) else: TOJAuth.instance.del_access_list(accessid, TOJAuth.ROLEID_GUEST) TOJAuth.instance.del_access_list(accessid, TOJAuth.ROLEID_USER_GROUP)
def get_testdata(self, testid): if( type(testid) != int ): return 'Eparameter' TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) with TOJAuth.change_current_iden(self._idendesc): test = mod.TestdataMg.instance._get_testdata(testid) if test == None: return 'Etestid' if test['proid'] != self._proid: return 'Eother_proid' del test['blobname'] del test['proid'] return test
def _list_testmode(self): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('SELECT "testmodeid", "testmodename", "timelimit", ' '"memlimit" FROM "PMOD_TEST_TESTMODE" WHERE "proid" = %s ' 'ORDER BY "testmodeid" ASC;') sqlarr = (self._proid, ) cur.execute(sqlstr, sqlarr) testmode_list = [] for data in cur: obj = {} obj['testmodeid'] = data[0] obj['testmodename'] = data[1] obj['timelimit'] = data[2] obj['memlimit'] = data[3] testmode_list.append(obj) return testmode_list
def _get_testmode_testdata(self, testmodeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('SELECT "order", "testid", "timelimit", "memlimit", ' '"subtask" FROM "PMOD_TEST_TESTDATA" WHERE "proid" = %s AND ' '"testmodeid" = %s ORDER BY "order" ASC;') sqlarr = (self._proid, testmodeid) cur.execute(sqlstr, sqlarr) testdata = [] for data in cur: obj = {} obj['order'] = data[0] obj['testid'] = data[1] obj['timelimit'] = data[2] obj['memlimit'] = data[3] obj['subtask'] = data[4] testdata.append(obj) return testdata
def _set_testmode_testdata(self, testmodeid, testdata): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('DELETE FROM "PMOD_TEST_TESTDATA" WHERE "proid" = %s AND ' '"testmodeid" = %s;') sqlarr = (self._proid, testmodeid) cur.execute(sqlstr, sqlarr) if len(testdata) == 0: return sqltab = ('INSERT INTO "PMOD_TEST_TESTDATA" ("proid", "testmodeid", ' '"order", "testid", "timelimit", "memlimit", "subtask") ' 'VALUES') sqlval = () sqlend = (';') sqlarr = [] cnt = 0 for test in testdata: if cnt == 0: sqlval = sqlval + ' ' else: sqlval = sqlval + ', ' cnt = cnt + 1 sqlval = sqlval + '(%s, %s, %s, %s, %s, %s, %s)' sqlarr.append(self._proid) sqlarr.append(testmodeid) sqlarr.append(cnt) sqlarr.append(test['testid']) sqlarr.append(test['timelimit']) sqlarr.append(test['memlimit']) sqlarr.append(test['subtask']) sqlstr = sqltab + sqlval + sqlend cur.execute(sqlstr, sqlarr)
def _delete_square(self, sqid): accessid = self.get_accessid_by_sqid(sqid) TOJAuth.check_access_func(accessid, TOJAuth.ACCESS_DELETE) sqinfo = self.get_square_info_by_sqid(sqid) sqmodname = sqinfo['sqmodname'] sqmod = mod.load_sqmod(sqmodname) with TOJAuth.change_current_iden(self._idendesc): self.unload_square(sqid) sqmod.delete_square_data(sqid) TOJAuth.instance.del_access(accessid) cur = self.db.cursor() sqlstr = ('DELETE FROM "SQUARE" WHERE "sqid" = %s;') sqlarr = (sqid, ) cur.execute(sqlstr, sqlarr) sqlstr = ('DELETE FROM "SQUARE_USER" WHERE "sqid" = %s;') sqlarr = (sqid, ) cur.execute(sqlstr, sqlarr)
def _set_testdata(self, testid, info, filekey, expire): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) with TOJAuth.change_current_iden(self._idendesc): test = mod.TestdataMg.instance._get_testdata(testid) blobname = test['blobname'] if test['proid'] != self._proid: return None if filekey != None: # Upload file # Update blob 'blobname' # If failed return False with TOJAuth.change_current_iden(self._idendesc): mod.TestdataMg.instance._update_testdata( testid, blobname, expire, self._proid, info) return True @imc.async.caller def set_testmode_testdata(self, testmodeid, testdata): if( type(testmodeid) != int or type(testdata) != list ): return 'Eparameter' for test in testdata: if type(test) != list: return 'Eparameter' if( 'testid' not in test or type(test['testid']) != int or 'timelimit' not in test or type(test['timelimit']) != int or 'memlimit' not in test or type(test['memlimit']) != int or 'subtask' not in test or type(test['subtask']) != int ): return 'Eparameter' if test['timelimit'] != None and test['timelimit'] < 0: return 'Etimelimit' if test['memlimit'] != None and test['memlimit'] < 0: return 'Ememlimit' if not self._does_testmodeid_exist(testmodeid): return 'Etestmodeid' self._set_testdata(testmodeid, testdata) return 'Success' def _set_testmode_testdata(self, testmodeid, testdata): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('DELETE FROM "PMOD_TEST_TESTDATA" WHERE "proid" = %s AND ' '"testmodeid" = %s;') sqlarr = (self._proid, testmodeid) cur.execute(sqlstr, sqlarr) if len(testdata) == 0: return sqltab = ('INSERT INTO "PMOD_TEST_TESTDATA" ("proid", "testmodeid", ' '"order", "testid", "timelimit", "memlimit", "subtask") ' 'VALUES') sqlval = () sqlend = (';') sqlarr = [] cnt = 0 for test in testdata: if cnt == 0: sqlval = sqlval + ' ' else: sqlval = sqlval + ', ' cnt = cnt + 1 sqlval = sqlval + '(%s, %s, %s, %s, %s, %s, %s)' sqlarr.append(self._proid) sqlarr.append(testmodeid) sqlarr.append(cnt) sqlarr.append(test['testid']) sqlarr.append(test['timelimit']) sqlarr.append(test['memlimit']) sqlarr.append(test['subtask']) sqlstr = sqltab + sqlval + sqlend cur.execute(sqlstr, sqlarr) @imc.async.caller def get_testmode_testdata(self, testmodeid): if( type(testmodeid) != int ): return 'Eparameter' if not self._does_testmodeid_exist(testmodeid): return 'Etestmodeid' testdata = self._get_testdata(testmodeid) return testdata def _get_testmode_testdata(self, testmodeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('SELECT "order", "testid", "timelimit", "memlimit", ' '"subtask" FROM "PMOD_TEST_TESTDATA" WHERE "proid" = %s AND ' '"testmodeid" = %s ORDER BY "order" ASC;') sqlarr = (self._proid, testmodeid) cur.execute(sqlstr, sqlarr) testdata = [] for data in cur: obj = {} obj['order'] = data[0] obj['testid'] = data[1] obj['timelimit'] = data[2] obj['memlimit'] = data[3] obj['subtask'] = data[4] testdata.append(obj) return testdata def _does_modeid_exist(self, modeid): mode = self._get_mode_by_modeid(modeid) return mode != None def _get_mode_by_modeid(self, modeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('SELECT "proid", "modeid", "content", "testmodeid" FROM ' '"PMOD_TEST_MODE" WHERE "proid" = %s AND "modeid" = %s;') sqlarr = (self._proid, modeid) cur.execute(sqlstr, sqlarr) mode = None for data in cur: mode = {} mode['proid'] = data[0] mode['modeid'] = data[1] mode['content'] = data[2] mode['testmodeid'] = data[3] return mode def _does_testmodeid_exist(self, testmodeid): testmode_info = self._get_testmode_info(testmodeid) return testmode_info != None def _get_testmode_info(self, testmodeid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_WRITE) cur = self.db.cursor() sqlstr = ('SELECT "proid", "testmodeid", "testmodename", "timelimit",' ' "memlimit" FROM "PMOD_TEST_TESTMODE" WHERE "proid" = %s ' 'AND "testmodeid" = %s;') sqlarr = (self._proid, testmodeid) cur.execute(sqlstr, sqlarr) testmode_info = None for data in cur: testmode_info = {} testmode_info['proid'] = data[0] testmode_info['testmodeid'] = data[1] testmode_info['testmodename'] = data[2] testmode_info['timelimit'] = data[3] testmode_info['memlimit'] = data[4] return testmode_info
def _delete_testdata(self, testid): TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_DELETE) with TOJAuth.change_current_iden(self._idendesc): mod.TestdataMg.instance._del_testdata(testid)