Загрузка данных


# Функция принимает 4 параметра:
# 1. Объект операции (то, что вы создавали здесь в UI). Формат операции и ее ключи можно посмотреть в итоговом JSON
# 2. Словарь, имя переменной: объект UserVar с локальными переменными потока
# 3. Список созданных листенеров, например: Kafka, WS, gRPC
# 4. Объект класса UserClass
#
# И должна возвращать 5 параметров:
# 1. Тело запроса (None, если изменять тело в пре-процессоре нет необходимости)
# 2. Заголовки запроса (None, если изменять заголовки в пре-процессоре нет необходимости)
# 3. Словарь, "переменная": "значение" (может быть пустым - {}) для локальных переменных потока
# 4. Словарь, "переменная": "значение" (может быть пустым - {}) для глобальных переменных теста
# 5. True, если необходимо пропустить текущую операцию, False – пропуск не требуется

from typing import NamedTuple, Optional, Union
from uuid import uuid4
from datetime import datetime


class ReturnFromPreProcessor(NamedTuple):
    body: Optional[Union[bytes, str]]
    headers: Optional[dict[str, str]]
    local_vars: dict[str, str]
    global_vars: dict[str, str]
    need_skip_operation: bool


def pre_processor(operation, user_vars, listeners, user_class, *args, **kwargs) -> ReturnFromPreProcessor:
    # Генерируем уникальные идентификаторы и дату
    boid = str(uuid4())
    rqUid = str(uuid4())
    date = str(datetime.now().isoformat())

    return ReturnFromPreProcessor(
        None,                                      # body
        None,                                      # headers
        {"boid": boid, "rqUid": rqUid, "date": date},  # local_vars
        {},                                        # global_vars
        False,                                     # need_skip_operation
    )