Example #1
0
    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
Example #2
0
    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