def _normalize_request_parameters(self, oauth_params, req_kwargs): ''' This process normalizes the request parameters as detailed in the OAuth 1.0 spec. Additionally we apply a `Content-Type` header to the request of the `FORM_URLENCODE` type if the `Content-Type` was previously set, i.e. if this is a `POST` or `PUT` request. This ensures the correct header is set as per spec. Finally we sort the parameters in preparation for signing and return a URL encoded string of all normalized parameters. :param oauth_params: OAuth params to sign with. :type oauth_params: dict :param req_kwargs: Request kwargs to normalize. :type req_kwargs: dict ''' normalized = [] params = req_kwargs.get('params', {}) data = req_kwargs.get('data', {}) headers = req_kwargs.get('headers', {}) # process request parameters for k, v in params.items(): if v is not None: normalized += [(k, v)] # process request data if 'Content-Type' in headers and \ headers['Content-Type'] == FORM_URLENCODED: for k, v in data.items(): normalized += [(k, v)] # extract values from our list of tuples all_normalized = [] for t in normalized: k, v = t if is_basestring(v) and not isinstance(v, bytes): v = v.encode('utf-8') all_normalized += [(k, v)] # add in the params from oauth_params for signing for k, v in oauth_params.items(): if (k, v) in all_normalized: # pragma: no cover continue all_normalized += [(k, v)] # sort the params as per the OAuth 1.0/a spec all_normalized.sort() # finally encode the params as a string return urlencode(all_normalized, True)\ .replace('+', '%20')\ .replace('%7E', '~')
def get_authorize_url(self, **params): ''' Returns a formatted authorize URL. :param \*\*params: Additional keyworded arguments to be added to the URL querystring. :type \*\*params: dict ''' params.update({'client_id': self.client_id}) return self.authorize_url + '?' + urlencode(params)
def get_authorize_url(self, request_token, **params): ''' Returns a formatted authorize URL. :param request_token: The request token as returned by :class:`get_request_token`. :type request_token: str :param \*\*params: Additional keyworded arguments to be added to the request querystring. :type \*\*params: dict ''' params.update({'oauth_token': request_token}) return self.authorize_url + '?' + urlencode(params)
def get_authorize_url(self, redirect_uri=None, scope='snsapi_base', **params): '''Returns a formatted authorize URL.''' assert redirect_uri params.update({ 'appid': self.appid, 'response_type': 'code', 'scope': scope, 'redirect_uri': redirect_uri }) query = urlencode(sorted(params.items())) return '{0}?{1}#wechat_redirect'.format(self.authorize_url, query)