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


# Функция принимает 5 параметров:
# 1. response: locust.FastResponse (https://docs.locust.io/en/stable/_modules/locust/contrib/fasthttp.html#FastResponse) для HTTP-зарпосов
# и тело ответа для всех асинхронных операций
# 2. Объект операции (то, вы создавали здесь в UI). Формат операции и ее ключи можно посмотреть в итоговом JSON
# 3. Словарь, "переменная": "значение" с локальными переменными потока
# 4. Список созданных листенеров Kafka, WS, gRPC
# 5. Объект класса UserClass
#
# И должна возвращать 4 параметра:
# 1. Успешность операции (None, если успешность должна быть определена стандартными средствами
# В http по коду ответа, в других протоколах всегда успешно))
# 2. id следующей операции (None, если на этом нужно завершить итерацию)
# 3. Словарь, "переменная": "значение" (может быть пустым - {}) для локальных переменных потока
# 4. Словарь, "переменная": "значение" (может быть пустым - {}) для глобальных переменных теста


from typing import NamedTuple, Optional
# from locust.contrib.fasthttp import ResponseContextManager
# from app.clients.class_builder import UserClass
# from app.data_classes.config import OperationTypes
# from app.data_classes.user_vars import UserVar
# from app.users.async_response_readers import AsyncResponseReader, WebSocketResponseReader, KafkaResponseReader


class ReturnFromPostProcessor(NamedTuple):
    is_operation_successful: bool
    next_operation_id: Optional[str]
    local_vars: dict
    global_vars: dict


# def post_processor(response: Union[ResponseContextManager, str, bytes], operation: OperationTypes, user_vars: dict[str, UserVar], listeners: list[AsyncResponseReader], user_class: UserClass, *args, **kwargs) -> ReturnFromPostProcessor:
def post_processor(
    response, operation, user_vars, listener, user_class, *args, **kwargs
) -> ReturnFromPostProcessor:
    if hasattr(response, "status_code") and response.status_code == 200: # if isinstance(response, ResponseContextManager)
        if hasattr(response, "headers") and ('set-cookie' in response.headers) and (len(response.headers["set-cookie"]) >0):
            # print("========================================================================")

            prelogin = response.json().get("success").get("srpB")

            conf = f"{user_class.environment.config=}" 
            # print("conf== "+conf)

            index_header_set_cookies_prelogin_Split = conf.split("UserVar(name='index_header_set_cookies_prelogin', next_value_rule=<NextValueRule.NEVER: 'never'>, select_rule=None, value='")[1][:2]
            # print("index_header_set_cookies_prelogin_Split== " + index_header_set_cookies_prelogin_Split) #2

            index_header_set_cookies_prelogin = index_header_set_cookies_prelogin_Split.split("'")[0]
            # print("index_header_set_cookies_prelogin== " + index_header_set_cookies_prelogin) #2

            if (int(index_header_set_cookies_prelogin)<0):   
                sbbid_session_id_Split=response.headers["set-cookie"].split(";")[0]
                # print(sbbid_session_id_Split) #sbbid_session_id=e811147d-89ee-483e-be80-a53443d66fbf
                
                sbbid_session_id = sbbid_session_id_Split.split('=')[1]
                # print(sbbid_session_id) #e811147d-89ee-483e-be80-a53443d66fbf
                
            else:
                sbbid_session_id_Split_List = response.headers["set-cookie"][int(index_header_set_cookies_prelogin)]
                # print(sbbid_session_id_Split_List)
                sbbid_session_id_Split = sbbid_session_id_Split_List.split(';')[0] #sbbid_session_id=df37afb5-df9d-40ba-973f-bbc86ddbc6c1; Path=/; HttpOnly
                # print(sbbid_session_id_Split) #sbbid_session_id=df37afb5-df9d-40ba-973f-bbc86ddbc6c1

                sbbid_session_id = sbbid_session_id_Split.split('=')[1]
                # print(sbbid_session_id) #df37afb5-df9d-40ba-973f-bbc86ddbc6c1   
                
            return ReturnFromPostProcessor(True, 'LO_UC11_login_ufs', {"sbbid_session_id": sbbid_session_id_Split, "prelogin": prelogin}, {})
        else:
            return ReturnFromPostProcessor(False, None, {}, {})   
    
    elif hasattr(response, "status_code") and response.status_code >= 400:
        return ReturnFromPostProcessor(False, None, {}, {})
    else:
        return ReturnFromPostProcessor(False, None, {}, {})


код ответа 500
тело ответа
{
"system": "282",
"error": "2001",
"message": "При загрузке данных произошла ошибка.\nМы уже работаем над её устранением.\nПовторите попытку позже.",
"type": "system_error"
}


код ответа 403
тело ответа
{
"message": "При загрузке данных произошла ошибка. Мы уже работаем над её устранением. Повторите попытку позже.",
"businessCode": "LAUNCHER:EPK_UNKNOWN_EXEPTION",
"system": 98,
"error": 3015
}