From 6cfb3b86e7bafbb69d6920154a3be8d016870540 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 27 Jan 2026 11:05:25 +0100 Subject: [PATCH 1/2] use product base type in collect kitsu family --- .../plugins/publish/collect_kitsu_family.py | 10 ++++--- server/__init__.py | 18 +++++++++++-- server/settings/__init__.py | 4 ++- server/settings/conversions.py | 26 +++++++++++++++++++ server/settings/publish_plugins.py | 24 ++++++++--------- 5 files changed, 63 insertions(+), 19 deletions(-) create mode 100644 server/settings/conversions.py diff --git a/client/ayon_kitsu/plugins/publish/collect_kitsu_family.py b/client/ayon_kitsu/plugins/publish/collect_kitsu_family.py index a87e12fa..7d316a90 100644 --- a/client/ayon_kitsu/plugins/publish/collect_kitsu_family.py +++ b/client/ayon_kitsu/plugins/publish/collect_kitsu_family.py @@ -36,12 +36,14 @@ def process(self, instance): return host_name = instance.context.data["hostName"] - product_type = instance.data["productType"] + product_base_type = instance.data.get("productBaseType") + if not product_base_type: + product_base_type = instance.data["productType"] task_name = instance.data.get("task") filtering_criteria = { "host_names": host_name, - "product_types": product_type, + "product_base_types": product_base_type, "task_names": task_name } profile = filter_profiles( @@ -57,7 +59,7 @@ def process(self, instance): add_kitsu_family = profile["add_kitsu_family"] additional_filters = profile.get("advanced_filtering") if additional_filters: - families_set = set(families) | {product_type} + families_set = set(families) | {product_base_type} self.log.info( "'{}' families used for additional filtering".format( families_set)) @@ -74,7 +76,7 @@ def process(self, instance): families.append("kitsu") self.log.debug("{} 'kitsu' family for instance with '{}'".format( - result_str, product_type + result_str, product_base_type )) def _get_add_kitsu_f_from_addit_filters( diff --git a/server/__init__.py b/server/__init__.py index 08a2d1ff..e20d7e16 100644 --- a/server/__init__.py +++ b/server/__init__.py @@ -1,4 +1,4 @@ -from typing import Type +from typing import Type, Any from nxtools import logging @@ -17,7 +17,11 @@ push_entities, remove_entities, ) -from .settings import DEFAULT_VALUES, KitsuSettings +from .settings import ( + KitsuSettings, + DEFAULT_VALUES, + convert_settings_overrides, +) # # Events: @@ -134,3 +138,13 @@ async def ensure_kitsu(self, mock: bool = False): raise InvalidSettingsException("Kitsu password secret is not set") self.kitsu = Kitsu(settings.server, actual_email, actual_password) + + async def convert_settings_overrides( + self, + source_version: str, + overrides: dict[str, Any], + ) -> dict[str, Any]: + await convert_settings_overrides(source_version, overrides) + return await super().convert_settings_overrides( + source_version, overrides + ) diff --git a/server/settings/__init__.py b/server/settings/__init__.py index 6a1ef49e..cf9d2615 100644 --- a/server/settings/__init__.py +++ b/server/settings/__init__.py @@ -1,7 +1,9 @@ from .main import KitsuSettings, DEFAULT_VALUES - +from .conversions import convert_settings_overrides __all__ = ( "DEFAULT_VALUES", "KitsuSettings", + + "convert_settings_overrides", ) diff --git a/server/settings/conversions.py b/server/settings/conversions.py new file mode 100644 index 00000000..12197f03 --- /dev/null +++ b/server/settings/conversions.py @@ -0,0 +1,26 @@ +from typing import Any + + +def _convert_product_base_types(overrides: dict[str, Any]) -> None: + profiles = ( + overrides + .get("publish", {}) + .get("CollectKitsuFamily", {}) + .get("profiles") + ) + if not profiles: + return + + for profile in profiles: + if "product_base_types" in profile or "product_types" not in profile: + return + + profile["product_base_types"] = profile.pop("product_types") + + +async def convert_settings_overrides( + source_version: str, + overrides: dict[str, Any], +) -> dict[str, Any]: + _convert_product_base_types(overrides) + return overrides diff --git a/server/settings/publish_plugins.py b/server/settings/publish_plugins.py index 643415d7..290baefb 100644 --- a/server/settings/publish_plugins.py +++ b/server/settings/publish_plugins.py @@ -19,7 +19,7 @@ class CollectFamilyProfile(BaseSettingsModel): default_factory=list, title="Host names", ) - product_types: list[str] = SettingsField( + product_base_types: list[str] = SettingsField( default_factory=list, title="Families", ) @@ -124,7 +124,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "traypublisher" ], - "product_types": [], + "product_base_types": [], "task_types": [], "task_names": [], "add_ftrack_family": True, @@ -134,7 +134,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "traypublisher" ], - "product_types": [ + "product_base_types": [ "matchmove", "shot" ], @@ -147,7 +147,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "traypublisher" ], - "product_types": [ + "product_base_types": [ "plate", "review", "audio" @@ -169,7 +169,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "maya" ], - "product_types": [ + "product_base_types": [ "model", "setdress", "animation", @@ -186,7 +186,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "tvpaint" ], - "product_types": [ + "product_base_types": [ "renderPass" ], "task_types": [], @@ -198,7 +198,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "tvpaint" ], - "product_types": [], + "product_base_types": [], "task_types": [], "task_names": [], "add_kitsu_family": True, @@ -208,7 +208,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "nuke" ], - "product_types": [ + "product_base_types": [ "write", "render", "prerender" @@ -229,7 +229,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "aftereffects" ], - "product_types": [ + "product_base_types": [ "render", "workfile" ], @@ -242,7 +242,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "flame" ], - "product_types": [ + "product_base_types": [ "plate", "take" ], @@ -255,7 +255,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "houdini" ], - "product_types": [ + "product_base_types": [ "usd" ], "task_types": [], @@ -267,7 +267,7 @@ class PublishPlugins(BaseSettingsModel): "host_names": [ "photoshop" ], - "product_types": [ + "product_base_types": [ "review" ], "task_types": [], From 0bac1439ccf41f45be92e717b5201451037ff7ed Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 27 Jan 2026 11:05:32 +0100 Subject: [PATCH 2/2] remove backwards compatibility --- .../plugins/publish/integrate_kitsu_note.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/client/ayon_kitsu/plugins/publish/integrate_kitsu_note.py b/client/ayon_kitsu/plugins/publish/integrate_kitsu_note.py index c06b0286..baefd9ce 100644 --- a/client/ayon_kitsu/plugins/publish/integrate_kitsu_note.py +++ b/client/ayon_kitsu/plugins/publish/integrate_kitsu_note.py @@ -52,16 +52,6 @@ def replace_missing_key(match): return re.sub(pattern, replace_missing_key, template) def process(self, context): - # Backwards compatibility for wront key - if "product_type_requirements" in self.status_change_conditions: - family_requirements = self.status_change_conditions[ - "product_type_requirements" - ] - else: - family_requirements = self.status_change_conditions[ - "family_requirements" - ] - for instance in context: # Check if instance is a review by checking its family # Allow a match to primary family or any of families @@ -101,7 +91,9 @@ def process(self, context): # Check if any family requirement is met - for family_requirement in family_requirements: + for family_requirement in ( + self.status_change_conditions["family_requirements"] + ): condition = family_requirement["condition"] == "equal" for family in families: