From fc7c560258092514c8d87c14a4236bb2d093f3b0 Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Tue, 5 May 2026 11:02:20 +0200 Subject: [PATCH 1/2] move the init logic to utils, support init also if the json file wasn't initialized yet --- client/ayon_usd/addon.py | 13 ++----------- client/ayon_usd/hooks/pre_resolver_init.py | 5 ++--- client/ayon_usd/utils.py | 22 ++++++++++++++++++++-- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/client/ayon_usd/addon.py b/client/ayon_usd/addon.py index 685503f..5f2f7fd 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.ensure_addon_data_json() 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..86c54ac 100644 --- a/client/ayon_usd/hooks/pre_resolver_init.py +++ b/client/ayon_usd/hooks/pre_resolver_init.py @@ -51,9 +51,8 @@ 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.ensure_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..cfb5fc1 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,24 @@ ADDON_DATA_JSON_PATH = os.path.join(DOWNLOAD_DIR, "ayon_usd_addon_info.json") +def ensure_addon_data_json() -> dict: + """Ensure addon metadata JSON exists and return its content.""" + os.makedirs(DOWNLOAD_DIR, exist_ok=True) + + if os.path.exists(ADDON_DATA_JSON_PATH): + with open(ADDON_DATA_JSON_PATH, "r") as json_file: + return json.load(json_file) + + 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) + return init_data + + def get_download_dir(create_if_missing=True): """Dir path where files are downloaded. @@ -56,8 +75,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 = ensure_addon_data_json() try: usd_lib_lake_fs_time_stamp_local = addon_data_json[ "usd_lib_lake_fs_time_cest" From 24851fc889afd98a80be527a31a2735af808404d Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Thu, 28 May 2026 13:55:01 +0200 Subject: [PATCH 2/2] separate ensure_addon_data_json to create... and get... --- client/ayon_usd/addon.py | 2 +- client/ayon_usd/hooks/pre_resolver_init.py | 6 +++++- client/ayon_usd/utils.py | 19 +++++++++++++------ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/client/ayon_usd/addon.py b/client/ayon_usd/addon.py index 5f2f7fd..265636d 100644 --- a/client/ayon_usd/addon.py +++ b/client/ayon_usd/addon.py @@ -69,7 +69,7 @@ def _download_global_lakefs_binaries(self): self.log.info("USD Binary distribution is disabled.") return - utils.ensure_addon_data_json() + utils.create_addon_data_json_file() if not utils.is_usd_lib_download_needed(settings): self.log.info("USD Libs already available. Skipping download.") diff --git a/client/ayon_usd/hooks/pre_resolver_init.py b/client/ayon_usd/hooks/pre_resolver_init.py index 86c54ac..5d0a1bf 100644 --- a/client/ayon_usd/hooks/pre_resolver_init.py +++ b/client/ayon_usd/hooks/pre_resolver_init.py @@ -52,7 +52,11 @@ def execute(self): return # Bootstrap addon metadata for launches that happen without tray init. - addon_data_json = utils.ensure_addon_data_json() + 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 cfb5fc1..2b2e2c7 100644 --- a/client/ayon_usd/utils.py +++ b/client/ayon_usd/utils.py @@ -16,22 +16,29 @@ ADDON_DATA_JSON_PATH = os.path.join(DOWNLOAD_DIR, "ayon_usd_addon_info.json") -def ensure_addon_data_json() -> dict: - """Ensure addon metadata JSON exists and return its content.""" - os.makedirs(DOWNLOAD_DIR, exist_ok=True) - +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) - return init_data def get_download_dir(create_if_missing=True): @@ -75,7 +82,7 @@ def is_usd_lib_download_needed(settings: dict) -> bool: if not os.path.exists(usd_lib_dir): return True - addon_data_json = ensure_addon_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"