from flask import Flask, send_from_directory, render_template from livereload import Server import xml_lexer import re import os app = Flask(__name__) app.jinja_options.setdefault('extensions', []).append('jinja2_highlight.HighlightExtension') TEMPLATES = "templates" PAGES_BASE = "pages" STATIC = ["images"] ROOT = os.environ.get("EA_ROOT", "") def generate_xrpc_list(): output = "" @app.route("/styles.css") def styles(): return send_from_directory(".", "styles.css") @app.route("/tango.css") def tango(): return send_from_directory(".", "tango.css") for i in STATIC: for base, _, files in os.walk(i): for name in files: def handler(base, name): def handler(): return send_from_directory(base, name) return handler local_base = base.replace("\\", "/").strip(".").strip("/") route = local_base + "/" + name if not route.startswith("/"): route = "/" + route handler = handler(base, name) handler.__name__ == route app.add_url_rule(route, route, handler) for base, _, files in os.walk(TEMPLATES + "/" + PAGES_BASE): if ".git" in base: continue if base.startswith(TEMPLATES): base = base[len(TEMPLATES):] for name in files: if name.endswith(".html"): def handler(base, name): def handler(): return render_template( os.path.join(base, name).strip("/").replace("\\", "/"), ROOT=ROOT, generate_xrpc_list=generate_xrpc_list ) return handler local_base = base.replace("\\", "/").strip(".").strip("/") if local_base.startswith(PAGES_BASE): local_base = local_base[len(PAGES_BASE):] route = local_base + "/" + name if route.endswith("/index.html"): route = route[:-10] if not route.startswith("/"): route = "/" + route handler = handler(base, name) handler.__name__ == route app.add_url_rule(route, route, handler) # from flask import url_for # def has_no_empty_params(rule): # defaults = rule.defaults if rule.defaults is not None else () # arguments = rule.arguments if rule.arguments is not None else () # return len(defaults) >= len(arguments) # @app.route("/site-map") # def site_map(): # links = [] # for rule in app.url_map.iter_rules(): # if "GET" in rule.methods and has_no_empty_params(rule): # url = url_for(rule.endpoint, **(rule.defaults or {})) # links.append((url, rule.endpoint)) # return str(links) if __name__ == '__main__': app.config['TEMPLATES_AUTO_RELOAD'] = True app.config['DEBUG'] = True app.run(debug=True, port=3000, host="0.0.0.0") # server = Server(app.wsgi_app) # server.watch(".") # server.serve(port=3000)