Exemple #1
0
 def _post_request(self, request, params, parser, body='', headers=None):
     """Make a POST request, optionally with a content body,
        and return the response, optionally as raw text.
     """
     headers = headers or {}
     path = self._sandboxify(request['path'])
     request = self.build_base_http_request('POST',
                                            path,
                                            None,
                                            data=body,
                                            params=params,
                                            headers=headers,
                                            host=self.host)
     try:
         response = self._mexe(request, override_num_retries=None)
     except BotoServerError as bs:
         raise self._response_error_factor(bs.status, bs.reason, bs.body)
     body = response.read()
     boto.log.debug(body)
     if not body:
         boto.log.error('Null body %s' % body)
         raise self._response_error_factory(response.status,
                                            response.reason, body)
     if response.status != 200:
         boto.log.error('%s %s' % (response.status, response.reason))
         boto.log.error('%s' % body)
         raise self._response_error_factory(response.status,
                                            response.reason, body)
     digest = response.getheader('Content-MD5')
     if digest is not None:
         assert content_md5(body) == digest
     contenttype = response.getheader('Content-Type')
     return self._parse_response(parser, contenttype, body)
Exemple #2
0
 def _post_request(self, request, params, parser, body='', headers=None):
     """Make a POST request, optionally with a content body,
        and return the response, optionally as raw text.
     """
     headers = headers or {}
     path = self._sandboxify(request['path'])
     request = self.build_base_http_request('POST', path, None, data=body,
                                            params=params, headers=headers,
                                            host=self.host)
     try:
         response = self._mexe(request, override_num_retries=None)
     except BotoServerError as bs:
         raise self._response_error_factory(bs.status, bs.reason, bs.body)
     body = response.read()
     boto.log.debug(body)
     if not body:
         boto.log.error('Null body %s' % body)
         raise self._response_error_factory(response.status,
                                            response.reason, body)
     if response.status != 200:
         boto.log.error('%s %s' % (response.status, response.reason))
         boto.log.error('%s' % body)
         raise self._response_error_factory(response.status,
                                            response.reason, body)
     digest = response.getheader('Content-MD5')
     if digest is not None:
         assert content_md5(body) == digest
     contenttype = response.getheader('Content-Type')
     return self._parse_response(parser, contenttype, body)
Exemple #3
0
 def post_request(self, path, params, cls, body='', headers={}, isXML=True):
     """Make a POST request, optionally with a content body,
        and return the response, optionally as raw text.
        Modelled off of the inherited get_object/make_request flow.
     """
     request = self.build_base_http_request('POST', path, None, data=body,
                   params=params, headers=headers, host=self.server_name())
     response = self._mexe(request, override_num_retries=None)
     body = response.read()
     boto.log.debug(body)
     if not body:
         boto.log.error('Null body %s' % body)
         raise self.ResponseError(response.status, response.reason, body)
     if response.status != 200:
         boto.log.error('%s %s' % (response.status, response.reason))
         boto.log.error('%s' % body)
         raise self.ResponseError(response.status, response.reason, body)
     if not isXML:
         digest = response.getheader('Content-MD5')
         assert content_md5(body) == digest
         return body
     obj = cls(self)
     h = XmlHandler(obj, self)
     xml.sax.parseString(body, h)
     return obj
Exemple #4
0
 def post_request(self, path, params, cls, body='', headers={}, isXML=True):
     """Make a POST request, optionally with a content body,
        and return the response, optionally as raw text.
        Modelled off of the inherited get_object/make_request flow.
     """
     request = self.build_base_http_request('POST',
                                            path,
                                            None,
                                            data=body,
                                            params=params,
                                            headers=headers,
                                            host=self.server_name())
     response = self._mexe(request, override_num_retries=None)
     body = response.read()
     boto.log.debug(body)
     if not body:
         boto.log.error('Null body %s' % body)
         raise self.ResponseError(response.status, response.reason, body)
     if response.status != 200:
         boto.log.error('%s %s' % (response.status, response.reason))
         boto.log.error('%s' % body)
         raise self.ResponseError(response.status, response.reason, body)
     if not isXML:
         digest = response.getheader('Content-MD5')
         assert content_md5(body) == digest
         return body
     obj = cls(self)
     h = XmlHandler(obj, self)
     xml.sax.parseString(body, h)
     return obj
