Extract archive generator specific linker functionality into ArchiveLinker subclass.

This commit is contained in:
Adrian Kuschelyagi Malacoda 2020-08-27 01:52:17 -05:00
parent 2e73ecd59f
commit ade44491d4
3 changed files with 28 additions and 16 deletions

View File

@ -22,6 +22,21 @@ DEX_TYPES = [
] ]
DEXES = list(chain.from_iterable([[f"{dex_type}{language}" for dex_type in DEX_TYPES] for language in DEX_LANGUAGES])) DEXES = list(chain.from_iterable([[f"{dex_type}{language}" for dex_type in DEX_TYPES] for language in DEX_LANGUAGES]))
class ArchiveLinker(Linker):
def __init__ (self, directory_names=[]):
super().__init__()
self.directory_names = directory_names
def translate_page_title (self, page_title):
page_title = super().translate_page_title(page_title)
for name in self.directory_names:
if page_title.startswith(f"{name}%2F"):
page_title = f"{name}/{page_title[len(name) + 3:]}"
break
return page_title
def prepare_thread (thread): def prepare_thread (thread):
thread.subject = html.unescape(thread.subject) thread.subject = html.unescape(thread.subject)
return thread return thread
@ -61,7 +76,7 @@ class ArchiveGenerator():
categories = {} categories = {}
templates = dict([(page.title.split(":")[1], Template(page.get_latest().text)) for page in wiki.get_pages() if page.namespace == WIKI_NAMESPACES['TEMPLATE']]) templates = dict([(page.title.split(":")[1], Template(page.get_latest().text)) for page in wiki.get_pages() if page.namespace == WIKI_NAMESPACES['TEMPLATE']])
linker = Linker(directory_names=DEXES) linker = ArchiveLinker(directory_names=DEXES)
wikitext_renderer = Renderer(templates, linker) wikitext_renderer = Renderer(templates, linker)
for page in wiki.get_pages(): for page in wiki.get_pages():
try: try:

View File

@ -1,8 +1,13 @@
import argparse import argparse
from flask import Flask, redirect from flask import Flask, redirect, request
app = Flask(__name__) app = Flask(__name__)
## Wiki redirector
@app.route("/wiki/<path:path>")
def redirect_wiki (path):
return redirect(make_wiki_url(path))
def is_wiki_directory_name (name): def is_wiki_directory_name (name):
return "Dex" in name return "Dex" in name
@ -27,13 +32,13 @@ def make_wiki_url (path):
return url + escape_wiki_page_name(path) + ".html" return url + escape_wiki_page_name(path) + ".html"
## Forum redirector
@app.route('/forums/<path:path>') @app.route('/forums/<path:path>')
def redirect_forums (path): def redirect_forums (path):
pass return redirect(make_forum_url(path))
@app.route("/wiki/<path:path>") def make_forum_url (request):
def redirect_wiki (path): return str(request)
return redirect(make_wiki_url(path))
def main (): def main ():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()

View File

@ -181,10 +181,9 @@ def render (wikitext, base="", linker=None):
return "".join(rendered).strip().replace("\n\n", "<br /><br />") return "".join(rendered).strip().replace("\n\n", "<br /><br />")
class Linker(): class Linker():
def __init__ (self, file_namespaces=FILE_NAMESPACES, interwiki_namespaces=INTERWIKI_NAMESPACES, directory_names=[]): def __init__ (self, file_namespaces=FILE_NAMESPACES, interwiki_namespaces=INTERWIKI_NAMESPACES):
self.file_namespaces = file_namespaces self.file_namespaces = file_namespaces
self.interwiki_namespaces = interwiki_namespaces self.interwiki_namespaces = interwiki_namespaces
self.directory_names = directory_names
def translate_interwiki_title (self, page_title): def translate_interwiki_title (self, page_title):
for namespace, url in self.interwiki_namespaces.items(): for namespace, url in self.interwiki_namespaces.items():
@ -194,15 +193,8 @@ class Linker():
def translate_page_title (self, page_title): def translate_page_title (self, page_title):
if page_title.startswith(CATEGORY_LINK_NAMESPACE): if page_title.startswith(CATEGORY_LINK_NAMESPACE):
page_title = page_title[1:] page_title = page_title[1:]
directory_name = ""
for name in self.directory_names:
if page_title.startswith(f"{name}/"):
directory_name = name
page_title = page_title[len(directory_name) + 1:]
break
return f"{reformat_page_title(directory_name)}{'/' if directory_name else ''}{reformat_page_title(page_title)}.html" return f"{reformat_page_title(page_title)}.html"
def translate_image_title (self, page_title): def translate_image_title (self, page_title):
for namespace in self.file_namespaces: for namespace in self.file_namespaces: