示例#1
0
 def test_get_problems(self):
     data = YukicoderService().get_problems(page=2, sort='no_asc')
     self.assertEqual(len(data), 50)
     self.assertEqual(data[3]['ナンバー'], 54)
     self.assertEqual(data[3]['問題名'], "Happy Hallowe'en")
     self.assertEqual(data[3]['レベル'], '4')
     self.assertEqual(data[3]['作問者/url'], '/users/4')
示例#2
0
 def test_get_user_favorite_problem_10(self):
     data = YukicoderService().get_user_favorite_problem(id=10)
     it = list(filter(lambda row: row["ナンバー"] == 111, data))
     self.assertEqual(len(it), 1)
     it = it[0]
     self.assertEqual(it["問題名"], "あばばばば")
     self.assertEqual(it["レベル"], "1.5")
示例#3
0
def fetch_submissions(page, session, cursor):
    print('[*] fetch submission: %d' % page)
    num, den = 0, 0
    for submission in YukicoderService().get_submissions(page=page,
                                                         status='AC',
                                                         session=session):
        submission_id = submission['#']
        s = submission['問題']
        assert s.startswith('No.')
        problem_no, _, problem_name = s[len('No.'):].partition(' ')
        problem_no = int(problem_no)
        user_name = submission['提出者']
        if '提出者/url' not in submission:
            continue  # anonymous users
        user_id = int(submission['提出者/url'].split('/')[-1])
        cursor.execute('SELECT 1 FROM submissions WHERE id = %s',
                       (submission_id, ))
        if cursor.fetchone() is None:
            cursor.execute('INSERT IGNORE INTO users VALUES (%s, %s)',
                           (user_id, user_name))
            cursor.execute(
                'INSERT IGNORE INTO problems VALUES (%s, %s, NULL, NULL, NULL)',
                (problem_no, problem_name))
            print('[*] submission: (%d, %d, %d)' %
                  (submission_id, problem_no, user_id))
            cursor.execute('INSERT INTO submissions VALUES (%s, %s, %s, 1)',
                           (submission_id, problem_no, user_id))
            num += 1
        den += 1
    return num, den
示例#4
0
 def test_get_problems(self):
     data = YukicoderService().get_problems(page=2, sort="no_asc")
     self.assertEqual(len(data), 50)
     self.assertEqual(data[3]["ナンバー"], 54)
     self.assertEqual(data[3]["問題名"], "Happy Hallowe'en")
     self.assertEqual(data[3]["レベル"], "4")
     self.assertEqual(data[3]["作問者/url"], "/users/4")
示例#5
0
 def test_get_user_favorite_wiki_10(self):
     data = YukicoderService().get_user_favorite_wiki(id=10)
     it = list(
         filter(
             lambda row: row['Wikiページ'] == 'decomposable_searching_problem',
             data))
     self.assertEqual(len(it), 1)
示例#6
0
 def test_get_user_favorite_problem_10(self):
     data = YukicoderService().get_user_favorite_problem(id=10)
     it = list(filter(lambda row: row['ナンバー'] == 111, data))
     self.assertEqual(len(it), 1)
     it = it[0]
     self.assertEqual(it['問題名'], 'あばばばば')
     self.assertEqual(it['レベル'], '1.5')
示例#7
0
def fetch_user(user_id, session, cursor):
    print('[*] fetch user: %d' % user_id)
    user = YukicoderService().get_user(id=user_id, session=session)
    if user is None:
        return False
    cursor.execute('INSERT IGNORE INTO users VALUES (%s, %s)',
                   (user_id, user['Name']))
    return True
示例#8
0
 def test_get_user_favorite_10(self):
     data = YukicoderService().get_user_favorite(id=10)
     it = list(filter(lambda row: row['#'] == 10000, data))
     self.assertEqual(len(it), 1)
     it = it[0]
     self.assertEqual(it['問題'], 'No.9000 Hello World! (テスト用)')
     self.assertEqual(it['結果'], 'AC')
     self.assertEqual(it['言語'], 'C++11')
示例#9
0
 def test_get_user_favorite_10(self):
     data = YukicoderService().get_user_favorite(id=10)
     it = list(filter(lambda row: row["#"] == 10000, data))
     self.assertEqual(len(it), 1)
     it = it[0]
     self.assertEqual(it["問題"], "No.9000 Hello World! (テスト用)")
     self.assertEqual(it["結果"], "AC")
     self.assertEqual(it["言語"], "C++11")
