57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
|
|
import urllib.parse
|
|
import os
|
|
import re
|
|
|
|
from flask import Flask, render_template
|
|
from flask_pymongo import PyMongo
|
|
|
|
app = Flask(__name__)
|
|
app.config["MONGO_URI"] = os.environ["MONGO_URI"]
|
|
mongo = PyMongo(app)
|
|
|
|
@app.template_filter('filter_vtt')
|
|
def filter_vtt(text):
|
|
compendium_re = re.compile(r"@Compendium\[([^\]]+)\]\{([^\}]+)\}")
|
|
def compendium_return(m):
|
|
return f"<a>{m.group(2)}</a>"
|
|
macro_re = re.compile(r"\[\[\/\S?r\s(?:(?P<sdice>[^\{\] ]+)[^\{\]]*|(?:\{(?P<ldice>[^\}]+)\}\[[^\]]+\])?)\]\](?:\{(?P<alt>[^\}]+)\})?")
|
|
def macro_return(m):
|
|
if m.group('alt') is not None:
|
|
return m.group('alt')
|
|
return m.group('sdice')
|
|
text = compendium_re.sub(compendium_return, text)
|
|
text = macro_re.sub(macro_return, text)
|
|
return text
|
|
|
|
@app.route("/")
|
|
def list_types():
|
|
types = [ {"name": "Actions", "href": "action"} ]
|
|
return render_template("list.html", header="All types", items=types)
|
|
|
|
@app.route("/action")
|
|
def list_actions():
|
|
items = list(map(lambda x: {"name": x["name"], "href": "./action/" + urllib.parse.quote(x["name"], safe='')}, mongo.db.action.find({}, {"name": 1}).sort("name", 1)))
|
|
return render_template("list.html", header="All actions", items=items)
|
|
|
|
@app.route("/action/<name>")
|
|
def show_action(name):
|
|
item = mongo.db.action.find_one_or_404({"name": name})
|
|
if item["data"]["actions"]["value"] == None:
|
|
if item["data"]["actionType"]["value"] == 'passive':
|
|
item['_action_icon'] = None
|
|
elif item["data"]["actionType"]["value"] == 'reaction':
|
|
item['_action_icon'] = 'r'
|
|
elif item["data"]["actionType"]["value"] == 'free':
|
|
item['_action_icon'] = 0
|
|
else:
|
|
raise ValueError(f'Unknown action type: {item["data"]["actionType"]["value"]}')
|
|
elif item["data"]["actions"]["value"] in (1,2,3):
|
|
item['_action_icon'] = item["data"]["actions"]["value"]
|
|
else:
|
|
raise ValueError(f'Unknown action: {item["data"]["actionType"]["value"]} - {item["data"]["actions"]["value"]}')
|
|
|
|
return render_template("action.html", action=item)
|
|
|
|
if __name__ == "__main__":
|
|
app.run() |