Exemple #5
0
 def post_request(self, path, params, cls, body="", headers=None, isXML=True):
     """Make a POST request, optionally with a content body,
        and return the response, optionally as raw text.
        Modelled off of the inherited get_object/make_request flow.
     """
     headers = headers or {}
     request = self.build_base_http_request(
         "POST", path, None, data=body, params=params, headers=headers, host=self.host
     )
     response = self._mexe(request, override_num_retries=None)
     body = response.read()
     boto.log.debug(body)
     if not body:
         boto.log.error("Null body %s" % body)
         raise self.ResponseError(response.status, response.reason, body)
     if response.status != 200:
         boto.log.error("%s %s" % (response.status, response.reason))
         boto.log.error("%s" % body)
         raise self.ResponseError(response.status, response.reason, body)
     if not isXML:
         digest = response.getheader("Content-MD5")
         assert content_md5(body) == digest
         return body
     return self._parse_response(cls, body)
Exemple #6
0
class MWSConnection(AWSQueryConnection):

    ResponseFactory = boto.mws.response.ResponseFactory
    ResponseErrorFactory = boto.mws.exception.ResponseErrorFactory

    def __init__(self, *args, **kw):
        kw.setdefault('host', 'mws.amazonservices.com')
        self._sandboxed = kw.pop('sandbox', False)
        self.Merchant = kw.pop('Merchant', None) or kw.get('SellerId')
        self.SellerId = kw.pop('SellerId', None) or self.Merchant
        kw = self._setup_factories(kw.pop('factory_scopes', []), **kw)
        super(MWSConnection, self).__init__(*args, **kw)

    def _setup_factories(self, extrascopes, **kw):
        for factory, (scope, Default) in {
                'response_factory': (boto.mws.response, self.ResponseFactory),
                'response_error_factory':
            (boto.mws.exception, self.ResponseErrorFactory),
        }.items():
            if factory in kw:
                setattr(self, '_' + factory, kw.pop(factory))
            else:
                scopes = extrascopes + [scope]
                setattr(self, '_' + factory, Default(scopes=scopes))
        return kw

    def _sandboxify(self, path):
        if not self._sandboxed:
            return path
        splat = path.split('/')
        splat[-2] += '_Sandbox'
        return splat.join('/')

    def _required_auth_capability(self):
        return ['mws']

    def _post_request(self, request, params, parser, body='', headers=None):
        """Make a POST request, optionally with a content body,
           and return the response, optionally as raw text.
        """
        headers = headers or {}
        path = self._sandboxify(request['path'])
        request = self.build_base_http_request('POST',
                                               path,
                                               None,
                                               data=body,
                                               params=params,
                                               headers=headers,
                                               host=self.host)
        try:
            response = self._mexe(request, override_num_retries=None)
        except BotoServerError, bs:
            raise self._response_error_factor(bs.status, bs.reason, bs.body)
        body = response.read()
        boto.log.debug(body)
        if not body:
            boto.log.error('Null body %s' % body)
            raise self._response_error_factory(response.status,
                                               response.reason, body)
        if response.status != 200:
            boto.log.error('%s %s' % (response.status, response.reason))
            boto.log.error('%s' % body)
            raise self._response_error_factory(response.status,
                                               response.reason, body)
        digest = response.getheader('Content-MD5')
        if digest is not None:
            assert content_md5(body) == digest
        contenttype = response.getheader('Content-Type')
        return self._parse_response(parser, contenttype, body)