Ejemplo n.º 1
0
    def _make_request(self, method, uri, body_parameters=None):
        headers = {}
        body = None
        if body_parameters is not None:
            headers = {
                'Content-Type': 'application/x-www-form-urlencoded',
            }
            body = urlencode(body_parameters)
        client = oauth1.Client(self._consumer_key,
                               client_secret=self._consumer_secret,
                               resource_owner_key=self._token_key,
                               resource_owner_secret=self._token_secret,
                               encoding='utf-8',
                               decoding='utf-8')
        uri, headers, body = client.sign(uri,
                                         http_method=method,
                                         headers=headers,
                                         body=body)
        headers = Headers(dict((k, [v]) for k, v in headers.items()))

        body_producer = None
        if body is not None:
            body_producer = FileBodyProducer(StringIO(body))

        d = self._agent.request(method, uri, headers, body_producer)
        return d.addCallback(self._handle_error)
Ejemplo n.º 2
0
    def call(self, url, method='GET', headers={}):
        headers = Headers({key: [value] for key, value in headers.items()})
        d = self.agent.request(method, url, headers, None)

        def cbRequest(response):
            finished = defer.Deferred()
            response.deliverBody(BodyReceiver(finished, response))
            return finished

        d.addCallback(cbRequest)
        return d
Ejemplo n.º 3
0
    async def _request(self, method, url, headers, body):

        headers = Headers({
            k.encode('utf-8'): [v.encode('utf-8')]
            for k, v in headers.items() if k.lower() != 'content-length'
        })

        response = await treq.request(method, url, headers=headers, data=body)

        response_headers = {
            k.decode('utf-8').lower(): v[0].decode('utf-8')
            for k, v in response.headers.getAllRawHeaders()
        }

        return response.code, await response.content(), response_headers
Ejemplo n.º 4
0
 def call(self, url, method='GET', headers={}):
     headers = Headers({
         key: [value] for key, value in headers.items()
     })
     d = self.agent.request(
         method, url, headers, None
     )
     def cbRequest(response):
         finished = defer.Deferred()
         response.deliverBody(
             BodyReceiver(finished, response)
         )
         return finished
     d.addCallback(cbRequest)
     return d
Ejemplo n.º 5
0
    async def _request(self, method, url, headers, body=b''):
        # We need to encode the headers to a format that Twisted will like.
        # As a note: treq will set a content-length even if we do, so we need
        # to strip any content-length header.
        headers = Headers({
            k.encode('utf-8'): [v.encode('utf-8')]
            for k, v in headers.items() if k.lower() != 'content-length'
        })
        response = await treq.request(method, url, headers=headers, data=body)

        # We need to map the headers back now. In the future, we should fix
        # this up so that any header that appears more than once is handled
        # appropriately.
        response_headers = {
            k.decode('utf-8').lower(): v[0].decode('utf-8')
            for k, v in response.headers.getAllRawHeaders()
        }
        return response.code, response_headers, await response.content()
Ejemplo n.º 6
0
    def _request(self, endpoint, method, data=None):
        body = None
        params = {}
        if method == "GET" and isinstance(data, dict):
            endpoint = endpoint + '?' + urllib.urlencode(data)
        else:
            if isinstance(data, dict):
                body = urllib.urlencode(data)
            else:
                body = data
        
        request = oauth.Request.from_consumer_and_token(self.consumer, 
            http_method=method, http_url=endpoint, parameters=params)
        request.sign_request(self.signature, self.consumer, None)

        headers = request.to_header(self.realm)
        headers['User-Agent'] = 'SimpleGeo Twisted Client v%s' % simplegeo.API_VERSION
        headers = Headers(dict([(k, [v]) for k, v in headers.items()]))
        
        agent = client.Agent(reactor)
                
        response = yield agent.request(method, endpoint, headers, (body and StringProducer(body)))
        
        body = yield receive_body(response)
        
        if body: # Empty body is allowed.
            try:
                body = json.loads(body)
            except ValueError:
                raise DecodeError(resp, body)

        if str(response.code)[0] != '2':
            code = str(response.code)
            message = body
            if isinstance(body, dict):
                if 'code' in body:
                    code = body['code']
                if 'message' in body:
                    message = body['message']

            raise simplegeo.APIError(code, message, response.headers)

        returnValue(body)
