Exemplo n.º 1
0
 def download(self, url):
     """
     Download the docuemnt.
     @param url: A document url.
     @type url: str.
     @return: A file pointer to the docuemnt.
     @rtype: file-like
     """
     store = DocumentStore()
     fp = store.open(url)
     if fp is None:
         fp = self.options.transport.open(Request(url))
     content = fp.read()
     fp.close()
     ctx = self.plugins.document.loaded(url=url, document=content)
     content = ctx.document
     sax = Parser()
     return sax.parse(string=content)
Exemplo n.º 2
0
 def send(self, soapenv):
     """
     Send soap message.
     @param soapenv: A soap envelope to send.
     @type soapenv: L{Document}
     @return: The reply to the sent message.
     @rtype: I{builtin} or I{subclass of} L{Object}
     """
     result = None
     location = self.location()
     binding = self.method.binding.input
     transport = self.options.transport
     retxml = self.options.retxml
     prettyxml = self.options.prettyxml
     log.debug('sending to (%s)\nmessage:\n%s', location, soapenv)
     try:
         self.last_sent(soapenv)
         plugins = PluginContainer(self.options.plugins)
         plugins.message.marshalled(envelope=soapenv.root())
         if prettyxml:
             soapenv = soapenv.str()
         else:
             soapenv = soapenv.plain()
         soapenv = soapenv.encode('utf-8')
         result = plugins.message.sending(envelope=soapenv)
         if (result):
             soapenv = result.envelope
         request = Request(location, soapenv)
         request.headers = self.headers()
         reply = transport.send(request)
         ctx = plugins.message.received(reply=reply.message)
         reply.message = ctx.reply
         if retxml:
             result = reply.message
         else:
             result = self.succeeded(binding, reply.message)
     except TransportError as e:
         if e.httpcode in (202, 204):
             result = None
         else:
             log.error(self.last_sent())
             result = self.failed(binding, e)
     return result
Exemplo n.º 3
0
 def open(self, url):
     """
     Open an XML document at the specified I{url}.
     First, the document attempted to be retrieved from
     the I{document cache}.  If not found, it is downloaded and
     parsed using the SAX parser.  The result is added to the
     document store for the next open().
     @param url: A document url.
     @type url: str.
     @return: The specified XML document.
     @rtype: I{Document}
     """
     d = self.options.cache.get(url)
     if d is None:
         fp = self.options.transport.open(Request(url))
         sax = Parser()
         d = sax.parse(file=fp)
         #self.options.cache.put(url, d)
     return d
Exemplo n.º 4
0
    def test_send(self):
        """ Verify the send method POSTs data to the API and returns a Reply object. """
        request = Request(API_URL)
        body = str(uuid.uuid4())
        httpretty.register_uri(httpretty.POST,
                               API_URL,
                               body=body,
                               content_type=CONTENT_TYPE,
                               forcing_headers={'date': 'never'})

        transport = RequestsTransport()
        response = transport.send(request)

        self.assertEqual(response.code, 200)
        self.assertEqual(response.headers, {
            'date': 'never',
            'content-type': CONTENT_TYPE
        })
        self.assertEqual(response.message, body)
Exemplo n.º 5
0
    def test_string_representation_with_message(self, url, headers, message):
        for key, value in headers.items():
            old_key = key
            if isinstance(key, text_type):
                key = key.encode("utf-8")
                del headers[old_key]
            if isinstance(value, text_type):
                value = value.encode("utf-8")
            headers[key] = value
        if isinstance(message, text_type):
            message = message.encode("utf-8")
        request = Request(url, message)
        request.headers = headers
        expected = u("""\
URL: %s
HEADERS: %s
MESSAGE:
%s""") % (url, request.headers, message.decode("raw_unicode_escape"))
        assert text_type(request) == expected
        if sys.version_info < (3, ):
            assert str(request) == expected.encode("utf-8")
Exemplo n.º 6
0
 def parse(self, file=None, url=None, string=None):
     """ parse a document """
     handler = Handler()
     timer = metrics.Timer()
     timer.start()
     if file is not None:
         parse(file, handler)
         timer.stop()
         metrics.log.debug('sax (%s) duration: %s', file, timer)
         return handler.nodes[0]
     if url is not None:
         fp = self.transport.open(Request(url))
         parse(fp, handler)
         timer.stop()
         metrics.log.debug('sax (%s) duration: %s', url, timer)
         return handler.nodes[0]
     if string is not None:
         parseString(string, handler)
         timer.stop()
         metrics.log.debug('%s\nsax duration: %s', string, timer)
         return handler.nodes[0]
Exemplo n.º 7
0
def test_request_as_string(message):

    request = Request("my url", message)

    request.headers["aaa"] = 1

    expected = """\

URL: my url

HEADERS: %s

MESSAGE:

%s""" % (request.headers, message)

    assert str(request) == expected

    if sys.version_info < (3, 0):

        assert str(request) == expected.encode("utf-8")
Exemplo n.º 8
0
 def download(self, url):
     """
     Download the document.
     @param url: A document URL.
     @type url: str.
     @return: A file pointer to the document.
     @rtype: file-like
     """
     content = None
     store = self.options.documentStore
     if store is not None:
         content = store.open(url)
     if content is None:
         fp = self.options.transport.open(Request(url))
         try:
             content = fp.read()
         finally:
             fp.close()
     ctx = self.plugins.document.loaded(url=url, document=content)
     content = ctx.document
     sax = Parser()
     return sax.parse(string=content)
Exemplo n.º 9
0
 def send(self, soapenv):
     """
     Send soap message.
     @param soapenv: A soap envelope to send.
     @type soapenv: L{Document}
     @return: The reply to the sent message.
     @rtype: I{builtin} or I{subclass of} L{Object}
     """
     location = self.location()
     log.debug('sending to (%s)\nmessage:\n%s', location, soapenv)
     original_soapenv = soapenv
     plugins = PluginContainer(self.options.plugins)
     plugins.message.marshalled(envelope=soapenv.root())
     if self.options.prettyxml:
         soapenv = soapenv.str()
     else:
         soapenv = soapenv.plain()
     soapenv = soapenv.encode('utf-8')
     ctx = plugins.message.sending(envelope=soapenv)
     soapenv = ctx.envelope
     if self.options.nosend:
         return RequestContext(self, soapenv, original_soapenv)
     request = Request(location, soapenv)
     request.headers = self.headers()
     try:
         timer = metrics.Timer()
         timer.start()
         reply = self.options.transport.send(request)
         timer.stop()
         metrics.log.debug('waited %s on server reply', timer)
     except TransportError as e:
         content = e.fp and e.fp.read() or ''
         return self.process_reply(reply=content,
                                   status=e.httpcode,
                                   description=tostr(e),
                                   original_soapenv=original_soapenv)
     return self.process_reply(reply=reply.message,
                               original_soapenv=original_soapenv)
Exemplo n.º 10
0
 def test_construct_with_no_message(self):
     request = Request("some://url")
     assert request.headers == {}
     assert request.message is None
Exemplo n.º 11
0
def test_request_without_message():
    request = Request("for a bitch it's haaaard...")
    assert request.url == "for a bitch it's haaaard..."
    assert request.message is None
    assert request.headers == {}
Exemplo n.º 12
0
def test_request_constructor(url, message):
    request = Request(url, message)
    assert request.url == url
    assert request.message == message
    assert request.headers == {}