# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test59
# FileName:      requests_method.py
# Author:       laozhao
# Datetime:     2024/3/15 16:12
# Description:
# 
# ---------------------------------------------------------------------------
import base64
import requests
from APIAutoTest_v2.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关键字传参
        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)

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


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