diff --git a/client/ayon_usd/addon.py b/client/ayon_usd/addon.py index 685503f..265636d 100644 --- a/client/ayon_usd/addon.py +++ b/client/ayon_usd/addon.py @@ -2,7 +2,6 @@ import json import os -from datetime import datetime, timezone from ayon_core import style from ayon_core.addon import AYONAddon, IPluginPaths, ITrayAddon @@ -70,15 +69,7 @@ def _download_global_lakefs_binaries(self): self.log.info("USD Binary distribution is disabled.") return - os.makedirs(DOWNLOAD_DIR, exist_ok=True) - - if not os.path.exists(ADDON_DATA_JSON_PATH): - now = datetime.now().astimezone(timezone.utc) - with open(ADDON_DATA_JSON_PATH, "w+") as json_file: - init_data = { - "ayon_usd_addon_first_init_utc": str(now) - } - json.dump(init_data, json_file) + utils.create_addon_data_json_file() if not utils.is_usd_lib_download_needed(settings): self.log.info("USD Libs already available. Skipping download.") @@ -146,4 +137,4 @@ def _download_global_lakefs_binaries(self): ) download_ui.setStyleSheet(style.load_stylesheet()) download_ui.start() - self._download_window = download_ui \ No newline at end of file + self._download_window = download_ui diff --git a/client/ayon_usd/hooks/pre_resolver_init.py b/client/ayon_usd/hooks/pre_resolver_init.py index 2b0171e..5d0a1bf 100644 --- a/client/ayon_usd/hooks/pre_resolver_init.py +++ b/client/ayon_usd/hooks/pre_resolver_init.py @@ -51,9 +51,12 @@ def execute(self): ) return - # Check for existing local resolver that matches the lakefs timestamp - with open(ADDON_DATA_JSON_PATH, "r") as data_json: - addon_data_json = json.load(data_json) + # Bootstrap addon metadata for launches that happen without tray init. + addon_data_json = utils.get_addon_data_json() + + if not addon_data_json: + utils.create_addon_data_json_file() + addon_data_json = utils.get_addon_data_json() key = str(self.app_name).replace("/", "_") local_resolver_key = f"resolver_data_{key}" diff --git a/client/ayon_usd/utils.py b/client/ayon_usd/utils.py index c629a8e..2b2e2c7 100644 --- a/client/ayon_usd/utils.py +++ b/client/ayon_usd/utils.py @@ -5,6 +5,7 @@ import platform import pathlib import sys +from datetime import datetime, timezone from ayon_usd.ayon_bin_client.ayon_bin_distro.work_handler import worker from ayon_usd.ayon_bin_client.ayon_bin_distro.util import zip @@ -15,6 +16,31 @@ ADDON_DATA_JSON_PATH = os.path.join(DOWNLOAD_DIR, "ayon_usd_addon_info.json") +def get_addon_data_json() -> dict: + """Get addon data JSON content as dict.""" + if os.path.exists(ADDON_DATA_JSON_PATH): + with open(ADDON_DATA_JSON_PATH, "r") as json_file: + return json.load(json_file) + return {} + + +def create_addon_data_json_file(): + """Create addon data JSON file if it doesn't exist.""" + if os.path.exists(ADDON_DATA_JSON_PATH): + return + + os.makedirs(DOWNLOAD_DIR, exist_ok=True) + + init_data = { + "ayon_usd_addon_first_init_utc": str( + datetime.now().astimezone(timezone.utc) + ) + } + + with open(ADDON_DATA_JSON_PATH, "w") as json_file: + json.dump(init_data, json_file) + + def get_download_dir(create_if_missing=True): """Dir path where files are downloaded. @@ -56,8 +82,7 @@ def is_usd_lib_download_needed(settings: dict) -> bool: if not os.path.exists(usd_lib_dir): return True - with open(ADDON_DATA_JSON_PATH, "r") as data_json: - addon_data_json = json.load(data_json) + addon_data_json = get_addon_data_json() try: usd_lib_lake_fs_time_stamp_local = addon_data_json[ "usd_lib_lake_fs_time_cest"