Я хочу построить клиент Python поверх REST API, который использует аутентификацию с помощью api_token.Следовательно, все вызовы API требуют api_token.Поскольку довольно некрасиво добавлять поле
'token=...'
например,
a = f1(5, token='token')
b = f2(6, 12, token='token')
c = f3(2, 'a', token='token')
, где внутренне f1 и f2 делегируют REST api
каждому вызову функции.Я хотел бы получить что-то вроде:
auth = authenticate('token')
a = f1(5)
b = f2(6, 12,)
c = f3(2, 'a')
Что я могу сделать, это создать класс и сделать все функции членами-функциями.Следовательно, у нас будет:
auth = calculator('token')
a = auth.f1(5)
b = auth.f2(6, 12,)
c = auth.f3(2, 'a')
, но это также будет несколько уродливо.Я пытаюсь заставить это работать с декораторами, но пока безрезультатно.
class authenticate:
def __init__(self, token):
self.token = token
def __call__(self, func):
def functor(*args, **kwargs):
return func(*args, **kwargs, key=self.authentication)
return functor
@authenticate
def f1(a, key):
data = a
result = requests.get(1, data, key)
return result
Однако, похоже, это ни к чему не приведет.Мне также интересно, может ли это работать вообще, поскольку декораторы выполняются во время импорта, а токен добавляется во время выполнения.
Любые предложения о том, как заставить это работать, или кто-нибудь знает, есть ли другой стандартный образец для этого?