Source code for pi_portal.modules.tasks.task.utility.compare

"""Test helper to compare tasks and serializers to each other."""

import dataclasses
from typing import Any

from pi_portal.modules.tasks.task.bases import task_args_base, task_result
from pi_portal.modules.tasks.task.bases.task_base import TaskBase
from pi_portal.modules.tasks.task.serializers.task_serializer import (
    SerializedTask,
)


[docs]def assert_task_equals_serialized_task( task: TaskBase[task_args_base.TaskArgsBase, Any], serialized_task: SerializedTask, ) -> None: """Compare a task to a serialized version of itself. :param task: A task instance to compare. :param serialized_task: A serialized task to compare. """ for field in dataclasses.fields(serialized_task): task_object = getattr(task, field.name) serializer_object = getattr(serialized_task, field.name) if isinstance(serializer_object, list): assert isinstance(task_object, list) assert len(task_object) == len(serializer_object) # pylint: disable=consider-using-enumerate for index in range(0, len(task_object)): assert_task_equals_serialized_task( task_object[index], serializer_object[index], ) elif isinstance(task_object, task_result.TaskResult): assert dataclasses.asdict(task_object) == serializer_object else: assert task_object == serializer_object