Source code for api.assets

import importlib
import os

from flask import current_app
from flask import send_from_directory
from flask import url_for


[docs]def get_static(boxormodule, filename): """ Generates url for static file, depending on debug mode being on or not Args: boxormodule (String): box or module name e.g. box__default/auth or someothermodule/ filename (String): path of the file inside the box or module Returns ------- URL for static file """ if current_app.config["DEBUG"] is True: return url_for("devstatic", boxormodule=boxormodule, path=filename) else: return url_for("static", path=f"modules/{boxormodule}/{filename}")
[docs]def register_devstatic(app, modules_path): """ Resgisters endpoint for serving files in debug mode Args: app (Flask app) Returns ------- URL for static file in debug mode """ @app.route("/devstatic/<path:boxormodule>/f/<path:path>") def devstatic(boxormodule, path): if app.config["DEBUG"]: if boxormodule.startswith("box__"): box = boxormodule.split("/")[0] module = boxormodule.split("/")[1] module_static = os.path.join(modules_path, box, module, "static") return send_from_directory(module_static, path=path) if boxormodule.startswith("shopyo_"): plugin = importlib.import_module(boxormodule) plugin_folder_path = plugin.view.mhelp.dirpath plugin_static_folder = os.path.join(plugin_folder_path, "static") return send_from_directory(plugin_static_folder, path=path) else: module = boxormodule module_static = os.path.join(modules_path, module, "static") return send_from_directory(module_static, path=path)