diff --git a/files/helpers/assetcache.py b/files/helpers/assetcache.py new file mode 100644 index 000000000..fa85ba8aa --- /dev/null +++ b/files/helpers/assetcache.py @@ -0,0 +1,20 @@ +import os +import zlib +from collections import defaultdict + +ASSET_DIR = 'files/assets' +ASSET_CACHE = defaultdict(lambda: None) + +def assetcache_build(asset_dir): + for root, dirs, files in os.walk(asset_dir): + for fname in files: + fpath = root + '/' + fname + relpath = fpath[len(asset_dir) + 1:].replace('\\', '/') + with open(fpath, 'rb') as f: + fhash = zlib.crc32(f.read()) + ASSET_CACHE[relpath] = '%x' % fhash + +def assetcache_get(path): + return ASSET_CACHE[path] + +assetcache_build(ASSET_DIR) diff --git a/files/helpers/jinja2.py b/files/helpers/jinja2.py index a0dcddd18..0d9df2a58 100644 --- a/files/helpers/jinja2.py +++ b/files/helpers/jinja2.py @@ -3,6 +3,7 @@ from .get import * from os import listdir, environ from .const import * import time +from files.helpers.assetcache import assetcache_get @app.template_filter("post_embed") def post_embed(id, v): @@ -46,6 +47,15 @@ def timestamp(timestamp): years = int(months / 12) return f"{years}yr ago" +@app.template_filter("asset") +def template_asset(asset_path): + outpath = '/assets/' + asset_path + + cachehash = assetcache_get(asset_path) + if cachehash: + outpath += '?v=' + cachehash + + return outpath @app.context_processor def inject_constants():