[SSG] Add generate_site to generate episodes, copy videos, audios.
This commit is contained in:
parent
97c898acdb
commit
8b9a367fb4
52
nova.py
52
nova.py
|
@ -8,6 +8,7 @@ import os
|
|||
import os.path as path
|
||||
import re
|
||||
import subprocess
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
import jinja2
|
||||
|
@ -44,18 +45,52 @@ class EpisodeList(UserList):
|
|||
def generate_atom(self):
|
||||
"Generates the Atom feed"
|
||||
|
||||
def generate_site(self):
|
||||
"Generates the entire "
|
||||
def generate_site(self, root):
|
||||
"Generates the entire site"
|
||||
# Generate CSS from SCSS
|
||||
subprocess.run(["sass", "--update", f"{root}scss:{root}assets/css"],
|
||||
check=True)
|
||||
# Copy the existing assets
|
||||
shutil.copytree(root + "assets", self.output + "assets",
|
||||
dirs_exist_ok=True)
|
||||
# Create the required directories
|
||||
paths = [
|
||||
"assets",
|
||||
"assets/audios",
|
||||
"assets/videos",
|
||||
]
|
||||
for directory in paths:
|
||||
if not path.isdir(self.output + directory):
|
||||
os.mkdir(self.output + directory)
|
||||
|
||||
# Render episodes and copy data
|
||||
for episode in self.data:
|
||||
html = f"{self.output}{gen_name(episode.date, episode.slug)}.html"
|
||||
thumbnail = ("assets/thumbnails/" +
|
||||
gen_name(episode.date, episode.slug) + ".jpg")
|
||||
video = (self.output + "assets/videos/" +
|
||||
gen_name(episode.date, episode.slug) + ".mp4")
|
||||
audio = (self.output + "assets/audios/" +
|
||||
gen_name(episode.date, episode.slug) + ".mp3")
|
||||
shutil.copy2(episode.video, video)
|
||||
shutil.copy2(episode.audio, audio)
|
||||
with open(html, "w") as file:
|
||||
file.write(episode.render(self.template, thumbnail))
|
||||
|
||||
last = self.data[-1]
|
||||
last_name = self.output + gen_name(last.date, last.slug) + ".html"
|
||||
shutil.copy2(last_name, self.output + "index.html")
|
||||
|
||||
|
||||
class Episode:
|
||||
"Represents one episode of podcast"
|
||||
def __init__(self, date, slug, title, show_notes, video_src):
|
||||
def __init__(self, date, slug, title, show_notes, video_src, audo_src):
|
||||
self.date = date
|
||||
self.slug = slug
|
||||
self.title = title
|
||||
self.title = title.strip()
|
||||
self.show_notes = markdown.markdown(show_notes)
|
||||
self.video = video_src
|
||||
self.audio = audo_src
|
||||
|
||||
def render(self, template, thumbnail_src):
|
||||
"Renders the Episode with the given template"
|
||||
|
@ -63,7 +98,7 @@ class Episode:
|
|||
title=self.title,
|
||||
show_notes=jinja2.Markup(self.show_notes),
|
||||
thumbnail_src=thumbnail_src,
|
||||
video_src=self.video
|
||||
video_src=f"assets/videos/{path.basename(self.video)}"
|
||||
)
|
||||
|
||||
def store_thumbnail(self, location):
|
||||
|
@ -75,7 +110,7 @@ class Episode:
|
|||
|
||||
def main():
|
||||
"Main method"
|
||||
root = path.dirname(sys.argv[0])
|
||||
root = path.dirname(sys.argv[0]).rstrip("/") + "/"
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("input_dir", help="Input directory")
|
||||
parser.add_argument("output_dir", help="Output directory")
|
||||
|
@ -111,12 +146,13 @@ def main():
|
|||
title = episode.readline()
|
||||
show_notes = episode.read()
|
||||
video = input_dir + "videos/" + gen_name(date, slug) + ".mp4"
|
||||
podcast.append(Episode(date, slug, title, show_notes, video))
|
||||
audio = input_dir + "audios/" + gen_name(date, slug) + ".mp3"
|
||||
podcast.append(Episode(date, slug, title, show_notes, video, audio))
|
||||
|
||||
podcast.sort()
|
||||
podcast.generate_thumbnails()
|
||||
podcast.generate_atom()
|
||||
podcast.generate_site()
|
||||
podcast.generate_site(root)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Reference in New Issue