Exemplo n.º 1
0
 def __init__(self, sid, username, password, last_result):
     self.mysql = MySQL()
     self.sid = sid
     self.get_info(sid)
     self.username = username
     self.ac = Access(self.oj, username, password)
     self.ce_info = ''
     self.last_result = last_result
Exemplo n.º 2
0
class Update(threading.Thread):
    def __init__(self, user_id):
        threading.Thread.__init__(self)
        self.user_id = user_id
        self.mysql = MySQL()

    def run(self):
        data = self.mysql.query("SELECT oj_account_id FROM users_info_oj_account WHERE info_id = '%s'" % self.user_id)
        for id in data:
            info = self.mysql.query(
                "SELECT oj, username, password, defunct, last_rid, is_using FROM users_oj_account WHERE id = '%s'" % id[
                    0])
            oj, username, password, defunct, last_rid, is_using = info[0]
            if not defunct:
                ret = get_last_rid(oj, username)
                if ret != last_rid and not is_using:
                    updata_user(id[0], oj, username, password, ret, last_rid, self.user_id, self.mysql)
Exemplo n.º 3
0
class Vjudge:
    def __init__(self, sid, username, password, last_result):
        self.mysql = MySQL()
        self.sid = sid
        self.get_info(sid)
        self.username = username
        self.ac = Access(self.oj, username, password)
        self.ce_info = ''
        self.last_result = last_result

    def get_info(self, sid):
        result = self.mysql.query("SELECT problem_id, language, code, user_id FROM status_solve WHERE id = '%s'" % sid)
        self.problem_id = result[0][0]
        self.language = result[0][1]
        self.code = result[0][2]
        self.uid = result[0][3]
        result = self.mysql.query("SELECT oj, problem_id FROM problem_problem WHERE id = '%s'" % self.problem_id)
        self.oj = result[0][0]
        self.pid = result[0][1]

    def submit(self):
        url = url_submit[self.oj]
        referer = url_referer[self.oj] + self.pid
        postdata = post_data[self.oj]
        postdata[judge_listmap[self.oj][0]] = self.pid
        postdata[judge_listmap[self.oj][1]] = language_map[self.oj][self.language]
        postdata[judge_listmap[self.oj][2]] = self.code
        self.ac.get_html(url, postdata, referer)

    def hdu_get_status(self):
        if not self.rid:
            url = url_status[self.oj][0]
            html = self.ac.get_html(url)
            match = re.search(re_string[self.oj][0] % self.username, html, re.M | re.I | re.S)
            s = match.group()
            self.rid = re.findall(re_string[self.oj][1], s, re.M | re.I | re.S)[-1]
        url = url_status[self.oj][1] + self.rid
        html = self.ac.get_html(url)
        match = re.search(re_string[self.oj][2] % self.rid, html, re.M | re.I | re.S)
        if match.group(1) == 'Compilation Error':
            url = url_ce[self.oj] + self.rid
            html = self.ac.get_html(url)
            t = re.search(re_string[self.oj][3], html, re.M | re.I | re.S)
            self.ce_info = t.group(1)
        return match.group(1), match.group(2), match.group(3)

    def hdu_again(self, s):
        if s == 'Queuing' or s == 'Compiling' or s == 'Running':
            return True
        return False

    def run(self):
        self.submit()
        self.rid = ''
        sleep(0.5)
        o = eval('self.' + self.oj + '_get_status')()
        self.mysql.update(
            "UPDATE status_solve SET status = '%s', use_time = '%s', use_memory = '%s' WHERE id = '%s'" % (
                o[0], o[1], o[2], self.sid))
        sleep(0.2)
        while eval('self.' + self.oj + '_again')(o[0]):
            o = eval('self.' + self.oj + '_get_status')()
            self.mysql.update(
                "UPDATE status_solve SET status = '%s', use_time = '%s', use_memory = '%s' WHERE id = '%s'" % (
                    o[0], o[1], o[2], self.sid))
            sleep(0.2)
            # print o
        if self.ce_info:
            sql = "SELECT info FROM status_ce_info WHERE solve_id = '%s'" % self.sid
            result = self.mysql.query(sql)
            if result:
                sql = "UPDATE status_ce_info SET info = '%s' WHERE solve_id = '%s'" % (self.ce_info, self.sid)
                self.mysql.update(sql)
            else:
                sql = "INSERT INTO status_ce_info (info, solve_id) VALUES('%s', '%s')" % (self.ce_info, self.sid)
                self.mysql.update(sql)
        sql = "SELECT ac FROM users_submit_problem WHERE user_id = '%s' AND problem_id = '%s'" % (self.uid, self.problem_id)
        result = self.mysql.query(sql)
        if result:
            if o[0] == 'Accepted' and int(result[0][0]) == 0:
                sql = "UPDATE users_submit_problem SET ac = '1' WHERE user_id = '%s' AND problem_id = '%s'" % (
                    self.uid, self.problem_id)
                self.mysql.update(sql)
        else:
            sql = "INSERT INTO users_submit_problem (ac, problem_id, user_id) VALUES('%s', '%s', '%s')" % (
            '1' if o[0] == 'Accepted' else '0', self.problem_id, self.uid)
            self.mysql.update(sql)
Exemplo n.º 4
0
 def __init__(self, user_id):
     threading.Thread.__init__(self)
     self.user_id = user_id
     self.mysql = MySQL()