From 5d4049f7f9de2507c18702fd3892548850eae6d5 Mon Sep 17 00:00:00 2001 From: Julian T Date: Mon, 5 Apr 2021 18:14:01 +0200 Subject: Reworked the config structure --- build.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 59 insertions(+), 20 deletions(-) (limited to 'build.py') diff --git a/build.py b/build.py index 0759deb..42d8390 100755 --- a/build.py +++ b/build.py @@ -1,11 +1,12 @@ #!/usr/bin/env python3 import jinja2 -from PIL import Image +import PIL.Image import argparse import yaml import os import re import hashlib +import glob imagereg = re.compile("([a-z0-9]*)\\..*") resreg = re.compile("([0-9]*)x([0-9]*)") @@ -77,8 +78,8 @@ class ImageLocation: fname = f"{thash}.{settings['ext']}" print(f"Converting file {imgname} to {fname}") - im = Image.open(imgname) - im = im.resize(settings["res"], Image.ANTIALIAS) + im = PIL.Image.open(imgname) + im = im.resize(settings["res"], PIL.Image.ANTIALIAS) tmpname = f"{self.tmpname}.{settings['ext']}" im.save(tmpname) @@ -109,17 +110,23 @@ class ImageLocation: print(f"Removing file {fname}") os.remove(fname) +class Image: + def __init__(self, filename): + self.name = os.path.basename(filename) + self.filename = filename + self.description = "" + self.scaledpath = "" + self.fullurl = "" + + + +class Loader: + def __init__(self, config_file, loadpath): + self.config = Loader.__load_config(config_file) -class Renderer: - def __init__(self, config_file, loadpath, resolution, extension): - self.config = Renderer.__load_config(config_file) self.loadpath = loadpath - self.scaled = None - self.settings = { - "res": parse_res(resolution), - "ext": extension, - } + self.images = [] def __load_config(config_file): config = {} @@ -129,28 +136,59 @@ class Renderer: print(f"Loaded config: {config}") return config - def imgfetch_gen(self, loc, dest): - def fn(img): - return loc.fetch(img, self.settings, relto=dest) + def load(self, imagehook=None, clear=False): + # Clear if neccesary + if clear: + self.images = [] + + # First find all images from glob + for image in glob.iglob(os.path.join(self.loadpath, self.config["imageglob"])): + img = Image(image) + img.description = self.config["info"].get(img.name, "") - return fn + if imagehook is not None: + img = imagehook(img) + + self.images.append(img) + + +class Renderer: + def __init__(self, loader, resolution, extension): + self.loader = loader + self.scaled = None + + self.settings = { + "res": parse_res(resolution), + "ext": extension, + } def build_to(self, dest, template, context, loc=None, clean=False): + # Load images if loc is None: loc = ImageLocation(os.path.join(dest, "imgs")) + def imgproc(img): + if context["cgit"] is not None: + img.fullurl = os.path.join(context["cgit"], "plain", img.name) + + img.scaledpath = loc.fetch(img.filename, self.settings, relto=dest) + + return img + + self.loader.load(imgproc, clear=True) + jenv = jinja2.Environment( loader=FileLoader(), autoescape=jinja2.select_autoescape(['html', 'xml']) ) - jenv.globals.update( - imgfetch=self.imgfetch_gen(loc, dest) - ) tmpl = jenv.get_template(template) with open(os.path.join(dest, "index.html"), "w") as f: - f.write(tmpl.render({**self.config, **context})) + f.write(tmpl.render({ + "ctx": context, + "images": self.loader.images + })) if clean: loc.clean() @@ -174,5 +212,6 @@ context = { "git": args.commit } -rend = Renderer(args.config, args.load, args.size, args.ext) +loader = Loader(args.config, args.load) +rend = Renderer(loader, args.size, args.ext) rend.build_to(args.dest, args.template, context, clean=args.clean) -- cgit v1.2.3