diff --git a/common.py b/common.py index 742a164..4c114a8 100644 --- a/common.py +++ b/common.py @@ -1,4 +1,5 @@ import airspeed, os, html +from sanic import response try: from html5print import HTMLBeautifier except ModuleNotFoundError: @@ -87,40 +88,33 @@ def withResource(path, binary=False): content = readfile(os.path.join(config.resourcedir, path), binary) else: content = data - if "file" in kwargs: - kwargs["file"][os.path.basename(path)] = content - else: - kwargs["file"] = {os.path.basename(path): content} - return func(*args, **kwargs) + return func(*args, content, **kwargs) return newfunc return decorator -def withTemplate(path, isHTML=True): +def mergeTemplate(path): filename = os.path.join(config.resourcedir, path) if config.cache: template = airspeed.Template(readfile(filename), filename) def decorator(func): - def newfunc(*args, **kwargs): - if not config.cache: - t = airspeed.Template(readfile(filename), filename) + async def newfunc(*args, **kwargs): + if config.cache: + tem = template else: - t = template - - class T: - def merge(self, objects): - objects.update({"escape_html":escape_html, "escape_url":escape_url}) - if config.prettifyHTML and isHTML: - return HTMLBeautifier.beautify( - t.merge(objects, loader=VelocityFileLoader()), - indent=4)#.replace("/>", ">") - else: - return t.merge(objects, loader=VelocityFileLoader()) - - if "template" in kwargs: - kwargs["template"][os.path.basename(path)] = T() + tem = airspeed.Template(readfile(filename), filename) + + objects = await func(*args, **kwargs) + + objects.update({ + "escape_html": escape_html, + "escape_url":escape_url}) + + if config.prettifyHTML: + return response.html(HTMLBeautifier.beautify( + tem.merge(objects, loader=VelocityFileLoader()), + indent = 4))#.replace("/>", ">") else: - kwargs["template"] = {os.path.basename(path): T()} - return func(*args, **kwargs) + return response.html(tem.merge(objects, loader=VelocityFileLoader())) return newfunc return decorator diff --git a/server.py b/server.py index 7c0f8e4..c11cff5 100755 --- a/server.py +++ b/server.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 import sys, os, airspeed, glob from sanic import Sanic, response -from common import withTemplate, withResource, call +from common import mergeTemplate, withResource, call import card import svg import config @@ -14,8 +14,8 @@ async def root(request): @app.get("/cards/") @app.post("/cards/") -@withTemplate("cards/cardlist.vm") -async def show_cardlist(request, template={}): +@mergeTemplate("cards/cardlist.vm") +async def show_cardlist(request): if "action" in request.form and "filename" in request.form: with card.open_file(request.form.get("filename")) as c: if request.form.get("action") == "increment_stock": @@ -56,11 +56,11 @@ async def show_cardlist(request, template={}): sum_cp = sum(int(i.copies_owned) * int(i.cp or 0) for i in cards) sum_copies = sum(int(i.copies_owned) for i in cards) - return response.html(template["cardlist.vm"].merge(locals())) + return locals() @app.get('/cards/creator') -@withTemplate("cards/creator.vm") -async def preview_card(request, template={}): +@mergeTemplate("cards/creator.vm") +async def show_creator(request): if "filename" in request.args: initialcard = card.from_file(str(request.args["filename"][0])+".yaml") else: @@ -79,11 +79,11 @@ async def preview_card(request, template={}): #initialcard.effects = "" #initialcard.flags = "" - return response.html(template["creator.vm"].merge({"card":initialcard})) + return {"card":initialcard} @app.post('/cards/creator') -@withTemplate("cards/creator.vm") -async def preview_card(request, template={}): +@mergeTemplate("cards/creator.vm") +async def show_creator(request):#not used atm initialcard = card.from_form(request.form) #find vacant fileame: @@ -94,11 +94,11 @@ async def preview_card(request, template={}): initialcard.filename = "card-%s" % str(i).zfill(4) break i += 1 - return response.html(template["creator.vm"].merge({"card":initialcard})) + return {"card":initialcard} @app.get('/cards/show') -@withTemplate("cards/card.vm") -async def show_cards(request, template={}): +@mergeTemplate("cards/card.vm") +async def show_cards(request): if "card" not in request.args: return response.redirect('/cards/') @@ -107,11 +107,11 @@ async def show_cards(request, template={}): if "/" in i or "\\" in i: return response.redirect('/cards/') cards.append(card.from_file(i+".yaml")) - return response.html(template["card.vm"].merge(locals())) + return locals() @app.post('/cards/preview') -@withTemplate("cards/card.vm") -async def preview_card(request, template={}): +@mergeTemplate("cards/card.vm") +async def preview_card(request): cards = [card.from_form(request.form)] if "save" in request.form: card.to_file(cards[0]) @@ -119,11 +119,11 @@ async def preview_card(request, template={}): if "delete" in request.form: card.del_file(cards[0]) was_deleted = True - return response.html(template["card.vm"].merge(locals())) + return locals() @app.get("/cards/svg") -@withTemplate("cards/svg.vm") -async def svg_list(request, template={}): +@mergeTemplate("cards/svg.vm") +async def svg_list(request): filter = request.args.get("filter") page = int(request.args.get("page") or 1) current_collection = request.args.get("collection") @@ -140,11 +140,11 @@ async def svg_list(request, template={}): svgs.sort() svgs = svgs[(page-1)*config.svg_page_size:page*config.svg_page_size] - return response.html(template["svg.vm"].merge(locals())) + return locals() @app.post("/cards/svg") -@withTemplate("cards/svg.vm") -async def svg_add(request, template={}): +@mergeTemplate("cards/svg.vm") +async def svg_add(request): file = request.files.get("file") name = request.form.get("name") or file.name if name[-4:] == ".svg": name = name[:-4] @@ -153,7 +153,7 @@ async def svg_add(request, template={}): uploaded = True svgs = svg.list_all() - return response.html(template["svg.vm"].merge(locals())) + return locals() #add static resources (with caching): for file in glob.iglob(os.path.join(config.resourcedir, "**","*"), recursive=True): @@ -168,8 +168,7 @@ for file in glob.iglob(os.path.join(config.resourcedir, "**","*"), recursive=Tru @app.get(f"/{route}") @withResource(route) - async def card_style(request, file={}): - file = tuple(file.values())[0] + async def card_style(request, file): return response.text(file, headers={"Content-Type": f"text/{filetype}"}) #add svgs: