#!/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()))