77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
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
|