def request(self, api_url, method="GET", parameters=None, body=None, raw_response=False): access_token = self.token http_method = "POST" if method in ["POST", "PUT"] else method oauth_request = oauth.OAuthRequest.from_consumer_and_token( self.consumer, token=access_token, http_method=http_method, http_url=api_url, parameters=parameters) oauth_request.sign_request(self.signature_method, self.consumer, access_token) headers = {} if method == "PUT": headers["X-HTTP-Method-Override"] = "PUT" if body is not None and http_method == "POST": body += "&".join( "%s=%s" % (oauth.escape(str(k)),oauth.escape(str(v))) for k, v in parameters.iteritems()) request_url = oauth_request.to_url() if http_method == "POST": qs = urlparse.urlparse(oauth_request.to_url()).query qparams = oauth_request._split_url_string(qs) qs = "&".join("%s=%s" % (oauth.escape(str(k)), oauth.escape(str(v))) for k, v in qparams.iteritems()) request_url = oauth_request.get_normalized_http_url() + "?" + qs resp = urlfetch.fetch(request_url, payload=body, headers=headers, method=http_method) self.last_response = resp if resp.status_code > 201: raise Exception("API returned an error", resp.content) api_response = resp.content if raw_response else simplejson.loads(resp.content) return api_response
def request(self, api_url, method="GET", parameters=None, body=None, raw_response=False, gdata_service=None): access_token = self.token http_method = "POST" if method in ["POST", "PUT"] else method oauth_request = oauth.OAuthRequest.from_consumer_and_token( self.consumer, token=access_token, http_method=http_method, http_url=api_url, parameters=parameters) oauth_request.sign_request(self.signature_method, self.consumer, access_token) headers = oauth_request.to_header() request_url = oauth_request.to_url() if method == "PUT": headers["X-HTTP-Method-Override"] = "PUT" if body is not None and http_method == "POST": body += "&".join( "%s=%s" % (oauth.escape(str(k)),oauth.escape(str(v))) for k, v in parameters.iteritems()) if http_method == "POST": qs = urlparse.urlparse(oauth_request.to_url()).query qparams = oauth_request._split_url_string(qs) qs = "&".join("%s=%s" % (oauth.escape(str(k)), oauth.escape(str(v))) for k, v in qparams.iteritems()) request_url = oauth_request.get_normalized_http_url() + "?" + qs else: if parameters: request_url = "%s?%s" % (oauth_request.http_url, urllib.urlencode(parameters)) else: request_url = oauth_request.http_url client = gdata_service or gdata.contacts.service.ContactsService() resp = client.GetFeed(request_url, extra_headers=headers, converter=gdata.contacts.ContactsFeedFromString) return resp