Simplify withResource, replace withTemplate with mergeTemplate

This commit is contained in:
2017-11-16 23:03:34 +01:00
parent 944865be1c
commit 897fc6b5a2
2 changed files with 42 additions and 49 deletions
+17 -23
View File
@@ -1,4 +1,5 @@
import airspeed, os, html import airspeed, os, html
from sanic import response
try: try:
from html5print import HTMLBeautifier from html5print import HTMLBeautifier
except ModuleNotFoundError: except ModuleNotFoundError:
@@ -87,40 +88,33 @@ def withResource(path, binary=False):
content = readfile(os.path.join(config.resourcedir, path), binary) content = readfile(os.path.join(config.resourcedir, path), binary)
else: else:
content = data content = data
if "file" in kwargs: return func(*args, content, **kwargs)
kwargs["file"][os.path.basename(path)] = content
else:
kwargs["file"] = {os.path.basename(path): content}
return func(*args, **kwargs)
return newfunc return newfunc
return decorator return decorator
def withTemplate(path, isHTML=True): def mergeTemplate(path):
filename = os.path.join(config.resourcedir, path) filename = os.path.join(config.resourcedir, path)
if config.cache: if config.cache:
template = airspeed.Template(readfile(filename), filename) template = airspeed.Template(readfile(filename), filename)
def decorator(func): def decorator(func):
def newfunc(*args, **kwargs): async def newfunc(*args, **kwargs):
if not config.cache: if config.cache:
t = airspeed.Template(readfile(filename), filename) tem = template
else: else:
t = template tem = airspeed.Template(readfile(filename), filename)
class T: objects = await func(*args, **kwargs)
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: objects.update({
kwargs["template"][os.path.basename(path)] = T() "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: else:
kwargs["template"] = {os.path.basename(path): T()} return response.html(tem.merge(objects, loader=VelocityFileLoader()))
return func(*args, **kwargs)
return newfunc return newfunc
return decorator return decorator
+23 -24
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import sys, os, airspeed, glob import sys, os, airspeed, glob
from sanic import Sanic, response from sanic import Sanic, response
from common import withTemplate, withResource, call from common import mergeTemplate, withResource, call
import card import card
import svg import svg
import config import config
@@ -14,8 +14,8 @@ async def root(request):
@app.get("/cards/") @app.get("/cards/")
@app.post("/cards/") @app.post("/cards/")
@withTemplate("cards/cardlist.vm") @mergeTemplate("cards/cardlist.vm")
async def show_cardlist(request, template={}): async def show_cardlist(request):
if "action" in request.form and "filename" in request.form: if "action" in request.form and "filename" in request.form:
with card.open_file(request.form.get("filename")) as c: with card.open_file(request.form.get("filename")) as c:
if request.form.get("action") == "increment_stock": 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_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) 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') @app.get('/cards/creator')
@withTemplate("cards/creator.vm") @mergeTemplate("cards/creator.vm")
async def preview_card(request, template={}): async def show_creator(request):
if "filename" in request.args: if "filename" in request.args:
initialcard = card.from_file(str(request.args["filename"][0])+".yaml") initialcard = card.from_file(str(request.args["filename"][0])+".yaml")
else: else:
@@ -79,11 +79,11 @@ async def preview_card(request, template={}):
#initialcard.effects = "" #initialcard.effects = ""
#initialcard.flags = "" #initialcard.flags = ""
return response.html(template["creator.vm"].merge({"card":initialcard})) return {"card":initialcard}
@app.post('/cards/creator') @app.post('/cards/creator')
@withTemplate("cards/creator.vm") @mergeTemplate("cards/creator.vm")
async def preview_card(request, template={}): async def show_creator(request):#not used atm
initialcard = card.from_form(request.form) initialcard = card.from_form(request.form)
#find vacant fileame: #find vacant fileame:
@@ -94,11 +94,11 @@ async def preview_card(request, template={}):
initialcard.filename = "card-%s" % str(i).zfill(4) initialcard.filename = "card-%s" % str(i).zfill(4)
break break
i += 1 i += 1
return response.html(template["creator.vm"].merge({"card":initialcard})) return {"card":initialcard}
@app.get('/cards/show') @app.get('/cards/show')
@withTemplate("cards/card.vm") @mergeTemplate("cards/card.vm")
async def show_cards(request, template={}): async def show_cards(request):
if "card" not in request.args: if "card" not in request.args:
return response.redirect('/cards/') return response.redirect('/cards/')
@@ -107,11 +107,11 @@ async def show_cards(request, template={}):
if "/" in i or "\\" in i: if "/" in i or "\\" in i:
return response.redirect('/cards/') return response.redirect('/cards/')
cards.append(card.from_file(i+".yaml")) cards.append(card.from_file(i+".yaml"))
return response.html(template["card.vm"].merge(locals())) return locals()
@app.post('/cards/preview') @app.post('/cards/preview')
@withTemplate("cards/card.vm") @mergeTemplate("cards/card.vm")
async def preview_card(request, template={}): async def preview_card(request):
cards = [card.from_form(request.form)] cards = [card.from_form(request.form)]
if "save" in request.form: if "save" in request.form:
card.to_file(cards[0]) card.to_file(cards[0])
@@ -119,11 +119,11 @@ async def preview_card(request, template={}):
if "delete" in request.form: if "delete" in request.form:
card.del_file(cards[0]) card.del_file(cards[0])
was_deleted = True was_deleted = True
return response.html(template["card.vm"].merge(locals())) return locals()
@app.get("/cards/svg") @app.get("/cards/svg")
@withTemplate("cards/svg.vm") @mergeTemplate("cards/svg.vm")
async def svg_list(request, template={}): async def svg_list(request):
filter = request.args.get("filter") filter = request.args.get("filter")
page = int(request.args.get("page") or 1) page = int(request.args.get("page") or 1)
current_collection = request.args.get("collection") current_collection = request.args.get("collection")
@@ -140,11 +140,11 @@ async def svg_list(request, template={}):
svgs.sort() svgs.sort()
svgs = svgs[(page-1)*config.svg_page_size:page*config.svg_page_size] 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") @app.post("/cards/svg")
@withTemplate("cards/svg.vm") @mergeTemplate("cards/svg.vm")
async def svg_add(request, template={}): async def svg_add(request):
file = request.files.get("file") file = request.files.get("file")
name = request.form.get("name") or file.name name = request.form.get("name") or file.name
if name[-4:] == ".svg": name = name[:-4] if name[-4:] == ".svg": name = name[:-4]
@@ -153,7 +153,7 @@ async def svg_add(request, template={}):
uploaded = True uploaded = True
svgs = svg.list_all() svgs = svg.list_all()
return response.html(template["svg.vm"].merge(locals())) return locals()
#add static resources (with caching): #add static resources (with caching):
for file in glob.iglob(os.path.join(config.resourcedir, "**","*"), recursive=True): 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}") @app.get(f"/{route}")
@withResource(route) @withResource(route)
async def card_style(request, file={}): async def card_style(request, file):
file = tuple(file.values())[0]
return response.text(file, headers={"Content-Type": f"text/{filetype}"}) return response.text(file, headers={"Content-Type": f"text/{filetype}"})
#add svgs: #add svgs: