Extract archive generator specific linker functionality into ArchiveLinker subclass.
This commit is contained in:
parent
2e73ecd59f
commit
ade44491d4
@ -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:
|
||||
|
@ -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()
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user