Могу ли я установить базовый URL для всех запросов OAuth2Session? - PullRequest
0 голосов
/ 12 февраля 2020

Мой вопрос касается, в частности, Microsoft Graph API, но приветствуется более широко применимое решение.

У меня есть сеанс, созданный следующим образом:

# Token acquisition code left out
session = OAuth2Session(token=token)

HTTP-запросы с этим сеанс выглядит следующим образом:

# List files in OneDrive
response = session.get("https://graph.microsoft.com/v1.0/me/drive/root/children")

Можно ли установить базовый URL, чтобы я мог пропустить base_url каждый раз? Я хотел бы иметь возможность сделать вызов следующим образом:

# List files in OneDrive
response = session.get("me/drive/root/children")

Я смог сделать это путем создания подкласса OAuth2Session и перегрузки метода Session.request(), но это кажется мне неправильным подходом.

# Bad hack
class GraphSession (OAuth2Session):
    def request(self, *args, **kwargs):
        if len(args) > 1: # url as non-kw arg
            args = list(args) # can't assign to a tuple
            args[1] = 'https://graph.microsoft.com/v1.0/' + args[1]
        else: # url must be a kw arg
            kwargs['url'] = 'https://graph.microsoft.com/v1.0/' + kwargs['url']
        return super(GraphSession, self).request(*args, **kwargs)

1 Ответ

1 голос
/ 27 февраля 2020

Взгляните на этот код из Python консольного приложения для Microsoft Graph образец.

def api_endpoint(url):
    """Convert a relative path such as /me/photo/$value to a full URI based
    on the current RESOURCE and API_VERSION settings in config.py.
    """
    if urllib.parse.urlparse(url).scheme in ['http', 'https']:
        return url # url is already complete
    return urllib.parse.urljoin(f'{config.RESOURCE}/{config.API_VERSION}/',
                                url.lstrip('/'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...