From 0c3ca7e21218096cb1de7c917a20cd79b214acfb Mon Sep 17 00:00:00 2001 From: risto Date: Thu, 22 Aug 2024 13:02:23 +0200 Subject: [PATCH] feat: update trait append action to use field_validator Add field_validator from pydantic for 'remove' field validation. Remove TODO comment related to the old validator. Add print statement for debugging destination in dot. --- .../action/v1/traits/append_trait_action.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tracardi/process_engine/action/v1/traits/append_trait_action.py b/tracardi/process_engine/action/v1/traits/append_trait_action.py index 4e9d39b6b..226f9b3e6 100644 --- a/tracardi/process_engine/action/v1/traits/append_trait_action.py +++ b/tracardi/process_engine/action/v1/traits/append_trait_action.py @@ -1,6 +1,7 @@ from typing import Dict, List, Optional, Any, Union -from pydantic import validator, ValidationError +from pydantic import validator, ValidationError, field_validator +from pydantic_core.core_schema import ValidationInfo from tracardi.service.plugin.domain.register import Plugin, Spec, MetaData, Documentation, PortDoc from tracardi.service.plugin.domain.result import Result @@ -15,10 +16,9 @@ class Configuration(PluginConfig): append: Optional[Dict[str, Any]] = {} remove: Optional[Dict[str, Union[Any, List[Any]]]] = {} - # TODO[pydantic]: We couldn't refactor the `validator`, please replace it by `field_validator` manually. - # Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-validators for more information. - @validator("remove") - def validate_remove(cls, value, values): + @field_validator("remove") + def validate_remove(cls, value, info: ValidationInfo): + values = info.data if 'append' not in values and 'remove' not in values: raise ValueError("Please define `append` or `remove` in config section.") @@ -42,6 +42,7 @@ async def run(self, payload: dict, in_edge=None) -> Result: for destination, value in self.config.append.items(): value = dot[value] + print(destination, value, destination in dot) if destination in dot: if not isinstance(dot[destination], list): # Make it a list with original value