def make_request(method, url=None, headers=None, *args, **kwargs):
    """ Makes a request """
    headers = Headers(dict([(k, [v]) for k, v in headers.items()]))

    formatter = None
    if 'formatter' in kwargs:
        formatter = kwargs.get('formatter')
        del kwargs['formatter']

    if not formatter:
        def _nothing(result):
            return result
        formatter = _nothing

    params = kwargs.get('params', None)

    if params:
        params = urllib.urlencode(params)

    url = _full_url(url, params)
    body = kwargs.get('data')

    #print method, url, headers, body

    contextFactory = WebClientContextFactory()
    agent = Agent(reactor, contextFactory)
    d = agent.request(
        method,
        url,
        headers,
        body)

    load_body = True
    if method.upper() in ['HEAD', 'DELETE']:
        load_body = False

    d.addCallback(complete_request, formatter, load_body=load_body)
    d.addErrback(print_error)
    return d
def make_request(method, url=None, headers=None, *args, **kwargs):
    """ Makes a request """
    headers = Headers(dict([(k, [v]) for k, v in headers.items()]))

    formatter = None
    if 'formatter' in kwargs:
        formatter = kwargs.get('formatter')
        del kwargs['formatter']

    if not formatter:
        def _nothing(result):
            return result
        formatter = _nothing

    params = kwargs.get('params', None)

    if params:
        params = urllib.urlencode(params)

    url = _full_url(url, params)
    body = kwargs.get('data')

    # print method, url, headers, body

    contextFactory = WebClientContextFactory()
    agent = Agent(reactor, contextFactory)
    d = agent.request(
        method,
        url,
        headers,
        body)

    load_body = True
    if method.upper() in ['HEAD', 'DELETE']:
        load_body = False

    d.addCallback(complete_request, formatter, load_body=load_body)
    d.addErrback(print_error)
    return d
Ejemplo n.º 9
0
    def _upload_media(self, uri, media, params):
        boundary = 'txtwitter'
        file_field = 'media'

        body = ''
        if params:
            for key, value in params.items():
                body += '--%s\r\n' % boundary
                body += 'Content-Disposition: form-data, name=%s\r\n' % key
                body += '\r\n'
                body += str(value)
                body += '\r\n'

        body += '--%s\r\n' % boundary
        body += 'Content-Disposition: form-data; name=%s; filename=%s\r\n' % (
            file_field, media.name)
        body += 'Content-Type: application/octet-stream\r\n'
        body += '\r\n'
        body += media.read()
        body += '\r\n--%s--\r\n' % boundary

        client = oauth1.Client(
            self._consumer_key, client_secret=self._consumer_secret,
            resource_owner_key=self._token_key,
            resource_owner_secret=self._token_secret, encoding='utf-8',
            decoding='utf-8')
        uri = self._make_uri(self._upload_url_base, uri)
        headers = {
            'Content-Type': 'multipart/form-data; boundary=%s' % boundary,
        }
        uri, headers, _ = client.sign(uri, http_method='POST', headers=headers)
        headers = Headers(dict((k, [v]) for k, v in headers.items()))
        body_producer = FileBodyProducer(StringIO(body))

        d = self._agent.request('POST', uri, headers, body_producer)
        d.addCallback(self._handle_error)
        d.addCallback(self._parse_response)
        return d
Ejemplo n.º 10
0
    def _make_request(self, method, uri, body_parameters=None):
        headers = {}
        body = None
        if body_parameters is not None:
            headers = {
                'Content-Type': 'application/x-www-form-urlencoded',
            }
            body = urlencode(body_parameters)
        client = oauth1.Client(
            self._consumer_key, client_secret=self._consumer_secret,
            resource_owner_key=self._token_key,
            resource_owner_secret=self._token_secret, encoding='utf-8',
            decoding='utf-8')
        uri, headers, body = client.sign(
            uri, http_method=method, headers=headers, body=body)
        headers = Headers(dict((k, [v]) for k, v in headers.items()))

        body_producer = None
        if body is not None:
            body_producer = FileBodyProducer(StringIO(body))

        d = self._agent.request(method, uri, headers, body_producer)
        return d.addCallback(self._handle_error)