使用装饰器重新授权Python请求

时间:2020-08-24 23:25:34

标签: python python-requests decorator

我有一个类,其中包含几个都可以发出API请求的方法调用。我遇到的问题是,在进行所有调用之前,我的授权令牌已过期,我需要重新授权。我不知道我的授权调用将在哪个API调用上超时,因此我必须在每个API调用上添加一个检查。

一种选择是在每个API调用之后添加检查,以查看是否收到401响应,然后重新授权并重试我的API调用,但是我想找到一种比在每个API调用中重复代码更好的方法。 / p>

我还考虑了一种通用方法,可以在请求中传递信息,但是由于我的请求是如此不同,我最终几乎对每个调用都做出特殊情况。

理想情况下,我将能够使用装饰器来捕获是否存在授权异常,重新授权并重试响应。看起来像这样:

Class ClassA(object):
    def __init__(self, token, api_data, more_api_info):
        self.token = token
        self.api_data = api_data
        self.more_api_info = more_api_info


Class ClassB(object):

    def run_the_methods(self, ClassA):
        self.do_auth(ClassA)
        self.do_api_call(ClassA)
        self.do_another_api_call(ClassA)

    def renew_auth(f):
        def wrapper(self, *args, **kwargs):
            try:
                return f
            except:
                self.do_auth(ClassA)
                return f

    def do_auth(self, ClassA):
        #get new token
        ClassA.token = token
    
    @renew_auth
    def do_api_call(self, ClassA):
        #use my auth to do request
        #if response.status_code == 401:
             #raise Exception

    @renew_auth
    def do_another_api_call(self, ClassA):
        #use my auth to do request
        #if response.status_code == 401:
             #raise Exception

是否可以通过这种方式使用装饰器?

0 个答案:

没有答案