summaryrefslogtreecommitdiff
path: root/build.py
diff options
context:
space:
mode:
authorJulian T <julian@jtle.dk>2021-04-05 18:14:01 +0200
committerJulian T <julian@jtle.dk>2021-04-05 18:14:01 +0200
commit5d4049f7f9de2507c18702fd3892548850eae6d5 (patch)
tree9a845f4fedcd2f0ebfcbb0b8ce273a8df0d6d64a /build.py
parentce4983421e2d4bad3a4e563920f46f210aad7334 (diff)
Reworked the config structure
Diffstat (limited to 'build.py')
-rwxr-xr-xbuild.py79
1 files changed, 59 insertions, 20 deletions
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)