示例#10
0
 def test_get_solved_10(self):
     data = YukicoderService().get_solved(id=10)
     self.assertGreater(len(data), 200)
     self.assertIn('No', data[0])
     self.assertIn('ProblemId', data[0])
     self.assertIn('Title', data[0])
     self.assertIn('AuthorId', data[0])
     self.assertIn('TesterId', data[0])
     self.assertIn('Level', data[0])
     self.assertIn('ProblemType', data[0])
     self.assertIn('Tags', data[0])
示例#11
0
 def test_get_user_10(self):
     data = YukicoderService().get_user(id=10)
     self.assertIn("Id", data)
     self.assertIn("Name", data)
     self.assertIn("Solved", data)
     self.assertIn("Level", data)
     self.assertIn("Rank", data)
     self.assertIn("Score", data)
     self.assertIn("Points", data)
     self.assertEqual(data["Id"], 10)
     self.assertEqual(data["Name"], "yuki2006")
示例#12
0
 def test_get_user_10(self):
     data = YukicoderService().get_user(id=10)
     self.assertIn('Id', data)
     self.assertIn('Name', data)
     self.assertIn('Solved', data)
     self.assertIn('Level', data)
     self.assertIn('Rank', data)
     self.assertIn('Score', data)
     self.assertIn('Points', data)
     self.assertEqual(data['Id'], 10)
     self.assertEqual(data['Name'], 'yuki2006')
示例#13
0
 def test_get_solved_10(self):
     data = YukicoderService().get_solved(id=10)
     self.assertGreater(len(data), 200)
     self.assertIn("No", data[0])
     self.assertIn("ProblemId", data[0])
     self.assertIn("Title", data[0])
     self.assertIn("AuthorId", data[0])
     self.assertIn("TesterId", data[0])
     self.assertIn("Level", data[0])
     self.assertIn("ProblemType", data[0])
     self.assertIn("Tags", data[0])
示例#14
0
def update_user(user_id, session, cursor):
    print('[*] update user: %d' % user_id)
    for problem in YukicoderService().get_user_favorite_problem(
            id=user_id, session=session):
        problem_no = problem['ナンバー']
        problem_name = problem['問題名']
        print('[*] favorite problem: (%d, %d)' % (user_id, problem_no))
        cursor.execute(
            'INSERT IGNORE INTO problems VALUES (%s, %s, NULL, NULL, NULL)',
            (problem_no, problem_name))
        cursor.execute('INSERT IGNORE INTO favorite_problems VALUES (%s, %s)',
                       (user_id, problem_no))
示例#15
0
def update_problems(page, session, cursor):
    print('[*] update problems: %d' % page)
    problems = YukicoderService().get_problems(page=page, session=session)
    if not problems:
        return False
    for problem in problems:
        problem_no = problem['ナンバー']
        problem_name = problem['問題名']
        solved = problem['解いた人数']
        level = problem['レベル']
        writer_id = int(problem['作問者/url'].split('/')[-1])
        print('[*] problem:',
              (problem_no, problem_name, level, solved, writer_id))
        cursor.execute(
            'INSERT IGNORE INTO problems VALUES (%s, %s, NULL, NULL, NULL)',
            (problem_no, problem_name))
        cursor.execute(
            'UPDATE problems SET name = %s, level = %s, solved = %s, writer_id = %s WHERE no = %s',
            (problem_name, level, solved, writer_id, problem_no))
    return True
示例#16
0
 def test_get_submissions(self):
     data = YukicoderService().get_submissions(page=3, status='TLE')
     self.assertEqual(len(data), 50)
     self.assertEqual(data[4]['結果'], 'TLE')
示例#17
0
 def test_get_user_yuki2006(self):
     data = YukicoderService().get_user(name="yuki2006")
     self.assertEqual(data["Id"], 10)
     self.assertEqual(data["Name"], "yuki2006")
示例#18
0
 def test_get_submissions(self):
     data = YukicoderService().get_submissions(page=3, status="TLE")
     self.assertEqual(len(data), 50)
     self.assertEqual(data[4]["結果"], "TLE")
示例#19
0
 def test_get_user_0(self):
     data = YukicoderService().get_user(id=0)
     self.assertIs(data, None)
示例#20
0
 def test_get_solved_0(self):
     data = YukicoderService().get_solved(id=0)
     self.assertIs(data, None)
示例#21
0
 def test_get_solved_yuki2006(self):
     data = YukicoderService().get_solved(name="yuki2006")
     self.assertGreater(len(data), 200)
示例#22
0
 def test_get_user_yuki2006(self):
     data = YukicoderService().get_user(name='yuki2006')
     self.assertEqual(data['Id'], 10)
     self.assertEqual(data['Name'], 'yuki2006')