import logging import os from analysis.util import json_path logger = logging.getLogger(__name__) def download_board(board_id, instance_config_id, sequence_id, source, path="/data/results/"): local_file = os.path.join("static", instance_config_id, sequence_id, board_id) abs_path = os.path.join(path, local_file) if os.path.exists(abs_path): 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(url, board, board.status_code) data = board.json() preview_url = json_path(data, "preview_url.medium") logger.debug(preview_url) os.makedirs(abs_path[:-len(board_id)], exist_ok=True) source.download_file(preview_url, abs_path) 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(url).json() except Exception as e: print("exception", e, e.args) logger.exception(e) data = None cache[url] = data return data