add ayon settings support for validate loaded plugins

This commit is contained in:
Kayla Man 2023-11-08 22:05:33 +08:00
parent d15dfaaf84
commit d410899714
3 changed files with 30 additions and 25 deletions

View file

@ -63,12 +63,12 @@ class ValidateLoadedPlugin(OptionalPyblishPluginMixin,
if not has_match:
continue
plugins = [plugin for plugin in
required_plugins[family]["plugins"]]
plugins = [plugin for plugin in required_plugins[family]["plugins"]]
for plugin in plugins:
if not plugin:
return
# make sure the validation applied for
# plugins with different Max version
plugin_name = plugin.format(**os.environ).lower()
plugin_index = available_plugins.get(plugin_name)
@ -110,7 +110,7 @@ class ValidateLoadedPlugin(OptionalPyblishPluginMixin,
instance_families.update(instance.data.get("families", []))
cls.log.debug("Checking plug-in validation "
f"for instance families: {instance_families}")
for family in required_plugins.keys():
for family in required_plugins:
match_families = {fam.strip() for fam in
family.split(",") if fam.strip()}
cls.log.debug(f"Plug-in family requirements: {match_families}")
@ -120,8 +120,7 @@ class ValidateLoadedPlugin(OptionalPyblishPluginMixin,
if not has_match:
continue
plugins = [plugin for plugin in
required_plugins[family]["plugins"]]
plugins = [plugin for plugin in family["plugins"]]
for plugin in plugins:
if not plugin:
return

View file

@ -650,19 +650,14 @@ def _convert_3dsmax_project_settings(ayon_settings, output):
ayon_publish["ValidateAttributes"]["attributes"] = attributes
if "ValidateLoadedPlugin" in ayon_publish:
family_plugin_mapping = (
ayon_publish["ValidateLoadedPlugin"]["family_plugins_mapping"]
)
for item in family_plugin_mapping:
if "product_types" in item:
item["families"] = item.pop("product_types")
new_family_plugin_mapping = {
item["families"]: item["plugins"]
for item in family_plugin_mapping
}
ayon_publish["ValidateLoadedPlugin"]["family_plugins_mapping"] = (
new_family_plugin_mapping
new_plugin_mapping = {}
loaded_plugin = (
ayon_publish["ValidateLoadedPlugin"]
)
for item in loaded_plugin["family_plugins_mapping"]:
name = item.pop("name")
new_plugin_mapping[name] = item
loaded_plugin["family_plugins_mapping"] = new_plugin_mapping
output["max"] = ayon_max

View file

@ -1,7 +1,7 @@
import json
from pydantic import Field, validator
from ayon_server.settings import BaseSettingsModel
from ayon_server.settings import BaseSettingsModel, ensure_unique_names
from ayon_server.exceptions import BadRequestException
@ -27,20 +27,31 @@ class ValidateAttributesModel(BaseSettingsModel):
return value
class FamilyPluginsMappingModel(BaseSettingsModel):
class FamilyMappingItemModel(BaseSettingsModel):
_layout = "compact"
product_types: str = Field(title="Product Types")
name: str = Field("", title="Product type")
plugins: list[str] = Field(
default_factory=list,title="Plugins")
default_factory=list,
title="Plugins"
)
class ValidateLoadedPluginModel(BaseSettingsModel):
enabled: bool = Field(title="ValidateLoadedPlugin")
enabled: bool = Field(title="Enabled")
optional: bool = Field(title="Optional")
family_plugins_mapping: list[FamilyPluginsMappingModel] = Field(
default_factory=list, title="Family Plugins Mapping"
family_plugins_mapping: list[FamilyMappingItemModel] = (
Field(
default_factory=list,
title="Family Plugins Mapping"
)
)
# This is to validate unique names (like in dict)
@validator("family_plugins_mapping")
def validate_unique_outputs(cls, value):
ensure_unique_names(value)
return value
class BasicValidateModel(BaseSettingsModel):
enabled: bool = Field(title="Enabled")