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]))
|
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:
|
||||||
|
@ -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()
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user