diff --git a/MANIFEST.in b/MANIFEST.in index f175f78..3f5e609 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,2 +1,4 @@ graft static prune static/screenshots + +recursive-include src *.j2 diff --git a/src/dcow/app.py b/src/dcow/app.py index 541395c..b277443 100644 --- a/src/dcow/app.py +++ b/src/dcow/app.py @@ -4,10 +4,15 @@ import os import milla.util +DEFAULT_CONFIG = { + 'gallery.screenshot_dir': 'screenshots', +} + + class Application(milla.Application): def __init__(self, config=None): - self.config = {} + self.config = DEFAULT_CONFIG.copy() if config and os.access(config, os.R_OK): self.config.update(milla.util.read_config(config)) self.config['milla.favicon'] = False diff --git a/src/dcow/gallery.py b/src/dcow/gallery.py index f7f1509..cc57ca5 100644 --- a/src/dcow/gallery.py +++ b/src/dcow/gallery.py @@ -1,8 +1,48 @@ +import jinja2 import milla.controllers +import os + + +DEFAULT_EXTENSIONS = [ + '.jpg', + '.jpeg', + '.png', + '.bmp', + '.gif', + '.tiff', + '.tif', +] + +TMPL_LOADER = jinja2.PackageLoader(__name__.rsplit('.', 1)[0]) + + +def render(request, template, context=None): + if context is None: + context = {} + env = jinja2.Environment(loader=TMPL_LOADER) + env.globals.update( + url=request.create_href, + static=request.static_resource, + ) + return env.get_template(template).render(**context) + + +def get_images(path, extensions=None): + if extensions is None: + extensions = DEFAULT_EXTENSIONS + try: + for f in os.listdir(path): + if os.path.splitext(f)[1] in extensions: + yield f + except OSError: + raise StopIteration class GalleryController(milla.controllers.HTTPVerbController): def GET(self, request): response = request.ResponseClass() + response.text = render(request, 'gallery.html.j2', { + 'images': get_images(request.config['gallery.screenshot_dir']), + }) return response diff --git a/src/dcow/templates/gallery.html.j2 b/src/dcow/templates/gallery.html.j2 new file mode 100644 index 0000000..76c7329 --- /dev/null +++ b/src/dcow/templates/gallery.html.j2 @@ -0,0 +1,29 @@ + + + +
+ +