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]))
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):
thread.subject = html.unescape(thread.subject)
return thread
@ -61,7 +76,7 @@ class ArchiveGenerator():
categories = {}
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)
for page in wiki.get_pages():
try:

View File

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

View File

@ -181,10 +181,9 @@ def render (wikitext, base="", linker=None):
return "".join(rendered).strip().replace("\n\n", "<br /><br />")
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.interwiki_namespaces = interwiki_namespaces
self.directory_names = directory_names
def translate_interwiki_title (self, page_title):
for namespace, url in self.interwiki_namespaces.items():
@ -194,15 +193,8 @@ class Linker():
def translate_page_title (self, page_title):
if page_title.startswith(CATEGORY_LINK_NAMESPACE):
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):
for namespace in self.file_namespaces: