import logging import os from util import json_path logger = logging.getLogger(__name__) def download_board(board_id, instance_config_id, sequence_id, source): local_file = "static/progress/images/{config_id}/{sequence_id}/{board_id}".format( config_id=instance_config_id, sequence_id=sequence_id, board_id=board_id) if os.path.exists(local_file): return local_file url = "/game2/editor/config/{config_id}/sequence/{sequence_id}/board/{board_id}/".format( config_id=instance_config_id, sequence_id=sequence_id, board_id=board_id ) board = source._get(url) if not board.ok: raise ConnectionError() data = board.json() preview_url = json_path(data, "preview_url.medium") logger.debug(preview_url) os.makedirs(local_file[:-len(board_id)], exist_ok=True) source.download_file(preview_url, local_file) return local_file def get_config(source, instance_id): url = "/game2/editor/config/{config_id}/".format(config_id=instance_id) instance_data = get_json(source, url) caches = url + "cache/" cache_data = get_json(source, caches) result = { "name": instance_data["name"], "id": instance_data["@id"], "caches": cache_data } return result def get_board_data(source, instance_id, sequence_id, board_id): url = "/game2/editor/config/{config_id}/sequence/{sequence_id}/board/{board_id}/".format( config_id=instance_id, sequence_id=sequence_id, board_id=board_id ) instance_data = get_json(source, url) if instance_data is None: return {"class": "error"} result = { "class": instance_data["@class"], } for i in ["image", "audio", "video"]: key = i + "_file" result["has_" + i] = bool(key in instance_data and instance_data[key]) return result cache = {} def get_json(source, url): if url in cache: return cache[url] try: data = source.get_json(url) except Exception as e: print("exception", e, e.args) # TODO: logging data = None cache[url] = data return data