mediaCCCcollectionUI/generate.py

79 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
from pathlib import Path
import sys
source = Path(sys.argv[1])
source_videos = source / "videos"
out_tags = {}
out_videos = {}
for video in source_videos.iterdir():
if video.is_dir():
slug = video.name
if slug not in out_videos:
out_videos[slug] = {
"tags": [],
}
tagfile = video / "tags"
if not tagfile.is_dir():
with tagfile.open() as tags:
for tag in tags.readlines():
tag = tag.strip()
out_videos[slug]["tags"].append(tag)
if tag not in out_tags:
out_tags[tag] = {
"videos": [],
"count_videos": None,
}
out_tags[tag]["videos"].append(slug)
for tag in out_tags:
out_tags[tag]["count_videos"] = len(out_tags[tag]["videos"])
print(out_tags)
from jinja2 import Environment, FileSystemLoader, select_autoescape
env = Environment(
loader=FileSystemLoader('./templates'),
autoescape=select_autoescape(['html'])
)
from datetime import datetime
import random
# Output
# Create output dir
out_dir = Path("./out")
out_dir.mkdir(parents=True, exist_ok=True)
# Create main page
templ = env.get_template('index.html')
templ.stream(featured_tags=random.sample(list(out_tags), 6), out_tags=out_tags, out_videos=out_videos).dump(str((out_dir / "index.html").resolve()))
# Create about pages
out_dir_about = out_dir / "about"
out_dir_about.mkdir(parents=True, exist_ok=True)
# Create about page
templ = env.get_template('about.html')
templ.stream(last_update=datetime.now().strftime("%Y-%m-%d %H:%M:%S")).dump(str((out_dir_about / "index.html").resolve()))
# Create tag pages
out_dir_tag = out_dir / "tag"
out_dir_tag.mkdir(parents=True, exist_ok=True)
# Create tag page
templ = env.get_template('tags.html')
templ.stream(sorted_tags=sorted(out_tags), out_tags=out_tags, out_videos=out_videos).dump(str((out_dir_tag / "index.html").resolve()))
templ = env.get_template('tag.html')
for tag, tag_obj in out_tags.items():
out_dir_tag_this = out_dir_tag / tag
out_dir_tag_this.mkdir(parents=True, exist_ok=True)
templ.stream(tag=tag, slugs=tag_obj["videos"], out_tags=out_tags, out_videos=out_videos).dump(str((out_dir_tag_this / "index.html").resolve()))