| @@ -13,14 +13,14 @@ | |||||
| def get_results(bot, lang, project, title, url, query): | def get_results(bot, lang, project, title, url, query): | ||||
| try: | 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: | except exceptions.SiteNotFoundError: | ||||
| try: | 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: | except exceptions.APIError: | ||||
| return None, None | 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: | # if url: | ||||
| # result = get_url_specific_results(page, url) | # result = get_url_specific_results(page, url) | ||||
| # else: | # else: | ||||
| @@ -111,28 +111,15 @@ | |||||
| conn = open_sql_connection(site, "globals") | conn = open_sql_connection(site, "globals") | ||||
| query1 = "SELECT update_time FROM updates WHERE update_service = ?" | query1 = "SELECT update_time FROM updates WHERE update_service = ?" | ||||
| query2 = "SELECT lang_code, lang_name FROM languages" | 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: | with conn.cursor() as cursor: | ||||
| cursor.execute(query1, ("sites",)) | cursor.execute(query1, ("sites",)) | ||||
| time_since_update = int(time() - cursor.fetchall()[0][0]) | time_since_update = int(time() - cursor.fetchall()[0][0]) | ||||
| if time_since_update > max_staleness: | if time_since_update > max_staleness: | ||||
| update_sites(bot, cursor) | 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) | langs = "\n".join(langs) | ||||
| projects = "\n".join(projects) | projects = "\n".join(projects) | ||||
| @@ -146,22 +133,32 @@ | |||||
| languages, projects = set(), set() | languages, projects = set(), set() | ||||
| for site in matrix.itervalues(): | for site in matrix.itervalues(): | ||||
| if isinstance(site, list): # Special sites | 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"]: | for web in site["site"]: | ||||
| if "closed" in web: | |||||
| continue | |||||
| project = "wikipedia" if web["code"] == "wiki" else web["code"] | 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) | save_site_updates(cursor, languages, projects) | ||||
| def save_site_updates(cursor, languages, projects): | def save_site_updates(cursor, languages, projects): | ||||
| query1 = "SELECT lang_code, lang_name FROM languages" | query1 = "SELECT lang_code, lang_name FROM languages" | ||||
| query2 = "DELETE FROM languages WHERE lang_code = ? AND lang_name = ?" | query2 = "DELETE FROM languages WHERE lang_code = ? AND lang_name = ?" | ||||
| query3 = "INSERT INTO languages VALUES (?, ?)" | 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 = ?" | query7 = "UPDATE updates SET update_time = ? WHERE update_service = ?" | ||||
| synchronize_sites_with_db(cursor, languages, query1, query2, query3) | synchronize_sites_with_db(cursor, languages, query1, query2, query3) | ||||
| synchronize_sites_with_db(cursor, projects, query4, query5, query6) | synchronize_sites_with_db(cursor, projects, query4, query5, query6) | ||||
| @@ -174,6 +171,16 @@ | |||||
| cursor.executemany(q_rmv, removals) | cursor.executemany(q_rmv, removals) | ||||
| cursor.executemany(q_update, updates) | 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): | def highlight_delta(chain, delta): | ||||
| processed = [] | processed = [] | ||||
| prev_prev = prev = chain.START | prev_prev = prev = chain.START | ||||