Merge pull request #5856 from ynput/bugfix/bundles-access

AYON: Fix bundles access in settings
This commit is contained in:
Jakub Trllo 2023-11-07 14:53:31 +01:00 committed by GitHub
commit 0818788096
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 17 deletions

View file

@ -106,7 +106,7 @@ class _ModuleClass(object):
if attr_name in self.__attributes__:
self.log.warning(
"Duplicated name \"{}\" in {}. Overriding.".format(
self.name, attr_name
attr_name, self.name
)
)
self.__attributes__[attr_name] = value
@ -408,6 +408,10 @@ def _load_ayon_addons(openpype_modules, modules_key, log):
addon_name = addon_info["name"]
addon_version = addon_info["version"]
# OpenPype addon does not have any addon object
if addon_name == "openpype":
continue
dev_addon_info = dev_addons_info.get(addon_name, {})
use_dev_path = dev_addon_info.get("enabled", False)
@ -438,7 +442,7 @@ def _load_ayon_addons(openpype_modules, modules_key, log):
# Ignore of files is implemented to be able to run code from code
# where usually is more files than just the addon
# Ignore start and setup scripts
if name in ("setup.py", "start.py"):
if name in ("setup.py", "start.py", "__pycache__"):
continue
path = os.path.join(addon_dir, name)
@ -454,7 +458,15 @@ def _load_ayon_addons(openpype_modules, modules_key, log):
try:
mod = __import__(basename, fromlist=("",))
imported_modules.append(mod)
for attr_name in dir(mod):
attr = getattr(mod, attr_name)
if (
inspect.isclass(attr)
and issubclass(attr, OpenPypeModule)
):
imported_modules.append(mod)
break
except BaseException:
log.warning(
"Failed to import \"{}\"".format(basename),
@ -467,19 +479,26 @@ def _load_ayon_addons(openpype_modules, modules_key, log):
))
continue
if len(imported_modules) == 1:
mod = imported_modules[0]
addon_alias = getattr(mod, "V3_ALIAS", None)
if not addon_alias:
addon_alias = addon_name
v3_addons_to_skip.append(addon_alias)
new_import_str = "{}.{}".format(modules_key, addon_alias)
if len(imported_modules) > 1:
log.warning((
"Skipping addon '{}'."
" Multiple modules were found ({}) in dir {}."
).format(
addon_name,
", ".join([m.__name__ for m in imported_modules]),
addon_dir,
))
continue
sys.modules[new_import_str] = mod
setattr(openpype_modules, addon_alias, mod)
mod = imported_modules[0]
addon_alias = getattr(mod, "V3_ALIAS", None)
if not addon_alias:
addon_alias = addon_name
v3_addons_to_skip.append(addon_alias)
new_import_str = "{}.{}".format(modules_key, addon_alias)
else:
log.info("More then one module was imported")
sys.modules[new_import_str] = mod
setattr(openpype_modules, addon_alias, mod)
return v3_addons_to_skip
@ -997,7 +1016,18 @@ class ModulesManager:
continue
method = getattr(module, method_name)
paths = method(*args, **kwargs)
try:
paths = method(*args, **kwargs)
except Exception:
self.log.warning(
(
"Failed to get plugin paths from module"
" '{}' using '{}'."
).format(module.__class__.__name__, method_name),
exc_info=True
)
continue
if paths:
# Convert to list if value is not list
if not isinstance(paths, (list, tuple, set)):

View file

@ -1445,7 +1445,10 @@ class _AyonSettingsCache:
def _use_bundles(cls):
if _AyonSettingsCache.use_bundles is None:
major, minor, _, _, _ = ayon_api.get_server_version_tuple()
_AyonSettingsCache.use_bundles = major == 0 and minor >= 3
use_bundles = True
if (major, minor) < (0, 3):
use_bundles = False
_AyonSettingsCache.use_bundles = use_bundles
return _AyonSettingsCache.use_bundles
@classmethod
@ -1476,7 +1479,7 @@ class _AyonSettingsCache:
bundles = ayon_api.get_bundles()
user = ayon_api.get_user()
username = user["name"]
for bundle in bundles:
for bundle in bundles["bundles"]:
if (
bundle.get("isDev")
and bundle.get("activeUser") == username