diff --git a/curate.py b/curate.py index 57d1a21..b58c482 100644 --- a/curate.py +++ b/curate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 -from curator.platforms import * from curator import * +from curator.platforms import * output.prep_output() @@ -10,7 +10,7 @@ submissions = { dmoj.platform_name(): dmoj.fetch(), codeforces.platform_name(): codeforces.fetch(), - spoj.platform_name(): spoj.fetch() + spoj.platform_name(): spoj.fetch(), } print("Writing to folder...") diff --git a/curator/__init__.py b/curator/__init__.py index 3e940b5..e3f66db 100644 --- a/curator/__init__.py +++ b/curator/__init__.py @@ -1 +1 @@ -__all__ = ["output", "readme", "settings"] \ No newline at end of file +__all__ = ["output", "readme", "settings"] diff --git a/curator/output.py b/curator/output.py index 294289d..a375abb 100644 --- a/curator/output.py +++ b/curator/output.py @@ -1,6 +1,7 @@ import os -from curator.util import lang_extensions + from curator import settings +from curator.util import lang_extensions CONFIG = settings.load_config() OUTPUT_PATH = CONFIG["output_path"] @@ -22,14 +23,15 @@ def write_submissions(submissions): name = submission["name"] source = submission["source"] folder = os.path.join(OUTPUT_PATH, platform) - path = os.path.join(folder, name + "." + - lang_extensions.extension(language)) + path = os.path.join( + folder, name + "." + lang_extensions.extension(language) + ) if not os.path.exists(folder): os.mkdir(folder) elif not os.path.isdir(folder): # Why would this even happen continue - with open(path, 'w+', newline='\n') as file: + with open(path, "w+", newline="\n") as file: file.write(source) file.close() print("Writing to " + path) diff --git a/curator/platforms/__init__.py b/curator/platforms/__init__.py index 052680d..9bc058e 100644 --- a/curator/platforms/__init__.py +++ b/curator/platforms/__init__.py @@ -1 +1 @@ -__all__ = ["dmoj", "codeforces", "spoj"] \ No newline at end of file +__all__ = ["dmoj", "codeforces", "spoj"] diff --git a/curator/platforms/codeforces.py b/curator/platforms/codeforces.py index 64a13d7..1ed9402 100644 --- a/curator/platforms/codeforces.py +++ b/curator/platforms/codeforces.py @@ -1,7 +1,7 @@ -from collections import defaultdict -import mechanicalsoup import json +from collections import defaultdict +import mechanicalsoup from curator import settings PLATFORM_NAME = "Codeforces" @@ -26,7 +26,9 @@ def platform_name(): def _get_source(contest_id, submission_id): - BROWSER.open("http://codeforces.com/contest/" + contest_id + "/submission/" + submission_id) + BROWSER.open( + "http://codeforces.com/contest/" + contest_id + "/submission/" + submission_id + ) page = BROWSER.get_current_page() src = page.find("pre", class_="program-source") if src: @@ -61,8 +63,8 @@ def _get_best_submissions(candidates): "language": submission_object["programmingLanguage"], "platform": PLATFORM_NAME, "difficulty": str(problem["points"]), - "link": PROBLEM_URL + contest_id + "/" + str(problem["index"]) + "link": PROBLEM_URL + contest_id + "/" + str(problem["index"]), } result.append(submission) - result = sorted(result, key=lambda k: k['name']) + result = sorted(result, key=lambda k: k["name"]) return result diff --git a/curator/platforms/dmoj.py b/curator/platforms/dmoj.py index aaa9626..4979029 100644 --- a/curator/platforms/dmoj.py +++ b/curator/platforms/dmoj.py @@ -1,7 +1,7 @@ -from collections import defaultdict -import mechanicalsoup import json +from collections import defaultdict +import mechanicalsoup from curator import settings PLATFORM_NAME = "DMOJ" @@ -14,9 +14,9 @@ def fetch(): - BROWSER.session.headers['Referer'] = LOGIN_URL + BROWSER.session.headers["Referer"] = LOGIN_URL BROWSER.open(LOGIN_URL) - BROWSER.select_form('form') + BROWSER.select_form("form") BROWSER["username"] = CONFIG["username"] BROWSER["password"] = CONFIG["password"] auth = BROWSER.submit_selected() @@ -44,14 +44,16 @@ def _get_source(submission_id): def _get_best_submissions(candidates): result = [] - best_submissions = defaultdict(lambda: (0, 0, 2**32)) + best_submissions = defaultdict(lambda: (0, 0, 2 ** 32)) for k, v in candidates.items(): if v["result"] == "AC": pid = v["problem"] points = v["points"] time = v["time"] current_id, current_points, current_time = best_submissions[pid] - if points > current_points or (time < current_time and points == current_points): + if points > current_points or ( + time < current_time and points == current_points + ): best_submissions[pid] = (k, points, time) for problem_id, v in best_submissions.items(): submission_id = str(v[0]) @@ -65,8 +67,8 @@ def _get_best_submissions(candidates): "language": candidates[submission_id]["language"], "platform": PLATFORM_NAME, "difficulty": str(candidates[submission_id]["points"]), - "link": PROBLEM_URL + problem_id + "link": PROBLEM_URL + problem_id, } result.append(submission) - result = sorted(result, key=lambda k: k['name']) + result = sorted(result, key=lambda k: k["name"]) return result diff --git a/curator/platforms/spoj.py b/curator/platforms/spoj.py index a6be4af..908e9cc 100644 --- a/curator/platforms/spoj.py +++ b/curator/platforms/spoj.py @@ -1,6 +1,6 @@ from collections import defaultdict -import mechanicalsoup +import mechanicalsoup from curator import settings CONFIG = settings.load_config()["platforms"]["spoj"] @@ -13,10 +13,11 @@ BROWSER = mechanicalsoup.StatefulBrowser() + def fetch(): - BROWSER.session.headers['Referer'] = LOGIN_URL + BROWSER.session.headers["Referer"] = LOGIN_URL BROWSER.open(LOGIN_URL) - BROWSER.select_form('form') + BROWSER.select_form("form") BROWSER["login_user"] = CONFIG["username"] BROWSER["password"] = CONFIG["password"] auth = BROWSER.submit_selected() @@ -25,7 +26,7 @@ def fetch(): if auth.status_code != 200 or submissions.status_code != 200: # Error connecting to spoj, throw error return list() - + candidates = _parse_submissions(submissions.text) return _get_best_submissions(candidates) @@ -44,7 +45,7 @@ def _get_source(submission_id): def _get_best_submissions(candidates): result = [] - best_submissions = defaultdict(lambda: (0, 2**32)) + best_submissions = defaultdict(lambda: (0, 2 ** 32)) for k, v in candidates.items(): if v["result"] == "AC": pid = v["problem"] @@ -52,7 +53,7 @@ def _get_best_submissions(candidates): current_id, current_time = best_submissions[pid] if time < current_time: best_submissions[pid] = (k, time) - + for problem_id, v in best_submissions.items(): submission_id = str(v[0]) source = _get_source(submission_id) @@ -65,26 +66,27 @@ def _get_best_submissions(candidates): "language": candidates[submission_id]["language"], "platform": PLATFORM_NAME, "difficulty": "N/A", - "link": PROBLEM_URL + problem_id + "link": PROBLEM_URL + problem_id, } result.append(submission) - result = sorted(result, key=lambda k: k['name']) + result = sorted(result, key=lambda k: k["name"]) return result + def _parse_submissions(plaintext): plaintext = plaintext.split("\n") numsubs = len(plaintext) - 22 formatted = {} - submissions = plaintext[9:9+numsubs] - + submissions = plaintext[9 : 9 + numsubs] + for sub in submissions: separated = sub.strip("|").split("|") separated = list(map(str.strip, separated)) formatted[separated[0]] = { - "problem" : separated[2], - "result" : separated[3], - "time" : float(separated[4]), - "language" : separated[6] + "problem": separated[2], + "result": separated[3], + "time": float(separated[4]), + "language": separated[6], } - return formatted \ No newline at end of file + return formatted diff --git a/curator/readme.py b/curator/readme.py index d657873..431d365 100644 --- a/curator/readme.py +++ b/curator/readme.py @@ -1,7 +1,7 @@ import os -from curator.util import markdown -from curator.util import lang_extensions + from curator import settings +from curator.util import lang_extensions, markdown CONFIG = settings.load_config() FOLDER = CONFIG["output_path"] @@ -9,7 +9,7 @@ def write_readme(submissions): - with open(README_PATH, 'w+', newline='\n') as f: + with open(README_PATH, "w+", newline="\n") as f: _write_header(f) for platform, s in submissions.items(): _write_platform_submissions(f, s, platform) @@ -23,8 +23,7 @@ def _write_header(file): def _write_platform_submissions(file, submissions, platform): file.write(markdown.h2(platform)) - file.write(markdown.table_header( - "Problem", "Source", "Language", "Difficulty")) + file.write(markdown.table_header("Problem", "Source", "Language", "Difficulty")) for submission in submissions: name = submission["name"] language = submission["language"] @@ -32,6 +31,11 @@ def _write_platform_submissions(file, submissions, platform): link = submission["link"] file_name = name + "." + lang_extensions.extension(language) file_path = submission["platform"] + "/" + file_name - file.write(markdown.table_row( - markdown.link(name, link), - markdown.link("Source", file_path), language, difficulty)) + file.write( + markdown.table_row( + markdown.link(name, link), + markdown.link("Source", file_path), + language, + difficulty, + ) + ) diff --git a/curator/util/lang_extensions.py b/curator/util/lang_extensions.py index b24bf25..c69d7ec 100644 --- a/curator/util/lang_extensions.py +++ b/curator/util/lang_extensions.py @@ -1,4 +1,5 @@ from curator import settings + TRANSLATIONS = settings.load_extensions() EXACT = TRANSLATIONS["exact"] FUZZY = TRANSLATIONS["fuzzy"]