1from oauthlib.oauth2 import WebApplicationClient, InsecureTransportError 
    2from oauthlib.oauth2 import is_secure_transport 
    3from requests.auth import AuthBase 
    4 
    5 
    6class OAuth2(AuthBase): 
    7    """Adds proof of authorization (OAuth2 token) to the request.""" 
    8 
    9    def __init__(self, client_id=None, client=None, token=None): 
    10        """Construct a new OAuth 2 authorization object. 
    11 
    12        :param client_id: Client id obtained during registration 
    13        :param client: :class:`oauthlib.oauth2.Client` to be used. Default is 
    14                       WebApplicationClient which is useful for any 
    15                       hosted application but not mobile or desktop. 
    16        :param token: Token dictionary, must include access_token 
    17                      and token_type. 
    18        """ 
    19        self._client = client or WebApplicationClient(client_id, token=token) 
    20        if token: 
    21            for k, v in token.items(): 
    22                setattr(self._client, k, v) 
    23 
    24    def __call__(self, r): 
    25        """Append an OAuth 2 token to the request. 
    26 
    27        Note that currently HTTPS is required for all requests. There may be 
    28        a token type that allows for plain HTTP in the future and then this 
    29        should be updated to allow plain HTTP on a white list basis. 
    30        """ 
    31        if not is_secure_transport(r.url): 
    32            raise InsecureTransportError() 
    33        r.url, r.headers, r.body = self._client.add_token( 
    34            r.url, http_method=r.method, body=r.body, headers=r.headers 
    35        ) 
    36        return r