# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test_58
# FileName:      requests_method.py
# Author:       xxxxxxx
# Datetime:     2024/1/4 11:01
# Description:
# 
# ---------------------------------------------------------------------------
import base64

import requests

from InterfaceAutoTest.common.read_ini import ReadIni


class RequestsMethod:
    def __init__(self):
        """关联token"""
        # 配置登录的数据
        login_url = ReadIni().get_host("bpm") + "/auth"
        login_data = {"username": "admin", "password": base64.b64encode("123456".encode()).decode()}
        # 创建Session对象
        self.bpm_session = requests.sessions.Session()
        # 将token更新到Session对象的headers中
        self.bpm_session.headers["Authorization"] = "Bearer "+self.bpm_session.post(url=login_url, json=login_data).json().get("token")

    def request_all(self, req_method, req_url, req_mime, case_data):
        """
        封装公共的请求方法
        :param req_method: 请求方法，字符串
        :param req_url: 请求url，字符串
        :param req_mime: 请求的媒体类型，字符串
        :param case_data: 用例数据
        :return: Response type
        """
        # 判断媒体类型是否为表单类型，如果是，使用data传参
        if req_mime == "application/x-www-form-urlencoded" or req_mime == "x-www-form-urlencoded":
            return self.bpm_session.request(method=req_method, url=req_url, data=case_data)

        # 判断媒体类型是否为json传参，如果是，使用json传参
        elif req_mime == "application/json" or req_mime == "json":
            return self.bpm_session.request(method=req_method, url=req_url, json=case_data)

        # 判断媒体类型是否为上传文件，如果是，使用files传参
        elif req_mime == "multipart/form-data" or req_mime == "form-data":
            return self.bpm_session.request(method=req_method, url=req_url, files=case_data)

        # 判断媒体类型是否为地址栏传参，如果是，使用params传参
        elif req_mime == "query" or req_mime == "params":
            return self.bpm_session.request(method=req_method, url=req_url, params=case_data)

        # 判断媒体类型是否为None，表示没有传参
        elif req_mime is None:
            return self.bpm_session.request(method=req_method, url=req_url)

        # 判断媒体类型是否query|json，表示地址栏和请求体中同时传参，使用params和json同时传参
        elif req_mime == "query|json" or req_mime == "json|query" or req_mime == "params|json":
            return self.bpm_session.request(method=req_method, url=req_url, params=case_data["query"], json=case_data["json"])

        # 判断媒体类型是否text或者为text/plain，表示请求体中传纯文本，使用data传参
        elif req_mime == "text" or req_mime == "text/plain":
            return self.bpm_session.request(method=req_method, url=req_url, data=case_data)

        else:
            raise NameError("传入的媒体类型，没有封装，请自行封装~")

