# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test62
# FileName:      request_method.py
# Author:       wen
# Datetime:     2024/8/31 下午3:54
# Description:
# 
# ---------------------------------------------------------------------------
import requests

from Test_3.common.basic_read_ini import ReadIni


class RequestMethod:
    def __init__(self):
        # 配置登录数据
        login_data = {
            "username": "admin",
            "password": "EuaozNT/aGWiIjWYfJUjoGeLD/vQR5o4hTaHkaSPnfpmIkdQ6O83HZt+uCsiY02ssw09/ZRYFVVLDn6nzkTvR"
                        "g28EsWAqZGOGqiMTSSY/MADPHKRxP+8Lc6CTPKRwkpLKgDeVUYAhqT7s2K4WO0W2Vv2nGRyEHdy+v7UyPe2bv8="}
        # 获取域名
        login_url = ReadIni().get_host("bpm_host") + "/auth"
        # 创建Session对象
        self.bpm_session = requests.sessions.Session()
        # 更新token
        self.bpm_session.headers["Authorization"] = f'Bearer {self.bpm_session.request(method="post", url=login_url, json=login_data).json().get("token")}'

    def request_all(self, case_url, case_method, case_mime, case_data):
        # 封装公共的请求方法,根据不同的用例媒体类型使用不同的关键字传参
        # 判断用例的媒体类型为application/json或者json
        if case_mime == 'application/json' or case_mime == 'json':
            return self.bpm_session.request(method=case_method, url=case_url, json=case_data)
        # 判断用例的媒体类型为application/x-www-form-urlencoded或者为form
        elif case_mime == 'application/x-www-form-urlencoded' or case_mime == 'form':
            # 除了上传文件和json类型在请求体中传参,其他类型都使用data关键字传参
            return self.bpm_session.request(method=case_method, url=case_url, data=case_data)
        # 判断用例的媒体类型为multipart/form-data或者为form-data
        elif case_mime == 'multipart/form-data' or case_mime == 'form-data':
            return self.bpm_session.request(method=case_method, url=case_url, files=case_data)
        # 判断用例的媒体类型为query或者为params、地址栏
        elif case_mime == 'query' or case_mime == 'params':
            return self.bpm_session.request(method=case_method, url=case_url, params=case_data)
        # 判断用例的媒体类型为None,表示没有传参
        elif case_mime is None:
            return self.bpm_session.request(method=case_method, url=case_url)
        # 判断用例的媒体类型为query|json,或者json|query,表示地址栏和请求体同时传参
        elif case_mime == "query|json" or case_mime == "json|query":
            return self.bpm_session.request(method=case_method, url=case_url, params=case_data["query"], json=case_data["body"])
        else:
            raise ValueError("用例媒体类型错误,请自行封装请求方法")