khaganat-web/navbar/management/commands/navbar_export.py
2019-07-24 19:07:41 +02:00

75 lines
2.7 KiB
Python

from django.core.management.base import BaseCommand, CommandError
from django.template.loader import render_to_string
from django.conf import settings
from navbar.templatetags.navbar import get_base_context
import os
class Command(BaseCommand):
help = "Generates the CSS files used by Pygments"
def export_static(self, curr_lang):
self.stdout.write("Plain HTML export for language %s" % curr_lang)
output_dir = os.path.join(self.export_dir, "html")
output_file = "khanav_%s.html" % curr_lang
os.makedirs(output_dir, mode=0o755, exist_ok=True)
with open(os.path.join(output_dir, output_file), "w") as f:
ctx = get_base_context(curr_lang, "/")
html = render_to_string("navbar/navbar.html", ctx)
f.write(html)
def export_docuwiki(self, langs):
self.stdout.write("Docuwiki export for languages %s" % ", ".join(langs))
output_langs = []
for lang in langs:
ctx = get_base_context(lang, "/")
output_langs.append(
{"name": lang, "html": render_to_string("navbar/navbar.html", ctx)}
)
output_dir = os.path.join(self.export_dir, "docuwiki")
os.makedirs(output_dir, mode=0o755, exist_ok=True)
with open(os.path.join(output_dir, "khanav.php"), "w") as f:
f.write(
render_to_string(
"navbar/export_docuwiki.html", {"output_langs": output_langs}
)
)
def add_arguments(self, parser):
parser.add_argument(
"--dir",
"-d",
help="Export directory.",
default=os.path.join(settings.BASE_DIR, "build/navbar"),
dest="export_dir",
)
parser.add_argument(
"--lang", "-l", help="Language to export.", action="append", dest="langs"
)
parser.add_argument(
"--plain",
"--html",
help="Export for plain HTML.",
action="store_true",
dest="static",
)
parser.add_argument(
"--docuwiki",
help="Export for docuwiki.",
action="store_true",
dest="docuwiki",
)
def handle(self, *args, **options):
if options["langs"] is None:
raise CommandError("No language specified.")
if "all" in options["langs"]:
options["langs"] = [name for name, _ in settings.LANGUAGES]
self.export_dir = options["export_dir"]
if options["static"]:
for lang in options["langs"]:
self.export_static(lang)
if options["docuwiki"]:
self.export_docuwiki(options["langs"])
self.stdout.write(self.style.SUCCESS("Ok."))