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
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134 | class InitializeAssetResolver(PreLaunchHook):
"""Initialize asset resolver for the application.
Asset resolver is used to resolve assets in the application.
"""
app_groups = {"maya", "houdini", "unreal"}
# TODO Use `farm_render` instead of `farm_publish`
# once this issue is resolved
# https://github.com/ynput/ayon-applications/issues/2
launch_types = {LaunchTypes.local, LaunchTypes.farm_publish}
def execute(self):
"""Pre-launch hook entry method."""
project_settings = self.data["project_settings"]
local_resolver = None
if not project_settings["usd"]["distribution"]["enabled"]:
self.log.info("USD distribution is disabled; skipping resolver setup.")
return
distribution_type = project_settings["usd"]["distribution"]["type"]
if distribution_type == "lake_fs":
local_resolver = self._handle_lake_fs_distribution(project_settings)
elif distribution_type == "local":
local_resolver = self._handle_local_distribution(project_settings)
if local_resolver is None:
self.log.warning(
"Resolver setup skipped for %s because no resolver directory "
"was resolved.",
self.app_name,
)
return
self._setup_resolver(local_resolver, project_settings)
def _handle_lake_fs_distribution(self, settings) -> Optional[str]:
resolver_lake_fs_path = utils.get_resolver_to_download(
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 None
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
# 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}"
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)
):
return local_resolver
# 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 None
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)
return local_resolver
def _handle_local_distribution(self, settings) -> Optional[str]:
resolver_path = utils.get_local_resolver_path(settings, self.app_name)
if not resolver_path or not os.path.isdir(resolver_path):
self.log.error(f"Invalid local resolver path: {resolver_path}")
return None
self.log.info(f"Using local resolver path for {self.app_name}: {resolver_path}")
return resolver_path
def _setup_resolver(
self,
local_resolver: str,
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | def execute(self):
"""Pre-launch hook entry method."""
project_settings = self.data["project_settings"]
local_resolver = None
if not project_settings["usd"]["distribution"]["enabled"]:
self.log.info("USD distribution is disabled; skipping resolver setup.")
return
distribution_type = project_settings["usd"]["distribution"]["type"]
if distribution_type == "lake_fs":
local_resolver = self._handle_lake_fs_distribution(project_settings)
elif distribution_type == "local":
local_resolver = self._handle_local_distribution(project_settings)
if local_resolver is None:
self.log.warning(
"Resolver setup skipped for %s because no resolver directory "
"was resolved.",
self.app_name,
)
return
self._setup_resolver(local_resolver, project_settings)
|