| @@ -13,14 +13,14 @@ | |||
| def get_results(bot, lang, project, title, url, query): | |||
| try: | |||
| site = bot.wiki.get_site(lang=lang, project=project) | |||
| 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) | |||
| site = bot.wiki.add_site(lang=lang, project=project) # TODO: what if the site doesn't exist? | |||
| except exceptions.APIError: | |||
| return None, None | |||
| page = site.get_page(title) # TODO: what if the page doesn't exist? | |||
| page = site.get_page(title) # TODO: what if the page doesn't exist? | |||
| # if url: | |||
| # result = get_url_specific_results(page, url) | |||
| # else: | |||
| @@ -111,28 +111,15 @@ | |||
| conn = open_sql_connection(site, "globals") | |||
| query1 = "SELECT update_time FROM updates WHERE update_service = ?" | |||
| query2 = "SELECT lang_code, lang_name FROM languages" | |||
| query3 = "SELECT project_name FROM projects" | |||
| tl_normal = '<option value="{0}">{1}</option>' | |||
| tl_select = '<option value="{0}" selected="selected">{1}</option>' | |||
| query3 = "SELECT project_code, project_name FROM projects" | |||
| with conn.cursor() as cursor: | |||
| cursor.execute(query1, ("sites",)) | |||
| time_since_update = int(time() - cursor.fetchall()[0][0]) | |||
| if time_since_update > max_staleness: | |||
| update_sites(bot, cursor) | |||
| cursor.execute(query2) | |||
| langs = [] | |||
| for lang, lang_name in cursor.fetchall(): | |||
| template = tl_select if lang == site.lang else tl_normal | |||
| fullname = "{0} ({1})".format(lang, lang_name) | |||
| langs.append(template.format(lang, fullname)) | |||
| cursor.execute(query3) | |||
| projects = [] | |||
| for (project,) in cursor.fetchall(): | |||
| template = tl_select if project == site.project else tl_normal | |||
| projects.append(template.format(project, project.capitalize())) | |||
| 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) | |||
| @@ -146,22 +133,32 @@ | |||
| languages, projects = set(), set() | |||
| for site in matrix.itervalues(): | |||
| if isinstance(site, list): # Special sites | |||
| continue | |||
| code = site["code"].encode("utf8") | |||
| name = site["name"].encode("utf8") | |||
| languages.add((code, name)) | |||
| projects.add(("wikimedia", "Wikimedia")) | |||
| for special in site: | |||
| if "closed" not in special and "private" not in special: | |||
| code = special["dbname"] | |||
| name = special["code"].capitalize() | |||
| languages.add((code, name)) | |||
| this = set() | |||
| for web in site["site"]: | |||
| if "closed" in web: | |||
| continue | |||
| project = "wikipedia" if web["code"] == "wiki" else web["code"] | |||
| projects.add(project) | |||
| this.add((project, project.capitalize())) | |||
| if this: | |||
| code = site["code"].encode("utf8") | |||
| name = site["name"].encode("utf8") | |||
| languages.add((code, "{0} ({1})".format(code, name))) | |||
| projects |= this | |||
| save_site_updates(cursor, languages, projects) | |||
| def save_site_updates(cursor, languages, projects): | |||
| query1 = "SELECT lang_code, lang_name FROM languages" | |||
| query2 = "DELETE FROM languages WHERE lang_code = ? AND lang_name = ?" | |||
| query3 = "INSERT INTO languages VALUES (?, ?)" | |||
| query4 = "SELECT project_name FROM projects" | |||
| query5 = "DELETE FROM projects WHERE project_name = ?" | |||
| query6 = "INSERT INTO projects VALUES (?)" | |||
| query4 = "SELECT project_code, project_name FROM projects" | |||
| query5 = "DELETE FROM projects WHERE project_code = ? AND project_name = ?" | |||
| query6 = "INSERT INTO projects VALUES (?, ?)" | |||
| query7 = "UPDATE updates SET update_time = ? WHERE update_service = ?" | |||
| synchronize_sites_with_db(cursor, languages, query1, query2, query3) | |||
| synchronize_sites_with_db(cursor, projects, query4, query5, query6) | |||
| @@ -174,6 +171,16 @@ | |||
| cursor.executemany(q_rmv, removals) | |||
| cursor.executemany(q_update, updates) | |||
| def load_sites_from_db(cursor, query, selected_code): | |||
| tl_normal = '<option value="{0}">{1}</option>' | |||
| tl_selected = '<option value="{0}" selected="selected">{1}</option>' | |||
| 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 | |||