Bases: PreLaunchHook
Initialize asset resolver for the application.
Asset resolver is used to resolve assets in the application.
Source code in client/ayon_usd/hooks/pre_resolver_init.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 | class InitializeAssetResolver(PreLaunchHook):
"""Initialize asset resolver for the application.
Asset resolver is used to resolve assets in the application.
"""
app_groups = {"maya", "houdini", "unreal"}
launch_types = {LaunchTypes.local}
def execute(self):
"""Pre-launch hook entry method."""
project_settings = self.data["project_settings"]
if not project_settings["usd"]["distribution"]["enabled"]:
self.log.info(
"USD Binary distribution for AYON USD Resolver is"
" disabled.")
return
resolver_lake_fs_path = utils.get_resolver_to_download(
project_settings, self.app_name)
if not resolver_lake_fs_path:
self.log.warning(
"No USD Resolver could be found but AYON-Usd addon is"
f" activated for application: {self.app_name}"
)
return
self.log.info(f"Using resolver from lakeFS: {resolver_lake_fs_path}")
lake_fs = config.get_global_lake_instance()
lake_fs_resolver_time_stamp = (
lake_fs.get_element_info(resolver_lake_fs_path).get(
"Modified Time"
)
)
if not lake_fs_resolver_time_stamp:
self.log.error(
"Could not find resolver timestamp on lakeFS server "
f"for application: {self.app_name}"
)
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)
key = str(self.app_name).replace("/", "_")
local_resolver_key = f"resolver_data_{key}"
local_resolver_timestamp, local_resolver = (
addon_data_json.get(local_resolver_key, [None, None])
)
if (
local_resolver
and lake_fs_resolver_time_stamp == local_resolver_timestamp
and os.path.exists(local_resolver)
):
self._setup_resolver(local_resolver, project_settings)
return
# If no existing match, download the resolver
local_resolver = utils.lakefs_download_and_extract(
resolver_lake_fs_path, str(utils.get_download_dir())
)
if not local_resolver:
return
addon_data_json[local_resolver_key] = [
lake_fs_resolver_time_stamp,
local_resolver,
]
with open(ADDON_DATA_JSON_PATH, "w") as addon_json:
json.dump(addon_data_json, addon_json)
self._setup_resolver(local_resolver, project_settings)
def _setup_resolver(self, local_resolver, settings):
self.log.info(
f"Initializing USD asset resolver for application: {self.app_name}"
)
updated_env = utils.get_resolver_setup_info(
local_resolver, settings, env=self.launch_context.env
)
self.launch_context.env.update(updated_env)
|
execute()
Pre-launch hook entry method.
Source code in client/ayon_usd/hooks/pre_resolver_init.py
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 | def execute(self):
"""Pre-launch hook entry method."""
project_settings = self.data["project_settings"]
if not project_settings["usd"]["distribution"]["enabled"]:
self.log.info(
"USD Binary distribution for AYON USD Resolver is"
" disabled.")
return
resolver_lake_fs_path = utils.get_resolver_to_download(
project_settings, self.app_name)
if not resolver_lake_fs_path:
self.log.warning(
"No USD Resolver could be found but AYON-Usd addon is"
f" activated for application: {self.app_name}"
)
return
self.log.info(f"Using resolver from lakeFS: {resolver_lake_fs_path}")
lake_fs = config.get_global_lake_instance()
lake_fs_resolver_time_stamp = (
lake_fs.get_element_info(resolver_lake_fs_path).get(
"Modified Time"
)
)
if not lake_fs_resolver_time_stamp:
self.log.error(
"Could not find resolver timestamp on lakeFS server "
f"for application: {self.app_name}"
)
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)
key = str(self.app_name).replace("/", "_")
local_resolver_key = f"resolver_data_{key}"
local_resolver_timestamp, local_resolver = (
addon_data_json.get(local_resolver_key, [None, None])
)
if (
local_resolver
and lake_fs_resolver_time_stamp == local_resolver_timestamp
and os.path.exists(local_resolver)
):
self._setup_resolver(local_resolver, project_settings)
return
# If no existing match, download the resolver
local_resolver = utils.lakefs_download_and_extract(
resolver_lake_fs_path, str(utils.get_download_dir())
)
if not local_resolver:
return
addon_data_json[local_resolver_key] = [
lake_fs_resolver_time_stamp,
local_resolver,
]
with open(ADDON_DATA_JSON_PATH, "w") as addon_json:
json.dump(addon_data_json, addon_json)
self._setup_resolver(local_resolver, project_settings)
|