# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test59
# FileName:      requests_method.py
# Author:       laozhao
# Datetime:     2024/3/15 16:12
# Description:
# 
# ---------------------------------------------------------------------------
import base64
import requests

from InterfaceAutoTest.common.read_ini import ReadIni


class RequestsMethod:
    def __init__(self):
        """关联登录成功的状态--关联token"""
        # 获取登录的url
        login_url = ReadIni().get_host("bpm_host")+"/auth"
        # 配置登录数据
        login_data = {"username": "admin", "password": base64.b64encode("123456".encode()).decode()}
        # 创建Session对象
        self.bpm_session = requests.sessions.Session()
        # 使用Session对象发送登录请求
        res = self.bpm_session.request(method="post", url=login_url, json=login_data)
        # 提取token，将token更新到Session对象的headers中
        self.bpm_session.headers["Authorization"] = "Bearer "+res.json().get("token")

    def request_all(self, req_url, req_method, req_mime, case_data):
        """
        公共的请求方法
        :param req_url: 请求的url，字符串格式
        :param req_method: 请求的方法，字符串格式
        :param req_mime: 请求的媒体类型，字符串格式
        :param case_data: 用例数据
        :return: Response type
        """
        # 判断请求的媒体类型的值是否为application/x-www-form-urlencoded或x-www-form-urlencoded，使用data关键字传参
        # 除了json和上传文件以外，在请求体传参的使用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)

        # 判断请求的媒体类型的值是否为application/json或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)

        # 判断请求的媒体类型的值是否为multipart/form-data或form-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)

        # 判断请求的媒体类型的值是否为query或params，使用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 或者为json|query, 表示请求体和地址栏同时传参
        elif req_mime == "query|json" or req_mime == "json|query":
            return self.bpm_session.request(method=req_method, url=req_url, params=case_data["query"], json=case_data["body"])

        # 其他类型--返回一个错误的提示信息
        else:
            raise ValueError("传入的媒体类型，没封装，请自行封装")


if __name__ == '__main__':
    req = RequestsMethod()