From 157dd41c04ebf08310bf3fc92e93db2656f31ff1 Mon Sep 17 00:00:00 2001 From: IgorChvyrov-sm Date: Thu, 17 Jul 2025 19:14:36 +0300 Subject: [PATCH 1/7] Fix Dockerfile to not use legacy syntax --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a0b394ce6..f49058345 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ FROM python:3.12-alpine AS python_base RUN apk add --no-cache tk curl RUN curl -sSL https://install.python-poetry.org | python3 - -ENV PATH="/root/.local/bin:$PATH" +ENV PATH "/root/.local/bin:$PATH" FROM python_base AS python_test_base RUN mkdir -p /package From 698ae9f0903850b4ecc9ad76b2ba1c0429ed8411 Mon Sep 17 00:00:00 2001 From: IgorChvyrov-sm Date: Fri, 18 Jul 2025 10:11:03 +0300 Subject: [PATCH 2/7] Fixed: LegacyKeyValueFormat: "ENV key=value" --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f49058345..a0b394ce6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ FROM python:3.12-alpine AS python_base RUN apk add --no-cache tk curl RUN curl -sSL https://install.python-poetry.org | python3 - -ENV PATH "/root/.local/bin:$PATH" +ENV PATH="/root/.local/bin:$PATH" FROM python_base AS python_test_base RUN mkdir -p /package From 39656c474eec8d53160aba46c66b3034d80819bd Mon Sep 17 00:00:00 2001 From: IgorChvyrov-sm Date: Fri, 18 Jul 2025 10:39:12 +0300 Subject: [PATCH 3/7] Reformat pyproject.toml --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5d15d9b93..fb8fb5f91 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -113,7 +113,6 @@ select = [ # flake8-raise "RSE" ] - ignore = [ "B008", "C901", From f155f66928916d0802be1cf7781ce237930030a4 Mon Sep 17 00:00:00 2001 From: IgorChvyrov-sm Date: Sun, 20 Jul 2025 12:11:08 +0300 Subject: [PATCH 4/7] Updated rules list for ruff checker --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index fb8fb5f91..5d15d9b93 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -113,6 +113,7 @@ select = [ # flake8-raise "RSE" ] + ignore = [ "B008", "C901", From bebd707f568f0af7fc3819734b389ac42d4f0986 Mon Sep 17 00:00:00 2001 From: IgorChvyrov-sm Date: Tue, 22 Jul 2025 13:26:09 +0300 Subject: [PATCH 5/7] Fixed F, E, W, G, RSE linting errors --- .pre-commit-config.yaml | 2 +- src/conductor/__init__.py | 2 +- .../client/automator/task_handler.py | 2 +- src/conductor/client/automator/task_runner.py | 5 ++-- src/conductor/client/automator/utils.py | 8 +++---- src/conductor/client/helpers/helper.py | 10 ++++---- src/conductor/client/metadata_client.py | 2 +- .../client/orkes/orkes_schema_client.py | 5 ++-- .../orkes/orkes_service_registry_client.py | 2 +- .../client/orkes/orkes_workflow_client.py | 2 +- src/conductor/client/orkes_clients.py | 2 +- src/conductor/client/prompt_client.py | 4 +--- src/conductor/client/schema_client.py | 6 +---- .../client/service_registry_client.py | 2 +- src/conductor/client/task_client.py | 2 +- .../client/telemetry/metrics_collector.py | 4 ++-- src/conductor/client/worker/worker.py | 4 ++-- .../client/workflow/conductor_workflow.py | 24 +++++++++++-------- .../workflow/executor/workflow_executor.py | 17 +++++++++++-- .../client/workflow/task/do_while_task.py | 2 +- .../client/workflow/task/dynamic_fork_task.py | 2 +- .../client/workflow/task/http_poll_task.py | 5 ++-- .../task/llm_tasks/llm_chat_complete.py | 2 +- src/conductor/client/workflow/task/task.py | 4 ++-- 24 files changed, 64 insertions(+), 56 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ebbdab890..e06f63704 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,4 +3,4 @@ repos: rev: v0.12.3 hooks: - id: ruff - args: [""] \ No newline at end of file + args: ["--exit-zero"] \ No newline at end of file diff --git a/src/conductor/__init__.py b/src/conductor/__init__.py index a5a0450be..85edbea80 100644 --- a/src/conductor/__init__.py +++ b/src/conductor/__init__.py @@ -1 +1 @@ -__version__ = "1.1.10" \ No newline at end of file +__version__ = "1.1.10" diff --git a/src/conductor/client/automator/task_handler.py b/src/conductor/client/automator/task_handler.py index a187a71e8..f0cd63009 100644 --- a/src/conductor/client/automator/task_handler.py +++ b/src/conductor/client/automator/task_handler.py @@ -1,7 +1,7 @@ import importlib import logging import os -from multiprocessing import Process, freeze_support, Queue, set_start_method, get_context +from multiprocessing import Process, freeze_support, Queue, set_start_method from sys import platform from typing import List diff --git a/src/conductor/client/automator/task_runner.py b/src/conductor/client/automator/task_runner.py index 187442944..ee814c437 100644 --- a/src/conductor/client/automator/task_runner.py +++ b/src/conductor/client/automator/task_runner.py @@ -60,7 +60,7 @@ def run(self) -> None: while True: try: self.run_once() - except Exception as e: + except Exception: pass def run_once(self) -> None: @@ -229,14 +229,13 @@ def __set_worker_properties(self) -> None: if polling_interval: try: self.worker.poll_interval = float(polling_interval) - except Exception as e: + except Exception: logger.error(f'error reading and parsing the polling interval value {polling_interval}') self.worker.poll_interval = self.worker.get_polling_interval_in_seconds() if polling_interval: try: self.worker.poll_interval = float(polling_interval) - polling_interval_initialized = True except Exception as e: logger.error("Exception in reading polling interval from environment variable: {0}.".format(str(e))) diff --git a/src/conductor/client/automator/utils.py b/src/conductor/client/automator/utils.py index ccc7e8eb0..2ad83a6b4 100644 --- a/src/conductor/client/automator/utils.py +++ b/src/conductor/client/automator/utils.py @@ -43,7 +43,7 @@ def convert_from_dict(cls: type, data: dict) -> object: if data is None: return data - if type(data) == cls: + if isinstance(data, cls): return data if dataclasses.is_dataclass(cls): @@ -53,7 +53,7 @@ def convert_from_dict(cls: type, data: dict) -> object: if not ((str(typ).startswith('dict[') or str(typ).startswith('typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or - typ == dict or str(typ).startswith('OrderedDict['))): + isinstance(typ, dict) or str(typ).startswith('OrderedDict['))): data = {} members = inspect.signature(cls.__init__).parameters @@ -81,7 +81,7 @@ def convert_from_dict(cls: type, data: dict) -> object: elif (str(typ).startswith('dict[') or str(typ).startswith('typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or - typ == dict or str(typ).startswith('OrderedDict[')): + isinstance(typ, dict) or str(typ).startswith('OrderedDict[')): values = {} generic_type = object @@ -116,7 +116,7 @@ def get_value(typ: type, val: object) -> object: values.append(converted) return values elif str(typ).startswith('dict[') or str(typ).startswith( - 'typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or typ == dict: + 'typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or isinstance(typ, dict): values = {} for k in val: v = val[k] diff --git a/src/conductor/client/helpers/helper.py b/src/conductor/client/helpers/helper.py index 8bc090b09..5278edd87 100644 --- a/src/conductor/client/helpers/helper.py +++ b/src/conductor/client/helpers/helper.py @@ -71,7 +71,7 @@ def __deserialize(self, data, klass): if data is None: return None - if type(klass) == str: + if isinstance(klass, str): if klass.startswith('list['): sub_kls = re.match(r'list\[(.*)\]', klass).group(1) return [self.__deserialize(sub_data, sub_kls) @@ -90,11 +90,11 @@ def __deserialize(self, data, klass): if klass in self.PRIMITIVE_TYPES: return self.__deserialize_primitive(data, klass) - elif klass == object: + elif klass is object: return self.__deserialize_object(data) - elif klass == datetime.date: + elif klass is datetime.date: return self.__deserialize_date(data) - elif klass == datetime.datetime: + elif klass is datetime.datetime: return self.__deserialize_datatime(data) else: return self.__deserialize_model(data, klass) @@ -108,7 +108,7 @@ def __deserialize_primitive(self, data, klass): :return: int, long, float, str, bool. """ try: - if klass == str and type(data) == bytes: + if isinstance(klass, str) and isinstance(data, bytes): return self.__deserialize_bytes_to_str(data) return klass(data) except UnicodeEncodeError: diff --git a/src/conductor/client/metadata_client.py b/src/conductor/client/metadata_client.py index de1ad750d..8d73c7d21 100644 --- a/src/conductor/client/metadata_client.py +++ b/src/conductor/client/metadata_client.py @@ -63,4 +63,4 @@ def set_workflow_tags(self, tags: List[MetadataTag], workflow_name: str): pass def delete_workflow_tag(self, tag: MetadataTag, workflow_name: str): - pass \ No newline at end of file + pass diff --git a/src/conductor/client/orkes/orkes_schema_client.py b/src/conductor/client/orkes/orkes_schema_client.py index cb0203eb8..32a91cf86 100644 --- a/src/conductor/client/orkes/orkes_schema_client.py +++ b/src/conductor/client/orkes/orkes_schema_client.py @@ -1,8 +1,7 @@ -from typing import List, Optional +from typing import List from conductor.client.configuration.configuration import Configuration from conductor.client.http.models.schema_def import SchemaDef -from conductor.client.http.rest import ApiException from conductor.client.orkes.orkes_base_client import OrkesBaseClient from conductor.client.schema_client import SchemaClient @@ -24,4 +23,4 @@ def delete_schema(self, schema_name: str, version: int) -> None: self.schemaApi.delete_schema_by_name_and_version(name=schema_name, version=version) def delete_schema_by_name(self, schema_name: str) -> None: - self.schemaApi.delete_schema_by_name(name=schema_name) \ No newline at end of file + self.schemaApi.delete_schema_by_name(name=schema_name) diff --git a/src/conductor/client/orkes/orkes_service_registry_client.py b/src/conductor/client/orkes/orkes_service_registry_client.py index ebf221055..9d4f3e561 100644 --- a/src/conductor/client/orkes/orkes_service_registry_client.py +++ b/src/conductor/client/orkes/orkes_service_registry_client.py @@ -66,4 +66,4 @@ def get_queue_sizes_for_all_tasks(self) -> dict: def is_circuit_breaker_open(self, name: str) -> bool: """Check if circuit breaker is open for a service""" status = self.get_circuit_breaker_status(name) - return status.current_state and status.current_state.upper() == "OPEN" \ No newline at end of file + return status.current_state and status.current_state.upper() == "OPEN" diff --git a/src/conductor/client/orkes/orkes_workflow_client.py b/src/conductor/client/orkes/orkes_workflow_client.py index b56f923f4..907ddd785 100644 --- a/src/conductor/client/orkes/orkes_workflow_client.py +++ b/src/conductor/client/orkes/orkes_workflow_client.py @@ -212,4 +212,4 @@ def update_state(self, workflow_id: str, update_requesst: WorkflowStateUpdate, if wait_for_seconds is not None: kwargs['wait_for_seconds'] = wait_for_seconds - return self.workflowResourceApi.update_workflow_and_task_state(update_requesst=update_requesst, workflow_id=workflow_id, **kwargs) \ No newline at end of file + return self.workflowResourceApi.update_workflow_and_task_state(update_requesst=update_requesst, workflow_id=workflow_id, **kwargs) diff --git a/src/conductor/client/orkes_clients.py b/src/conductor/client/orkes_clients.py index a3b0fcd09..08a76c4c4 100644 --- a/src/conductor/client/orkes_clients.py +++ b/src/conductor/client/orkes_clients.py @@ -54,4 +54,4 @@ def get_prompt_client(self) -> PromptClient: return OrkesPromptClient(self.configuration) def get_schema_client(self) -> SchemaClient: - return OrkesSchemaClient(self.configuration) \ No newline at end of file + return OrkesSchemaClient(self.configuration) diff --git a/src/conductor/client/prompt_client.py b/src/conductor/client/prompt_client.py index 554019f31..fadbfe3d2 100644 --- a/src/conductor/client/prompt_client.py +++ b/src/conductor/client/prompt_client.py @@ -5,9 +5,7 @@ from typing import List # python 2 and python 3 compatibility library -import six -from conductor.client.http.api_client import ApiClient from conductor.client.http.models.prompt_template import PromptTemplate from conductor.client.orkes.models.metadata_tag import MetadataTag @@ -45,4 +43,4 @@ def delete_tag_for_prompt_template(self, prompt_name: str, tags: List[MetadataTa @abstractmethod def test_prompt(self, prompt_text: str, variables: dict, ai_integration: str, text_complete_model: str, temperature : float = 0.1, top_p : float = 0.9, stop_words: List[str] = None) -> str: - pass \ No newline at end of file + pass diff --git a/src/conductor/client/schema_client.py b/src/conductor/client/schema_client.py index af72c2b4b..db1d1f22a 100644 --- a/src/conductor/client/schema_client.py +++ b/src/conductor/client/schema_client.py @@ -5,12 +5,8 @@ from typing import List # python 2 and python 3 compatibility library -import six -from conductor.client.http.api_client import ApiClient -from conductor.client.http.models.prompt_template import PromptTemplate from conductor.client.http.models.schema_def import SchemaDef -from conductor.client.orkes.models.metadata_tag import MetadataTag class SchemaClient(ABC): @@ -48,4 +44,4 @@ def delete_schema_by_name(self, schema_name: str) -> None: """ Delete all the versions of a schema by its name """ - pass \ No newline at end of file + pass diff --git a/src/conductor/client/service_registry_client.py b/src/conductor/client/service_registry_client.py index 2ab6128eb..da7f873c5 100644 --- a/src/conductor/client/service_registry_client.py +++ b/src/conductor/client/service_registry_client.py @@ -62,4 +62,4 @@ def get_all_protos(self, registry_name: str) -> List[ProtoRegistryEntry]: @abstractmethod def discover(self, name: str, create: Optional[bool] = False) -> List[ServiceMethod]: - pass \ No newline at end of file + pass diff --git a/src/conductor/client/task_client.py b/src/conductor/client/task_client.py index 148345e87..922e8ef19 100644 --- a/src/conductor/client/task_client.py +++ b/src/conductor/client/task_client.py @@ -69,4 +69,4 @@ def get_task_logs(self, task_id: str) -> List[TaskExecLog]: @abstractmethod def get_task_poll_data(self, task_type: str) -> List[PollData]: - pass \ No newline at end of file + pass diff --git a/src/conductor/client/telemetry/metrics_collector.py b/src/conductor/client/telemetry/metrics_collector.py index 85412c7fa..00dfb4ed8 100644 --- a/src/conductor/client/telemetry/metrics_collector.py +++ b/src/conductor/client/telemetry/metrics_collector.py @@ -29,14 +29,14 @@ class MetricsCollector: must_collect_metrics = False def __init__(self, settings: MetricsSettings): - if settings != None: + if settings is not None: os.environ["PROMETHEUS_MULTIPROC_DIR"] = settings.directory MultiProcessCollector(self.registry) self.must_collect_metrics = True @staticmethod def provide_metrics(settings: MetricsSettings) -> None: - if settings == None: + if settings is None: return OUTPUT_FILE_PATH = os.path.join( settings.directory, diff --git a/src/conductor/client/worker/worker.py b/src/conductor/client/worker/worker.py index 121f5b984..3465f3cb2 100644 --- a/src/conductor/client/worker/worker.py +++ b/src/conductor/client/worker/worker.py @@ -38,7 +38,7 @@ def is_callable_input_parameter_a_task(callable: ExecuteTaskFunction, object_typ if len(parameters) != 1: return False parameter = parameters[list(parameters.keys())[0]] - return parameter.annotation == object_type or parameter.annotation == parameter.empty or parameter.annotation == object + return parameter.annotation == object_type or parameter.annotation == parameter.empty or parameter.annotation is object def is_callable_return_value_of_type(callable: ExecuteTaskFunction, object_type: Any) -> bool: @@ -93,7 +93,7 @@ def execute(self, task: Task) -> TaskResult: task_input[input_name] = None task_output = self.execute_function(**task_input) - if type(task_output) == TaskResult: + if isinstance(task_output, TaskResult): task_output.task_id = task.task_id task_output.workflow_instance_id = task.workflow_instance_id return task_output diff --git a/src/conductor/client/workflow/conductor_workflow.py b/src/conductor/client/workflow/conductor_workflow.py index 5c89394ea..f0bf6706f 100644 --- a/src/conductor/client/workflow/conductor_workflow.py +++ b/src/conductor/client/workflow/conductor_workflow.py @@ -2,10 +2,15 @@ from typing import Any, Dict, List, Union from shortuuid import uuid -from typing import Dict from typing_extensions import Self -from conductor.client.http.models import * +from conductor.client.http.models import ( + StartWorkflowRequest, + WorkflowDef, + WorkflowRun, + WorkflowTask, + SubWorkflowParams, +) from conductor.client.http.models.start_workflow_request import IdempotencyStrategy from conductor.client.workflow.executor.workflow_executor import WorkflowExecutor from conductor.client.workflow.task.fork_task import ForkTask @@ -56,7 +61,7 @@ def version(self) -> int: @version.setter def version(self, version: int) -> None: - if version != None and not isinstance(version, int): + if version is not None and not isinstance(version, int): raise Exception('invalid type') self._version = deepcopy(version) @@ -66,7 +71,7 @@ def description(self) -> str: @description.setter def description(self, description: str) -> None: - if description != None and not isinstance(description, str): + if description is not None and not isinstance(description, str): raise Exception('invalid type') self._description = deepcopy(description) @@ -115,7 +120,7 @@ def disable_status_listener(self) -> Self: # Workflow output follows similar structure as task input # See https://conductor.netflix.com/how-tos/Tasks/task-inputs.html for more details def output_parameters(self, output_parameters: Dict[str, Any]) -> Self: - if output_parameters == None: + if output_parameters is None: self._output_parameters = {} return if not isinstance(output_parameters, dict): @@ -135,7 +140,7 @@ def output_parameter(self, key: str, value: Any) -> Self: # InputTemplate template input to the workflow. Can have combination of variables (e.g. ${workflow.input.abc}) and static values def input_template(self, input_template: Dict[str, Any]) -> Self: - if input_template == None: + if input_template is None: self._input_template = {} return if not isinstance(input_template, dict): @@ -149,7 +154,7 @@ def input_template(self, input_template: Dict[str, Any]) -> Self: # Variables are set using SET_VARIABLE task. Excellent way to maintain business state # e.g. Variables can maintain business/user specific states which can be queried and inspected to find out the state of the workflow def variables(self, variables: Dict[str, Any]) -> Self: - if variables == None: + if variables is None: self._variables = {} return if not isinstance(variables, dict): @@ -174,7 +179,6 @@ def input_parameters(self, input_parameters: List[str]) -> Self: return self def workflow_input(self, input: dict) -> Self: - keys = list(input.keys()) self.input_template(input) return self @@ -353,13 +357,13 @@ def __call__(self, **kwargs) -> WorkflowRun: def input(self, json_path: str) -> str: if json_path is None: - return '${' + f'workflow.input' + '}' + return '${' + 'workflow.input' + '}' else: return '${' + f'workflow.input.{json_path}' + '}' def output(self, json_path: str = None) -> str: if json_path is None: - return '${' + f'workflow.output' + '}' + return '${' + 'workflow.output' + '}' else: return '${' + f'workflow.output.{json_path}' + '}' diff --git a/src/conductor/client/workflow/executor/workflow_executor.py b/src/conductor/client/workflow/executor/workflow_executor.py index 905378591..453611fef 100644 --- a/src/conductor/client/workflow/executor/workflow_executor.py +++ b/src/conductor/client/workflow/executor/workflow_executor.py @@ -7,8 +7,21 @@ from conductor.client.http.api.metadata_resource_api import MetadataResourceApi from conductor.client.http.api.task_resource_api import TaskResourceApi from conductor.client.http.api_client import ApiClient -from conductor.client.http.models import * -from conductor.client.http.models.correlation_ids_search_request import CorrelationIdsSearchRequest +from conductor.client.http.models import ( + TaskResult, + Workflow, + WorkflowDef, + WorkflowRun, + WorkflowStatus, + ScrollableSearchResultWorkflowSummary, + StartWorkflowRequest, + SkipTaskRequest, + RerunWorkflowRequest, + SignalResponse, +) +from conductor.client.http.models.correlation_ids_search_request import ( + CorrelationIdsSearchRequest, +) from conductor.client.orkes.orkes_workflow_client import OrkesWorkflowClient diff --git a/src/conductor/client/workflow/task/do_while_task.py b/src/conductor/client/workflow/task/do_while_task.py index a5422cdbb..4f2caa990 100644 --- a/src/conductor/client/workflow/task/do_while_task.py +++ b/src/conductor/client/workflow/task/do_while_task.py @@ -1,5 +1,5 @@ from copy import deepcopy -from typing import List, Dict, Any +from typing import List from typing_extensions import Self diff --git a/src/conductor/client/workflow/task/dynamic_fork_task.py b/src/conductor/client/workflow/task/dynamic_fork_task.py index 439f16606..7d14524e8 100644 --- a/src/conductor/client/workflow/task/dynamic_fork_task.py +++ b/src/conductor/client/workflow/task/dynamic_fork_task.py @@ -25,6 +25,6 @@ def to_workflow_task(self) -> WorkflowTask: tasks = [ wf_task, ] - if self._join_task != None: + if self._join_task is not None: tasks.append(self._join_task.to_workflow_task()) return tasks diff --git a/src/conductor/client/workflow/task/http_poll_task.py b/src/conductor/client/workflow/task/http_poll_task.py index a958ef9ce..93ca25fc1 100644 --- a/src/conductor/client/workflow/task/http_poll_task.py +++ b/src/conductor/client/workflow/task/http_poll_task.py @@ -1,10 +1,9 @@ from copy import deepcopy -from enum import Enum -from typing import Any, Dict, List, Union +from typing import Any, Dict, List from typing_extensions import Self -from conductor.client.workflow.task.http_task import HttpTask, HttpInput, HttpMethod +from conductor.client.workflow.task.http_task import HttpMethod from conductor.client.workflow.task.task import TaskInterface from conductor.client.workflow.task.task_type import TaskType diff --git a/src/conductor/client/workflow/task/llm_tasks/llm_chat_complete.py b/src/conductor/client/workflow/task/llm_tasks/llm_chat_complete.py index d2328e8c7..5935d0f00 100644 --- a/src/conductor/client/workflow/task/llm_tasks/llm_chat_complete.py +++ b/src/conductor/client/workflow/task/llm_tasks/llm_chat_complete.py @@ -51,4 +51,4 @@ def prompt_variables(self, variables: Dict[str, object]) -> Self: def prompt_variable(self, variable: str, value: object) -> Self: self.input_parameters['promptVariables'][variable] = value - return self \ No newline at end of file + return self diff --git a/src/conductor/client/workflow/task/task.py b/src/conductor/client/workflow/task/task.py index 779a8b3d0..5127f6a0c 100644 --- a/src/conductor/client/workflow/task/task.py +++ b/src/conductor/client/workflow/task/task.py @@ -99,7 +99,7 @@ def description(self) -> str: @description.setter def description(self, description: str) -> None: - if description != None and not isinstance(description, str): + if description is not None and not isinstance(description, str): raise Exception('invalid type') self._description = deepcopy(description) @@ -125,7 +125,7 @@ def input_parameters(self, input_parameters: Dict[str, Any]) -> None: if not isinstance(input_parameters, dict): try: self._input_parameters = input_parameters.__dict__ - except: + except AttributeError: raise Exception(f'invalid type: {type(input_parameters)}') self._input_parameters = deepcopy(input_parameters) From 56e4b56e84e6e9a052d495c50fc2a2d14dce5ff9 Mon Sep 17 00:00:00 2001 From: IgorChvyrov-sm Date: Thu, 24 Jul 2025 12:04:42 +0300 Subject: [PATCH 6/7] Fix tests --- src/conductor/client/automator/utils.py | 6 +++--- tests/serdesertest/test_serdeser_action.py | 2 +- tests/serdesertest/test_serdeser_authorization_request.py | 2 +- tests/serdesertest/test_serdeser_bulk_response.py | 2 +- tests/serdesertest/test_serdeser_conductor_application.py | 2 +- tests/serdesertest/test_serdeser_conductor_user.py | 2 +- .../test_serdeser_correlation_ids_search_request.py | 2 +- .../test_serdeser_create_or_update_application_request.py | 2 +- tests/serdesertest/test_serdeser_event_handler.py | 2 +- .../serdesertest/test_serdeser_external_storage_location.py | 2 +- tests/serdesertest/test_serdeser_generate_token_request.py | 2 +- tests/serdesertest/test_serdeser_group.py | 2 +- tests/serdesertest/test_serdeser_integration.py | 2 +- tests/serdesertest/test_serdeser_integration_api.py | 2 +- tests/serdesertest/test_serdeser_integration_def.py | 2 +- tests/serdesertest/test_serdeser_integration_update.py | 2 +- tests/serdesertest/test_serdeser_permission.py | 2 +- tests/serdesertest/test_serdeser_poll_data.py | 2 +- tests/serdesertest/test_serdeser_prompt_test_request.py | 2 +- tests/serdesertest/test_serdeser_rate_limit.py | 2 +- tests/serdesertest/test_serdeser_rerun_workflow_request.py | 2 +- tests/serdesertest/test_serdeser_role.py | 2 +- tests/serdesertest/test_serdeser_save_schedule_request.py | 2 +- tests/serdesertest/test_serdeser_schema_def.py | 2 +- tests/serdesertest/test_serdeser_search_result_task.py | 2 +- .../test_serdeser_search_result_task_summary.py | 2 +- tests/serdesertest/test_serdeser_search_result_workflow.py | 2 +- ...deser_search_result_workflow_schedule_execution_model.py | 2 +- .../test_serdeser_search_result_workflow_summary.py | 2 +- tests/serdesertest/test_serdeser_skip_task_request.py | 2 +- tests/serdesertest/test_serdeser_start_workflow.py | 2 +- tests/serdesertest/test_serdeser_start_workflow_request.py | 2 +- tests/serdesertest/test_serdeser_state_change_event.py | 2 +- tests/serdesertest/test_serdeser_sub_workflow_params.py | 2 +- tests/serdesertest/test_serdeser_subject_ref.py | 2 +- tests/serdesertest/test_serdeser_tag_object.py | 2 +- tests/serdesertest/test_serdeser_tag_string.py | 2 +- tests/serdesertest/test_serdeser_target_ref.py | 2 +- tests/serdesertest/test_serdeser_task.py | 2 +- tests/serdesertest/test_serdeser_task_def.py | 2 +- tests/serdesertest/test_serdeser_task_details.py | 2 +- tests/serdesertest/test_serdeser_task_exec_log.py | 2 +- tests/serdesertest/test_serdeser_task_result.py | 2 +- tests/serdesertest/test_serdeser_task_result_status.py | 2 +- tests/serdesertest/test_serdeser_task_summary.py | 2 +- tests/serdesertest/test_serdeser_terminate_workflow.py | 2 +- .../serdesertest/test_serdeser_update_workflow_variables.py | 2 +- tests/serdesertest/test_serdeser_upsert_group_request.py | 2 +- tests/serdesertest/test_serdeser_upsert_user_request.py | 2 +- tests/serdesertest/test_serdeser_workflow.py | 2 +- tests/serdesertest/test_serdeser_workflow_def.py | 2 +- tests/serdesertest/test_serdeser_workflow_schedule.py | 2 +- .../test_serdeser_workflow_schedule_execution_model.py | 2 +- tests/serdesertest/test_serdeser_workflow_state_update.py | 2 +- tests/serdesertest/test_serdeser_workflow_status.py | 2 +- tests/serdesertest/test_serdeser_workflow_summary.py | 2 +- tests/serdesertest/test_serdeser_workflow_task.py | 2 +- tests/serdesertest/test_serdeser_workflow_test_request.py | 2 +- tests/unit/automator/utils_test.py | 1 + 59 files changed, 61 insertions(+), 60 deletions(-) diff --git a/src/conductor/client/automator/utils.py b/src/conductor/client/automator/utils.py index 2ad83a6b4..4f6eb4ff2 100644 --- a/src/conductor/client/automator/utils.py +++ b/src/conductor/client/automator/utils.py @@ -53,7 +53,7 @@ def convert_from_dict(cls: type, data: dict) -> object: if not ((str(typ).startswith('dict[') or str(typ).startswith('typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or - isinstance(typ, dict) or str(typ).startswith('OrderedDict['))): + typ == dict or str(typ).startswith('OrderedDict['))): data = {} members = inspect.signature(cls.__init__).parameters @@ -81,7 +81,7 @@ def convert_from_dict(cls: type, data: dict) -> object: elif (str(typ).startswith('dict[') or str(typ).startswith('typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or - isinstance(typ, dict) or str(typ).startswith('OrderedDict[')): + typ == dict or str(typ).startswith('OrderedDict[')): values = {} generic_type = object @@ -116,7 +116,7 @@ def get_value(typ: type, val: object) -> object: values.append(converted) return values elif str(typ).startswith('dict[') or str(typ).startswith( - 'typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or isinstance(typ, dict): + 'typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or typ == dict: values = {} for k in val: v = val[k] diff --git a/tests/serdesertest/test_serdeser_action.py b/tests/serdesertest/test_serdeser_action.py index 6d868ac96..60e1efa0c 100644 --- a/tests/serdesertest/test_serdeser_action.py +++ b/tests/serdesertest/test_serdeser_action.py @@ -4,7 +4,7 @@ from conductor.client.http.models.task_details import TaskDetails from conductor.client.http.models.terminate_workflow import TerminateWorkflow from conductor.client.http.models.update_workflow_variables import UpdateWorkflowVariables -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json import re diff --git a/tests/serdesertest/test_serdeser_authorization_request.py b/tests/serdesertest/test_serdeser_authorization_request.py index 3eedb0481..99ac99286 100644 --- a/tests/serdesertest/test_serdeser_authorization_request.py +++ b/tests/serdesertest/test_serdeser_authorization_request.py @@ -1,6 +1,6 @@ import unittest import json -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver # Import the classes being tested from conductor.client.http.models.authorization_request import AuthorizationRequest diff --git a/tests/serdesertest/test_serdeser_bulk_response.py b/tests/serdesertest/test_serdeser_bulk_response.py index bfbbe2ec8..86c5a2d7f 100644 --- a/tests/serdesertest/test_serdeser_bulk_response.py +++ b/tests/serdesertest/test_serdeser_bulk_response.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models import BulkResponse -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestBulkResponseSerDeser(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_conductor_application.py b/tests/serdesertest/test_serdeser_conductor_application.py index 428258286..8559df347 100644 --- a/tests/serdesertest/test_serdeser_conductor_application.py +++ b/tests/serdesertest/test_serdeser_conductor_application.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models import ConductorApplication -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver diff --git a/tests/serdesertest/test_serdeser_conductor_user.py b/tests/serdesertest/test_serdeser_conductor_user.py index b84642065..e4ded384a 100644 --- a/tests/serdesertest/test_serdeser_conductor_user.py +++ b/tests/serdesertest/test_serdeser_conductor_user.py @@ -2,7 +2,7 @@ import unittest from conductor.client.http.models import ConductorUser, Role, Group -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestConductorUserSerDeSer(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_correlation_ids_search_request.py b/tests/serdesertest/test_serdeser_correlation_ids_search_request.py index 39bc6d58a..627238de7 100644 --- a/tests/serdesertest/test_serdeser_correlation_ids_search_request.py +++ b/tests/serdesertest/test_serdeser_correlation_ids_search_request.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models.correlation_ids_search_request import CorrelationIdsSearchRequest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestCorrelationIdsSearchRequest(unittest.TestCase): """Test case for CorrelationIdsSearchRequest class.""" diff --git a/tests/serdesertest/test_serdeser_create_or_update_application_request.py b/tests/serdesertest/test_serdeser_create_or_update_application_request.py index ce279f124..1bea04b95 100644 --- a/tests/serdesertest/test_serdeser_create_or_update_application_request.py +++ b/tests/serdesertest/test_serdeser_create_or_update_application_request.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models import CreateOrUpdateApplicationRequest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestCreateOrUpdateApplicationRequest(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_event_handler.py b/tests/serdesertest/test_serdeser_event_handler.py index e292d094f..6074d772e 100644 --- a/tests/serdesertest/test_serdeser_event_handler.py +++ b/tests/serdesertest/test_serdeser_event_handler.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models.event_handler import EventHandler from conductor.client.http.models.action import Action -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestEventHandlerSerDe(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_external_storage_location.py b/tests/serdesertest/test_serdeser_external_storage_location.py index 4f01bdaaf..fa8b1cbe9 100644 --- a/tests/serdesertest/test_serdeser_external_storage_location.py +++ b/tests/serdesertest/test_serdeser_external_storage_location.py @@ -1,7 +1,7 @@ import json import unittest from conductor.client.http.models.external_storage_location import ExternalStorageLocation -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestExternalStorageLocationSerDe(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_generate_token_request.py b/tests/serdesertest/test_serdeser_generate_token_request.py index e1cacaac3..7886f1873 100644 --- a/tests/serdesertest/test_serdeser_generate_token_request.py +++ b/tests/serdesertest/test_serdeser_generate_token_request.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.generate_token_request import GenerateTokenRequest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestGenerateTokenRequestSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_group.py b/tests/serdesertest/test_serdeser_group.py index e913ad0b6..3c230700b 100644 --- a/tests/serdesertest/test_serdeser_group.py +++ b/tests/serdesertest/test_serdeser_group.py @@ -1,7 +1,7 @@ import unittest from conductor.client.http.models.group import Group from conductor.client.http.models.role import Role -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json diff --git a/tests/serdesertest/test_serdeser_integration.py b/tests/serdesertest/test_serdeser_integration.py index c5f0c8f7a..3200e6ff5 100644 --- a/tests/serdesertest/test_serdeser_integration.py +++ b/tests/serdesertest/test_serdeser_integration.py @@ -1,7 +1,7 @@ import json import unittest from conductor.client.http.models.integration import Integration -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class IntegrationSerdeserTest(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_integration_api.py b/tests/serdesertest/test_serdeser_integration_api.py index 9653187b0..32332bc40 100644 --- a/tests/serdesertest/test_serdeser_integration_api.py +++ b/tests/serdesertest/test_serdeser_integration_api.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models.integration_api import IntegrationApi from conductor.client.http.models.tag_object import TagObject -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class IntegrationApiSerializationTest(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_integration_def.py b/tests/serdesertest/test_serdeser_integration_def.py index 463063d02..e01bc728b 100644 --- a/tests/serdesertest/test_serdeser_integration_def.py +++ b/tests/serdesertest/test_serdeser_integration_def.py @@ -1,6 +1,6 @@ import unittest from conductor.client.http.models.integration_def import IntegrationDef -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json diff --git a/tests/serdesertest/test_serdeser_integration_update.py b/tests/serdesertest/test_serdeser_integration_update.py index 8745fef04..940ff9809 100644 --- a/tests/serdesertest/test_serdeser_integration_update.py +++ b/tests/serdesertest/test_serdeser_integration_update.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.integration_update import IntegrationUpdate -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestIntegrationUpdateSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_permission.py b/tests/serdesertest/test_serdeser_permission.py index 44446f680..9dffdb564 100644 --- a/tests/serdesertest/test_serdeser_permission.py +++ b/tests/serdesertest/test_serdeser_permission.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.permission import Permission -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestPermissionSerialization(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_poll_data.py b/tests/serdesertest/test_serdeser_poll_data.py index c22d23785..89bc9e02c 100644 --- a/tests/serdesertest/test_serdeser_poll_data.py +++ b/tests/serdesertest/test_serdeser_poll_data.py @@ -1,7 +1,7 @@ import json import unittest from conductor.client.http.models.poll_data import PollData -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestPollDataSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_prompt_test_request.py b/tests/serdesertest/test_serdeser_prompt_test_request.py index 9049c041d..3c4a8c7f6 100644 --- a/tests/serdesertest/test_serdeser_prompt_test_request.py +++ b/tests/serdesertest/test_serdeser_prompt_test_request.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.prompt_test_request import PromptTemplateTestRequest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestPromptTemplateTestRequestSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_rate_limit.py b/tests/serdesertest/test_serdeser_rate_limit.py index 96cee8b6c..0ce253351 100644 --- a/tests/serdesertest/test_serdeser_rate_limit.py +++ b/tests/serdesertest/test_serdeser_rate_limit.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.rate_limit import RateLimit -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class RateLimitTest(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_rerun_workflow_request.py b/tests/serdesertest/test_serdeser_rerun_workflow_request.py index 2926738a4..bc0ab7d12 100644 --- a/tests/serdesertest/test_serdeser_rerun_workflow_request.py +++ b/tests/serdesertest/test_serdeser_rerun_workflow_request.py @@ -3,7 +3,7 @@ from copy import deepcopy from conductor.client.http.models import RerunWorkflowRequest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestRerunWorkflowRequestSerialization(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_role.py b/tests/serdesertest/test_serdeser_role.py index d722246c2..91c95c39d 100644 --- a/tests/serdesertest/test_serdeser_role.py +++ b/tests/serdesertest/test_serdeser_role.py @@ -4,7 +4,7 @@ from conductor.client.http.models.role import Role from conductor.client.http.models.permission import Permission -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestRoleSerialization(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_save_schedule_request.py b/tests/serdesertest/test_serdeser_save_schedule_request.py index b4a731582..61b11b91f 100644 --- a/tests/serdesertest/test_serdeser_save_schedule_request.py +++ b/tests/serdesertest/test_serdeser_save_schedule_request.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.save_schedule_request import SaveScheduleRequest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestSaveScheduleRequestSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_schema_def.py b/tests/serdesertest/test_serdeser_schema_def.py index 1e54ae0c4..d8a5fff89 100644 --- a/tests/serdesertest/test_serdeser_schema_def.py +++ b/tests/serdesertest/test_serdeser_schema_def.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.schema_def import SchemaDef, SchemaType -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestSchemaDefSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_search_result_task.py b/tests/serdesertest/test_serdeser_search_result_task.py index 8d5984171..719dd7f65 100644 --- a/tests/serdesertest/test_serdeser_search_result_task.py +++ b/tests/serdesertest/test_serdeser_search_result_task.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models.search_result_task import SearchResultTask from conductor.client.http.models.task import Task -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestSearchResultTaskSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_search_result_task_summary.py b/tests/serdesertest/test_serdeser_search_result_task_summary.py index 755a0205c..ffebc00b6 100644 --- a/tests/serdesertest/test_serdeser_search_result_task_summary.py +++ b/tests/serdesertest/test_serdeser_search_result_task_summary.py @@ -1,7 +1,7 @@ import unittest from conductor.client.http.models.search_result_task_summary import SearchResultTaskSummary from conductor.client.http.models.task_summary import TaskSummary -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json diff --git a/tests/serdesertest/test_serdeser_search_result_workflow.py b/tests/serdesertest/test_serdeser_search_result_workflow.py index 2ef4f4982..de3e5f252 100644 --- a/tests/serdesertest/test_serdeser_search_result_workflow.py +++ b/tests/serdesertest/test_serdeser_search_result_workflow.py @@ -1,7 +1,7 @@ import unittest from conductor.client.http.models.search_result_workflow import SearchResultWorkflow from conductor.client.http.models.workflow import Workflow -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json diff --git a/tests/serdesertest/test_serdeser_search_result_workflow_schedule_execution_model.py b/tests/serdesertest/test_serdeser_search_result_workflow_schedule_execution_model.py index 2e558e9dd..ef32d4c6b 100644 --- a/tests/serdesertest/test_serdeser_search_result_workflow_schedule_execution_model.py +++ b/tests/serdesertest/test_serdeser_search_result_workflow_schedule_execution_model.py @@ -2,7 +2,7 @@ from conductor.client.http.models.search_result_workflow_schedule_execution_model import \ SearchResultWorkflowScheduleExecutionModel from conductor.client.http.models.workflow_schedule_execution_model import WorkflowScheduleExecutionModel -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json diff --git a/tests/serdesertest/test_serdeser_search_result_workflow_summary.py b/tests/serdesertest/test_serdeser_search_result_workflow_summary.py index 0b1d54481..53581a712 100644 --- a/tests/serdesertest/test_serdeser_search_result_workflow_summary.py +++ b/tests/serdesertest/test_serdeser_search_result_workflow_summary.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models.search_result_workflow_summary import SearchResultWorkflowSummary from conductor.client.http.models.workflow_summary import WorkflowSummary -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestSearchResultWorkflowSummary(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_skip_task_request.py b/tests/serdesertest/test_serdeser_skip_task_request.py index 28b0b232c..e6b0b6e38 100644 --- a/tests/serdesertest/test_serdeser_skip_task_request.py +++ b/tests/serdesertest/test_serdeser_skip_task_request.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.skip_task_request import SkipTaskRequest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestSkipTaskRequestSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_start_workflow.py b/tests/serdesertest/test_serdeser_start_workflow.py index ef3afb6f4..22b4874cb 100644 --- a/tests/serdesertest/test_serdeser_start_workflow.py +++ b/tests/serdesertest/test_serdeser_start_workflow.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.start_workflow import StartWorkflow -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestStartWorkflowSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_start_workflow_request.py b/tests/serdesertest/test_serdeser_start_workflow_request.py index cb9485921..036e597e0 100644 --- a/tests/serdesertest/test_serdeser_start_workflow_request.py +++ b/tests/serdesertest/test_serdeser_start_workflow_request.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.start_workflow_request import StartWorkflowRequest, IdempotencyStrategy -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestStartWorkflowRequestSerDeSer(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_state_change_event.py b/tests/serdesertest/test_serdeser_state_change_event.py index 46ca703f8..07ba9a40c 100644 --- a/tests/serdesertest/test_serdeser_state_change_event.py +++ b/tests/serdesertest/test_serdeser_state_change_event.py @@ -3,7 +3,7 @@ from typing import Dict, List from conductor.client.http.models.state_change_event import StateChangeEvent, StateChangeConfig, StateChangeEventType -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestStateChangeEventSerialization(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_sub_workflow_params.py b/tests/serdesertest/test_serdeser_sub_workflow_params.py index 4635cb1fd..0a101d7eb 100644 --- a/tests/serdesertest/test_serdeser_sub_workflow_params.py +++ b/tests/serdesertest/test_serdeser_sub_workflow_params.py @@ -1,6 +1,6 @@ import unittest from conductor.client.http.models.sub_workflow_params import SubWorkflowParams -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json diff --git a/tests/serdesertest/test_serdeser_subject_ref.py b/tests/serdesertest/test_serdeser_subject_ref.py index a51762131..fd4d43035 100644 --- a/tests/serdesertest/test_serdeser_subject_ref.py +++ b/tests/serdesertest/test_serdeser_subject_ref.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.subject_ref import SubjectRef -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestSubjectRefSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_tag_object.py b/tests/serdesertest/test_serdeser_tag_object.py index 296c42009..90a56b3b5 100644 --- a/tests/serdesertest/test_serdeser_tag_object.py +++ b/tests/serdesertest/test_serdeser_tag_object.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.tag_object import TagObject, TypeEnum -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestTagObjectSerDeser(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_tag_string.py b/tests/serdesertest/test_serdeser_tag_string.py index 3aa868a4f..6c2d2d538 100644 --- a/tests/serdesertest/test_serdeser_tag_string.py +++ b/tests/serdesertest/test_serdeser_tag_string.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.tag_string import TagString, TypeEnum -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestTagStringSerialization(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_target_ref.py b/tests/serdesertest/test_serdeser_target_ref.py index f40a90352..e280d87a0 100644 --- a/tests/serdesertest/test_serdeser_target_ref.py +++ b/tests/serdesertest/test_serdeser_target_ref.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.target_ref import TargetRef, TargetType -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestTargetRefSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_task.py b/tests/serdesertest/test_serdeser_task.py index e16b6642f..cfec0c2ba 100644 --- a/tests/serdesertest/test_serdeser_task.py +++ b/tests/serdesertest/test_serdeser_task.py @@ -3,7 +3,7 @@ from conductor.client.http.models.task import Task from conductor.client.http.models.task_result_status import TaskResultStatus from conductor.client.http.models.workflow_task import WorkflowTask -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TaskSerDeserTest(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_task_def.py b/tests/serdesertest/test_serdeser_task_def.py index 6d1789a2b..4965e4b0f 100644 --- a/tests/serdesertest/test_serdeser_task_def.py +++ b/tests/serdesertest/test_serdeser_task_def.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models.task_def import TaskDef from conductor.client.http.models.schema_def import SchemaDef -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestTaskDefSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_task_details.py b/tests/serdesertest/test_serdeser_task_details.py index a122dd04f..7d66d3dab 100644 --- a/tests/serdesertest/test_serdeser_task_details.py +++ b/tests/serdesertest/test_serdeser_task_details.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.task_details import TaskDetails -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestTaskDetailsSerialization(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_task_exec_log.py b/tests/serdesertest/test_serdeser_task_exec_log.py index d9b1b8532..182cbbe97 100644 --- a/tests/serdesertest/test_serdeser_task_exec_log.py +++ b/tests/serdesertest/test_serdeser_task_exec_log.py @@ -1,6 +1,6 @@ import unittest import json -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver from conductor.client.http.models.task_exec_log import TaskExecLog diff --git a/tests/serdesertest/test_serdeser_task_result.py b/tests/serdesertest/test_serdeser_task_result.py index 8e781e18f..128b5e8ce 100644 --- a/tests/serdesertest/test_serdeser_task_result.py +++ b/tests/serdesertest/test_serdeser_task_result.py @@ -3,7 +3,7 @@ from conductor.client.http.models.task_result import TaskResult from conductor.client.http.models.task_exec_log import TaskExecLog from conductor.client.http.models.task_result_status import TaskResultStatus -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestTaskResultSerDeser(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_task_result_status.py b/tests/serdesertest/test_serdeser_task_result_status.py index 2b8c41bca..5bc20e208 100644 --- a/tests/serdesertest/test_serdeser_task_result_status.py +++ b/tests/serdesertest/test_serdeser_task_result_status.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.task_result import TaskResult, TaskResultStatus, TaskExecLog -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestTaskResultSerde(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_task_summary.py b/tests/serdesertest/test_serdeser_task_summary.py index 90715f92b..7ad3800ae 100644 --- a/tests/serdesertest/test_serdeser_task_summary.py +++ b/tests/serdesertest/test_serdeser_task_summary.py @@ -1,6 +1,6 @@ import unittest import json -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver from conductor.client.http.models.task_summary import TaskSummary diff --git a/tests/serdesertest/test_serdeser_terminate_workflow.py b/tests/serdesertest/test_serdeser_terminate_workflow.py index be7f7b352..0555d621c 100644 --- a/tests/serdesertest/test_serdeser_terminate_workflow.py +++ b/tests/serdesertest/test_serdeser_terminate_workflow.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.terminate_workflow import TerminateWorkflow -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestTerminateWorkflowSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_update_workflow_variables.py b/tests/serdesertest/test_serdeser_update_workflow_variables.py index 465e56ad3..1136aad6e 100644 --- a/tests/serdesertest/test_serdeser_update_workflow_variables.py +++ b/tests/serdesertest/test_serdeser_update_workflow_variables.py @@ -2,7 +2,7 @@ import unittest from dataclasses import asdict from conductor.client.http.models.update_workflow_variables import UpdateWorkflowVariables -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestUpdateWorkflowVariables(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_upsert_group_request.py b/tests/serdesertest/test_serdeser_upsert_group_request.py index fd441f1ba..dd2cbe594 100644 --- a/tests/serdesertest/test_serdeser_upsert_group_request.py +++ b/tests/serdesertest/test_serdeser_upsert_group_request.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.upsert_group_request import UpsertGroupRequest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestUpsertGroupRequest(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_upsert_user_request.py b/tests/serdesertest/test_serdeser_upsert_user_request.py index 68939d14c..f07c718d3 100644 --- a/tests/serdesertest/test_serdeser_upsert_user_request.py +++ b/tests/serdesertest/test_serdeser_upsert_user_request.py @@ -1,6 +1,6 @@ import unittest from conductor.client.http.models.upsert_user_request import UpsertUserRequest, RolesEnum -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json diff --git a/tests/serdesertest/test_serdeser_workflow.py b/tests/serdesertest/test_serdeser_workflow.py index 25ddcd109..089e1a77b 100644 --- a/tests/serdesertest/test_serdeser_workflow.py +++ b/tests/serdesertest/test_serdeser_workflow.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models import Workflow, Task, WorkflowDef -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class WorkflowSerDeserTest(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_workflow_def.py b/tests/serdesertest/test_serdeser_workflow_def.py index d954cc09f..8a62b2655 100644 --- a/tests/serdesertest/test_serdeser_workflow_def.py +++ b/tests/serdesertest/test_serdeser_workflow_def.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models import WorkflowDef, WorkflowTask, RateLimit from conductor.client.http.models.schema_def import SchemaDef -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestWorkflowDefSerDeSer(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_workflow_schedule.py b/tests/serdesertest/test_serdeser_workflow_schedule.py index bc0cac95d..880133ced 100644 --- a/tests/serdesertest/test_serdeser_workflow_schedule.py +++ b/tests/serdesertest/test_serdeser_workflow_schedule.py @@ -2,7 +2,7 @@ from conductor.client.http.models.workflow_schedule import WorkflowSchedule from conductor.client.http.models.start_workflow_request import StartWorkflowRequest from conductor.client.http.models.tag_object import TagObject -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver import json diff --git a/tests/serdesertest/test_serdeser_workflow_schedule_execution_model.py b/tests/serdesertest/test_serdeser_workflow_schedule_execution_model.py index be404ea88..1f29750d5 100644 --- a/tests/serdesertest/test_serdeser_workflow_schedule_execution_model.py +++ b/tests/serdesertest/test_serdeser_workflow_schedule_execution_model.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.workflow_schedule_execution_model import WorkflowScheduleExecutionModel -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestWorkflowScheduleExecutionModelSerDes(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_workflow_state_update.py b/tests/serdesertest/test_serdeser_workflow_state_update.py index 50c60489d..b4a8c610f 100644 --- a/tests/serdesertest/test_serdeser_workflow_state_update.py +++ b/tests/serdesertest/test_serdeser_workflow_state_update.py @@ -1,5 +1,5 @@ import unittest -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver from conductor.client.http.models import WorkflowStateUpdate, TaskResult, TaskExecLog, TaskResultStatus import json diff --git a/tests/serdesertest/test_serdeser_workflow_status.py b/tests/serdesertest/test_serdeser_workflow_status.py index 183a5c583..c0503ba7a 100644 --- a/tests/serdesertest/test_serdeser_workflow_status.py +++ b/tests/serdesertest/test_serdeser_workflow_status.py @@ -1,6 +1,6 @@ import unittest import json -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver from conductor.client.http.models.workflow_status import WorkflowStatus diff --git a/tests/serdesertest/test_serdeser_workflow_summary.py b/tests/serdesertest/test_serdeser_workflow_summary.py index d0d75d5be..26a4bb4e5 100644 --- a/tests/serdesertest/test_serdeser_workflow_summary.py +++ b/tests/serdesertest/test_serdeser_workflow_summary.py @@ -2,7 +2,7 @@ import json from typing import Set from conductor.client.http.models.workflow_summary import WorkflowSummary -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestWorkflowSummarySerialization(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_workflow_task.py b/tests/serdesertest/test_serdeser_workflow_task.py index 7fa6b637c..503521840 100644 --- a/tests/serdesertest/test_serdeser_workflow_task.py +++ b/tests/serdesertest/test_serdeser_workflow_task.py @@ -1,7 +1,7 @@ import unittest import json from conductor.client.http.models.workflow_task import WorkflowTask -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestWorkflowTaskSerDe(unittest.TestCase): diff --git a/tests/serdesertest/test_serdeser_workflow_test_request.py b/tests/serdesertest/test_serdeser_workflow_test_request.py index 6d1f5eb52..0765e41b4 100644 --- a/tests/serdesertest/test_serdeser_workflow_test_request.py +++ b/tests/serdesertest/test_serdeser_workflow_test_request.py @@ -2,7 +2,7 @@ import json from conductor.client.http.models.workflow_test_request import WorkflowTestRequest, TaskMock from conductor.client.http.models.workflow_def import WorkflowDef -from serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver +from tests.serdesertest.util.serdeser_json_resolver_utility import JsonTemplateResolver class TestWorkflowTestRequestSerDes(unittest.TestCase): diff --git a/tests/unit/automator/utils_test.py b/tests/unit/automator/utils_test.py index 50cdc543a..edf242795 100644 --- a/tests/unit/automator/utils_test.py +++ b/tests/unit/automator/utils_test.py @@ -58,6 +58,7 @@ def test_convert_non_dataclass(self): 'd': [{'name': 'conductor', 'id': 123}, {'F': 3}], 'g': {'userA': {'name': 'userA', 'id': 100}, 'userB': {'name': 'userB', 'id': 101}}} value = convert_from_dict(Test, dictionary) + self.assertEqual(Test, type(value)) self.assertEqual(123, value.a) self.assertEqual(2, len(value.b)) From 91e17a8da8151feda3221f29a19e53cc7fcee5a0 Mon Sep 17 00:00:00 2001 From: IgorChvyrov-sm Date: Thu, 24 Jul 2025 13:45:01 +0300 Subject: [PATCH 7/7] Fixed types comparison --- src/conductor/client/automator/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/conductor/client/automator/utils.py b/src/conductor/client/automator/utils.py index 0a4ee7620..1d3c32b82 100644 --- a/src/conductor/client/automator/utils.py +++ b/src/conductor/client/automator/utils.py @@ -54,7 +54,7 @@ def convert_from_dict(cls: type, data: dict) -> object: if not ((str(typ).startswith('dict[') or str(typ).startswith('typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or - typ == dict or str(typ).startswith('OrderedDict['))): + typ is dict or str(typ).startswith('OrderedDict['))): data = {} members = inspect.signature(cls.__init__).parameters @@ -82,7 +82,7 @@ def convert_from_dict(cls: type, data: dict) -> object: elif (str(typ).startswith('dict[') or str(typ).startswith('typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or - typ == dict or str(typ).startswith('OrderedDict[')): + typ is dict or str(typ).startswith('OrderedDict[')): values = {} generic_type = object @@ -92,7 +92,7 @@ def convert_from_dict(cls: type, data: dict) -> object: v = data[member][k] values[k] = get_value(generic_type, v) kwargs[member] = values - elif typ == inspect.Parameter.empty: + elif typ is inspect.Parameter.empty: if inspect.Parameter.VAR_KEYWORD == members[member].kind: if type(data) in dict_types: kwargs.update(data) @@ -117,7 +117,7 @@ def get_value(typ: type, val: object) -> object: values.append(converted) return values elif str(typ).startswith('dict[') or str(typ).startswith( - 'typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or typ == dict: + 'typing.Dict[') or str(typ).startswith('requests.structures.CaseInsensitiveDict[') or typ is dict: values = {} for k in val: v = val[k]