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')
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")
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
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")
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)
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')
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
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')
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")
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])
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")
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')
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])
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))
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
def test_get_submissions(self): data = YukicoderService().get_submissions(page=3, status='TLE') self.assertEqual(len(data), 50) self.assertEqual(data[4]['結果'], 'TLE')
def test_get_user_yuki2006(self): data = YukicoderService().get_user(name="yuki2006") self.assertEqual(data["Id"], 10) self.assertEqual(data["Name"], "yuki2006")
def test_get_submissions(self): data = YukicoderService().get_submissions(page=3, status="TLE") self.assertEqual(len(data), 50) self.assertEqual(data[4]["結果"], "TLE")
def test_get_user_0(self): data = YukicoderService().get_user(id=0) self.assertIs(data, None)
def test_get_solved_0(self): data = YukicoderService().get_solved(id=0) self.assertIs(data, None)
def test_get_solved_yuki2006(self): data = YukicoderService().get_solved(name="yuki2006") self.assertGreater(len(data), 200)
def test_get_user_yuki2006(self): data = YukicoderService().get_user(name='yuki2006') self.assertEqual(data['Id'], 10) self.assertEqual(data['Name'], 'yuki2006')