summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.py79
-rw-r--r--imginfo.yml40
-rw-r--r--index.html.j224
3 files changed, 81 insertions, 62 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)
diff --git a/imginfo.yml b/imginfo.yml
index fbcc628..4230883 100644
--- a/imginfo.yml
+++ b/imginfo.yml
@@ -1,30 +1,10 @@
-posts:
- - imgs:
- - kirke.jpg
- text: Kirke i Århus
- - imgs:
- - bi.jpg
- - imgs:
- - olie.jpg
- text: Boreplatform i Grenå
- - imgs:
- - bakker.jpg
- - imgs:
- - vindmøller.jpg
- - imgs:
- - vinge.jpg
- - imgs:
- - blomster2.jpg
- - blomster.jpg
- - blomster3.jpg
- - imgs:
- - maskiner.jpg
- text: Taget ved Tangeværket.
- - imgs:
- - Struktur.jpg
- text: Taget ved Dwingeloo Radiotelescoop.
- - imgs:
- - bænk.jpg
- text: Taget ved fyrtårn på Helgenæs.
- - imgs:
- - saks.jpg
+imageglob: "*.jpg"
+info:
+ kirke.jpg:
+ desc: Kirke i Århus
+ olie.jpg:
+ desc: Boreplatform i Grenå
+ maskiner.jpg:
+ desc: Gammel generator ved Tangeværket
+ Struktur.jpg:
+ desc: Restaureret radiotelescoop i Dwingeloo
diff --git a/index.html.j2 b/index.html.j2
index fde5f4b..cc7dc28 100644
--- a/index.html.j2
+++ b/index.html.j2
@@ -19,29 +19,29 @@
<body>
<p>Billeder taget på forskellige ferier etc, som jeg bruger til baggrund.</p>
- {% if cgit is not none %}
+ {% if ctx.cgit is not none %}
<p>Klik på et billede for at få fuld opløsning.
Højere opløsning samt licens kan også findes her <a href="{{ cgit }}/tree">her</a>.</p>
{% endif %}
- {% for post in posts %}
+
+ {% for img in images %}
<div class="post">
- <p>{{ post.text }}</p>
- {% for img in post.imgs %}
- {% if cgit is not none %}
- <a href="{{cgit}}/plain/{{img}}">
- <img src="{{ imgfetch(img) }}" />
+ {% if img.description is not none %}
+ <p>{{ img.description }}</p>
+ {% endif %}
+ {% if img.fullurl is not none %}
+ <a href="{{ img.fullurl }}">
+ <img src="{{ img.scaledpath }}" />
</a>
{% else %}
- <img src="{{ imgfetch(img) }}" />
+ <img src="{{ img.scaledpath }}" />
{% endif %}
-
- {% endfor %}
</div>
{% endfor %}
- {% if git is not none %}
- <p>Bygget fra commit {{ git }}</p>
+ {% if ctx.git is not none %}
+ <p>Bygget fra commit {{ ctx.git }}</p>
{% endif %}
</body>
</html>