diff options
author | Julian T <julian@jtle.dk> | 2021-04-05 18:14:01 +0200 |
---|---|---|
committer | Julian T <julian@jtle.dk> | 2021-04-05 18:14:01 +0200 |
commit | 5d4049f7f9de2507c18702fd3892548850eae6d5 (patch) | |
tree | 9a845f4fedcd2f0ebfcbb0b8ce273a8df0d6d64a /build.py | |
parent | ce4983421e2d4bad3a4e563920f46f210aad7334 (diff) |
Reworked the config structure
Diffstat (limited to 'build.py')
-rwxr-xr-x | build.py | 79 |
1 files changed, 59 insertions, 20 deletions
@@ -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) |