diff --git a/server_addon/houdini/client/ayon_houdini/addon.py b/server_addon/houdini/client/ayon_houdini/addon.py index 8f82ee2e76..95d714aea1 100644 --- a/server_addon/houdini/client/ayon_houdini/addon.py +++ b/server_addon/houdini/client/ayon_houdini/addon.py @@ -4,49 +4,41 @@ from ayon_core.addon import AYONAddon, IHostAddon HOUDINI_HOST_DIR = os.path.dirname(os.path.abspath(__file__)) -def merge_paths(*paths): - """Merge path strings to a single uniqified `os.pathsep` joined string. - Each path argument can itself be `os.pathsep` joined string. - >>> merge_paths("A", "A;B;C", "D;E") - "A;B;C;D;E" - Returns: - str: Single joined path using `os.pathsep` - """ - result = [] - processed = set() - for paths_str in paths: - for path in paths_str.split(os.pathsep): - if not path: - continue - - path = os.path.normpath(path) - if path in processed: - continue - - result.append(path) - processed.add(path) - - return os.pathsep.join(result) - - class HoudiniAddon(AYONAddon, IHostAddon): name = "houdini" host_name = "houdini" def add_implementation_envs(self, env, _app): - # Add requirements to HOUDINI_PATH, HOUDINI_MENU_PATH, HOUDINI_OTL_PATH + # Add requirements to HOUDINI_PATH and HOUDINI_MENU_PATH startup_path = os.path.join(HOUDINI_HOST_DIR, "startup") - resources_path = os.path.join(HOUDINI_HOST_DIR, "resources") + new_houdini_path = [startup_path] + new_houdini_menu_path = [startup_path] - env["HOUDINI_PATH"] = merge_paths( - startup_path, env.get("HOUDINI_PATH", ""), "&" - ) - env["HOUDINI_MENU_PATH"] = merge_paths( - startup_path, env.get("HOUDINI_MENU_PATH", ""), "&" - ) - env["HOUDINI_OTL_PATH"] = merge_paths( - resources_path, env.get("HOUDINI_OTL_PATH", ""), "&" - ) + old_houdini_path = env.get("HOUDINI_PATH") or "" + old_houdini_menu_path = env.get("HOUDINI_MENU_PATH") or "" + + for path in old_houdini_path.split(os.pathsep): + if not path: + continue + + norm_path = os.path.normpath(path) + if norm_path not in new_houdini_path: + new_houdini_path.append(norm_path) + + for path in old_houdini_menu_path.split(os.pathsep): + if not path: + continue + + norm_path = os.path.normpath(path) + if norm_path not in new_houdini_menu_path: + new_houdini_menu_path.append(norm_path) + + # Add ampersand for unknown reason (Maybe is needed in Houdini?) + new_houdini_path.append("&") + new_houdini_menu_path.append("&") + + env["HOUDINI_PATH"] = os.pathsep.join(new_houdini_path) + env["HOUDINI_MENU_PATH"] = os.pathsep.join(new_houdini_menu_path) def get_launch_hook_paths(self, app): if app.host_name != self.host_name: