med/media/management/commands/export_markdown_site.py

68 lines
3.0 KiB
Python
Raw Normal View History

from argparse import FileType
from sys import stdin
from django.core.management import BaseCommand
from media.models import BD, CD, Manga, Revue, Roman, Vinyle
class Command(BaseCommand):
"""
Extract the database into a user-friendly website written in Markdown.
"""
def add_arguments(self, parser):
parser.add_argument('--directory', '-d', type=str, default='.',
help="Directory where mkdocs is running.")
def handle(self, *args, **options):
directory = options["directory"]
for model_class, file_name in [(BD, "bd.md"), (Manga, "mangas.md"), (Roman, "romans.md"),
2020-10-26 13:27:43 +00:00
(CD, "cd.md"), (Vinyle, "vinyle.md")]:
with open(directory + "/docs/" + file_name, "w") as f:
2020-10-26 13:29:55 +00:00
f.write("# " + str(model_class._meta.verbose_name))
2020-10-26 13:27:43 +00:00
titles = list(set(obj["title"] for obj in model_class.objects.values("title").distinct().all()))
titles.sort()
for title in titles:
f.write(f"## {title}\n\n\n")
for medium in model_class.objects.filter(title=title).order_by("side_identifier").all():
if hasattr(medium, "subtitle"):
f.write(f"### {medium.subtitle}\n\n\n")
if hasattr(medium, "isbn"):
f.write(f"ISBN : {medium.isbn}\n\n")
f.write(f"Cote : {medium.side_identifier}\n\n")
f.write("Auteurs : " + ", ".join(author.name for author in medium.authors.all()) + "\n\n")
if hasattr(medium, "number_of_pages"):
f.write(f"Nombre de pages : {medium.number_of_pages}\n\n")
if hasattr(medium, "rpm"):
f.write(f"Tours par minute : {medium.rpm}\n\n")
if hasattr(medium, "publish_date"):
f.write(f"Publié le : {medium.publish_date}\n\n")
if hasattr(medium, "external_url"):
f.write(f"Lien : [{medium.external_url}]({medium.external_url})\n\n")
f.write("\n\n\n")
2020-10-26 13:27:43 +00:00
# Traitement différent pour les revues
with open(directory + "/docs/revues.md", "w") as f:
f.write("# Revues")
titles = list(set(obj["title"] for obj in Revue.objects.values("title").distinct().all()))
titles.sort()
for title in titles:
f.write(f"## {title}\n\n\n")
for medium in Revue.objects.filter(title=title).order_by("number").all():
f.write(f"### Numéro {medium.number}\n\n\n")
if medium.double:
f.write("Double revue\n\n")
if medium.year:
f.write(f"Année : {medium.year}\n\n")
if medium.month:
f.write(f"Mois : {medium.month}\n\n")
if medium.day:
f.write(f"Jour : {medium.day}\n\n")
f.write("\n\n\n")