diff --git a/pages/copyvios.mako b/pages/copyvios.mako index 855a053..c6cdabb 100644 --- a/pages/copyvios.mako +++ b/pages/copyvios.mako @@ -11,16 +11,14 @@ from earwigbot import bot, exceptions import oursql - def get_results(bot, lang, project, title, url, query): - try: - site = bot.wiki.get_site(lang=lang, project=project) # UPDATE ME FOR SPECIAL SITES! - except exceptions.SiteNotFoundError: - try: - site = bot.wiki.add_site(lang=lang, project=project) # TODO: what if the site doesn't exist? - except exceptions.APIError: - return None, None + def get_results(bot, lang, project, all_projects, title, url, query): + site = get_site(bot, lang, project, all_projects) + if not site: + return None, None + page = site.get_page(title) + if page.exists in [page.PAGE_MISSING, page.PAGE_INVALID]: + return page, None - page = site.get_page(title) # TODO: what if the page doesn't exist? # if url: # result = get_url_specific_results(page, url) # else: @@ -36,6 +34,25 @@ True, 0.67123, "http://example.com/", 7, mc1, (mc2, mci)) return page, result + def get_site(bot, lang, project, all_projects): + if project not in [proj[0] for proj in all_projects]: + return None + if project == "wikimedia": # Special sites: + try: + return bot.wiki.get_site(name=lang) + except exceptions.SiteNotFoundError: + try: + return bot.wiki.add_site(lang=lang, project=project) + except exceptions.APIError: + return None + try: + return bot.wiki.get_site(lang=lang, project=project) + except exceptions.SiteNotFoundError: + try: + return bot.wiki.add_site(lang=lang, project=project) + except exceptions.APIError: + return None + def get_url_specific_results(page, url): t_start = time() result = page.copyvio_compare(url) @@ -118,14 +135,13 @@ time_since_update = int(time() - cursor.fetchall()[0][0]) if time_since_update > max_staleness: update_sites(bot, cursor) - langs = load_sites_from_db(cursor, query2, site.lang) - projects = load_sites_from_db(cursor, query3, site.project) - langs = "\n".join(langs) - projects = "\n".join(projects) - result = '\n'.format(langs) - result += ''.format(projects) - return result + cursor.execute(query2) + langs = cursor.fetchall() + cursor.execute(query3) + projects = cursor.fetchall() + + return langs, projects def update_sites(site, cursor): matrix = site.api_query(action="sitematrix")["sitematrix"] @@ -171,16 +187,6 @@ cursor.executemany(q_rmv, removals) cursor.executemany(q_update, updates) - def load_sites_from_db(cursor, query, selected_code): - tl_normal = '' - tl_selected = '' - cursor.execute(query) - results = [] - for code, name in cursor.fetchall(): - template = tl_selected if code == selected_code else tl_normal - results.append(template.format(code, name)) - return results - def highlight_delta(chain, delta): processed = [] prev_prev = prev = chain.START @@ -262,16 +268,18 @@ %>\ <% bot = bot.Bot(".earwigbot") + site = bot.wiki.get_site() query = parse_qs(environ["QUERY_STRING"]) - try: - lang = query["lang"][0] - project = query["project"][0] - title = query["title"][0] - url = query.get("url", [None])[0] - except (KeyError, IndexError): - page = None + lang = query["lang"][0].lower() if "lang" in query else None + project = query["project"][0].lower() if "project" in query else None + title = query["title"][0] if "title" in query else None + url = query["url"][0] if "url" in query else None + all_langs, all_projects = get_sites(bot) + if lang and project and title: + page, result = get_results(bot, lang, project, all_projects, title, + url, query) else: - page, result = get_results(bot, lang, project, title, url, query) + page = result = None %>\ <%include file="/support/header.mako" args="environ=environ, title='Copyvio Detector', add_css=('copyvios.css',), add_js=('copyvios.js',)"/>

Copyvio Detector

@@ -281,13 +289,34 @@ Site: - ${get_sites(bot)} + <% selected_lang = lang if lang else site.lang %> + + <% selected_project = project if project else site.project %> + Page title: % if page: + % elif title: + % else: % endif @@ -315,7 +344,11 @@ - % if page: + % if project and lang and title and not page: + CASE WHEN GIVEN SITE DOESN'T EXIST + % elif project and lang and title and page and not result: + CASE WHEN GIVEN PAGE DOESN'T EXIST + % elif page:
% if result.violation: