#!/usr/bin/python3
"""!@brief:generates static html imagelibrary
@author: Luzia Christiane Tesar
"""
import os
import sys
import glob
# import exif
from PIL import Image
import argparse
import configparser
from pathlib import Path
import datetime
BUILD_DIR = Path("./build")
CONF_DIR = Path("./conf")
THUMBSIZE = (300, 300)
GLOBALNAME = "Chrissys random Imagelibrary"
AUTHOR = "Luzia Christiane Tesar"
LANGUAGE = "en"
DESCRIPTION = ""
TODAY = datetime.datetime.today().strftime("%Y-%m-%d")
CANONICALURL = "https://dm2lct.radio"
class HTML:
def __init__(self, **kwargs):
self.header = Path(CONF_DIR / "header.html").read_text()
self.footer = Path(CONF_DIR / "footer.html").read_text()
for key, value in kwargs.items():
setattr(self, key, value)
def title(self, title):
return f"""
{title}
\n"""
def par(self, text):
return f"""{text}
\n"""
def div(self, divclass):
return f"""\n"""
def endDiv(self):
return f"""
\n"""
def img(self, src, alt=None, width=None, title=None):
return f"""
\n"""
def aimg(self, src, dest, alt=None, width=None, title=None):
return f"""
\n"""
def link(self, dest, data):
return f"""{data}"""
def headermeta(self, title):
header = self.header.replace("{{title}}", title)
header = header.replace("{{cannonical_url}}", CANONICALURL)
header = header.replace("{{global_name}}", GLOBALNAME)
header = header.replace("{{global_name}}", GLOBALNAME)
header = header.replace("{{author}}", AUTHOR)
header = header.replace("{{language}}", LANGUAGE)
header = header.replace("{{description}}", DESCRIPTION)
header = header.replace("{{published_date}}", TODAY)
return header
def writeIndex(self, indir, odir, title):
with open(f"{odir}/index.html", "w", encoding="utf-8") as file:
breakpoint()
file.write(self.headermeta(title))
file.write(self.title(title))
file.write(self.div("row"))
imglist = glob.glob(str(odir) + "/.thumbnails/*")
for n in range(0,3):
file.write(self.div("column"))
for i in range(n, len(imglist),3):
file.write(
self.aimg(
imglist[i].removeprefix(str(odir) + "/"),
imglist[i].removeprefix(str(odir) + "/.thumbnails/"),
)
)
file.write(self.endDiv())
file.write(self.endDiv())
file.write(self.footer)
def writeDetail(self, img, previmg, nextimg):
with open(f"build/{self.outfolder}/index.html", "w", encoding="utf-8") as file:
file.write(self.headermeta(title))
file.write(self.title(title))
file.write(self.img(image))
file.write(self.footer)
def writeMain(self):
with open(f"{str(BUILD_DIR)}/index.html", "w", encoding="utf-8") as file:
title="Chrissys random Imagelibrary"
file.write(self.headermeta(title))
file.write(self.title(title))
dirlist = [x[0] for x in os.walk(BUILD_DIR)]
for root, dirs, files in os.walk(BUILD_DIR):
for n in range(0,3):
file.write(self.div("column"))
for i in range(n, len(dirlist),3):
file.write(
self.aimg(
dirlist[i].removeprefix(str(BUILD_DIR) + "/"),
dirlist[i].removeprefix(str(BUILD_DIR) + "/"),
)
)
file.write(self.endDiv())
file.write(self.endDiv())
file.write(self.footer)
class EXIF:
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
class IMG:
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
def createThumb(img, thumbdir):
file = Path(img).stem
with Image.open(img) as im:
im.thumbnail(THUMBSIZE)
im.convert("RGB").save(str(thumbdir) + "/" + file + ".jpg", "JPEG")
def processImage(img, odir):
file = Path(img).stem
with Image.open(img) as im:
im.convert("RGB").save(str(odir) + "/" + file + ".jpg", "JPEG")
def generateDir(path):
Path(BUILD_DIR / path.name).mkdir(parents=True, exist_ok=True)
Path(BUILD_DIR / path.name / ".thumbnails").mkdir(parents=True, exist_ok=True)
return Path(BUILD_DIR / path.name), Path(BUILD_DIR / path.name / ".thumbnails")
if __name__ == "__main__":
parser = argparse.ArgumentParser(
prog="PurrPic",
description="Creates a static image gallery from a given Filelist",
epilog="Meow! =^.^=",
)
parser.add_argument(
"--inpath",
type=lambda p: Path(p).absolute(),
help="",
)
parser.add_argument(
"--outpath",
type=lambda p: Path(p).absolute(),
help="",
)
parser.add_argument(
"--start",
"-s",
type=str,
help="",
)
args = parser.parse_args()
print(args.inpath)
odir, thumbdir = generateDir(args.inpath)
for img in glob.glob(str(args.inpath) + "/*"):
print(img)
createThumb(img, thumbdir)
processImage(img, odir)
html = HTML()
html.writeIndex(thumbdir, odir, "eh23")
html.writeMain()
print(odir, thumbdir)
# for image in args.inpath: