def params(self):
     parameters = self.parameters
     signature = self.signer.sign_string(self.signature,
                                         str(self.credentials.access_key_secret) + '&')
     parameters['Signature'] = signature
     params = '?' + urlencode(parameters)
     return params
    def handle_request(self, context):
        http_request = context.http_request
        api_request = context.api_request
        http_request.accept_format = 'JSON'

        # handle params to body_params or query_params
        parse_params = {
            "query": (api_request._query_params, "QueryParams"),
            "body": (api_request._body_params, "BodyParams"),
            "path": (api_request.path_params, "PathParams"),
            "header": (api_request._headers, "Headers")
        }
        # TODO default params is query_params
        if api_request.params:
            key = api_request._param_position
            if key in parse_params:
                params, position = parse_params[key]
                params.update(self._filter_params(api_request.params))
                context.client.logger.debug('Request received. Product:%s %s: %s',
                                            context.client.product_code, position, str(params))

        # handle api_request region_id, rpc and roa must
        if 'RegionId' not in api_request._query_params:
            api_request._query_params['RegionId'] = context.config.region_id

        # handle headers
        body_params = api_request._body_params
        # ROA GET POST PUT DEL
        # RPC GET POST

        if body_params:
            body = urlencode(body_params)
            api_request._content = body
            api_request._headers["Content-Type"] = format_type.APPLICATION_FORM

        elif api_request._content and "Content-Type" not in api_request._headers:
            api_request._headers["Content-Type"] = format_type.APPLICATION_OCTET_STREAM

        http_request.body = api_request._content

        user_agent = _modify_user_agent(context.config.user_agent)

        api_request._headers['User-Agent'] = user_agent
        api_request._headers['x-acs-region-id'] = str(context.config.region_id)
        api_request._headers['x-sdk-client'] = 'python/2.0.0'
        api_request._headers['Accept-Encoding'] = 'identity'

        # handle other attr
        http_request.method = api_request.method
        http_request.proxy = context.config.proxy  # {}
        http_request.scheme = api_request.scheme  # http|https
        if http_request.scheme == 'https':
            if context.config.enable_https:
                http_request.port = context.config.https_port
            else:
                raise ClientException(msg='Please make sure the config enable_https is True.')
        else:
            http_request.port = context.config.http_port
 def params(self):
     param = ""
     param += self._uri
     if not param.endswith("?"):
         param += "?"
     param += urlencode(self.request._query_params)
     if param.endswith("?"):
         param = param[0:(len(param) - 1)]
     return param
    def handle_request(self, context):
        http_request = context.http_request
        api_request = context.api_request
        credentials = http_request.credentials

        signature, headers, params = Signer().sign(credentials, context)
        http_request.signature = signature
        http_request.params = params
        # modify headers
        body_params = api_request._body_params

        if body_params:
            body = urlencode(body_params)
            headers = self._modify_http_headers(headers, body,
                                                format_type.APPLICATION_FORM)
        context.http_request.headers = headers
 def _calc_signature(self, method, params):
     sorted_parameters = sorted(iteritems(params), key=lambda queries: queries[0])
     sorted_query_string = self._pop_standard_urlencode(urlencode(sorted_parameters))
     canonicalized_query_string = self._pop_standard_urlencode(pathname2url(sorted_query_string))
     string_to_sign = method + "&%2F&" + canonicalized_query_string
     return string_to_sign