from sanic import Sanic from sanic.log import logger import os import os.path from collections import defaultdict import json def load_assets(): config = Sanic.get_app().config if config["ASSETS_LIST_PATH"] and os.path.exists(config["ASSETS_LIST_PATH"]): with open(config["ASSETS_LIST_PATH"], "r") as f: assets_list = json.load(f, object_hook=lambda d: {int(k) if k.lstrip('-').isdigit() else k: v for k, v in d.items()}) logger.info(f"Loaded packages list from {config['ASSETS_LIST_PATH']}") else: assets_list = { "Android": {}, "iOS": {} } for i in [0, 1, 2, 3, 4, 5, 6, 99]: assets_list["Android"][i] = defaultdict(list) assets_list["iOS"][i] = defaultdict(list) android_i = 0 if config["ASSETS_PATH_ANDROID"]: for r, d, fs in os.walk(config["ASSETS_PATH_ANDROID"]): for f in fs: if f.endswith(".zip"): package_type, package_id, package_order = [int(i) for i in f.replace(".zip", "").split("_")] package_size = os.stat(os.path.join(r, f)).st_size assets_list["Android"][package_type][package_id].append((package_order, package_size)) android_i += 1 logger.info(f"Loaded {android_i} Android packages from {config['ASSETS_PATH_ANDROID']}") ios_i = 0 if config["ASSETS_PATH_IOS"]: for r, d, fs in os.walk(config["ASSETS_PATH_IOS"]): for f in fs: if f.endswith(".zip"): package_type, package_id, package_order = [int(i) for i in f.replace(".zip", "").split("_")] package_size = os.stat(os.path.join(r, f)).st_size assets_list["iOS"][package_type][package_id].append((package_order, package_size)) ios_i += 1 logger.info(f"Loaded {ios_i} iOS packages from {config['ASSETS_PATH_IOS']}") if not os.path.exists("data"): os.makedirs("data") with open("data/assets_list.json", "w") as f: json.dump(assets_list, f) Sanic.get_app().ctx.assets_list = assets_list if config["ASSETS_PATH_ANDROID"]: Sanic.get_app().static("/Android", config["ASSETS_PATH_ANDROID"]) logger.info(f"Hosted {config['ASSETS_PATH_ANDROID']} to {config['STATIC_ROOT']}/Android") if config["ASSETS_PATH_IOS"]: Sanic.get_app().static("/iOS", config["ASSETS_PATH_IOS"]) logger.info(f"Hosted {config['ASSETS_PATH_IOS']} to {config['STATIC_ROOT']}/iOS")