Example #1
0
    def __call__(self):
        self.runtime.events.put((self.handler.onHTTPInit, (self.request,), {}))
        try:
            handle = urlopen(self.py_request)
            body = handle.read()
        except HTTPError as e:
            response = _HTTPResponse()
            response.setCode(e.code)
            response.setBody(e.read().decode('utf-8'))
            for k,v in e.info().items():
                response.setHeader(k, v.strip())
            self.runtime.events.put((self.handler.onHTTPResponse, (self.request, response), {}))
        except URLError as exc:
            import quark
            self.runtime.events.put((self.handler.onHTTPError, (self.request, quark.HTTPError(str(exc.reason))), {}))
        except Exception as exc:
            import quark
            self.runtime.events.put((self.handler.onHTTPError, (self.request, quark.HTTPError(str(exc))), {}))
        else:
            response = _HTTPResponse()
            response.setCode(handle.getcode())
            response.setBody(body.decode('utf-8'))
            for k,v in handle.info().items():
                response.setHeader(k, v.strip())
            self.runtime.events.put((self.handler.onHTTPResponse, (self.request, response), {}))

        self.runtime.events.put((self.handler.onHTTPFinal, (self.request,), {}))
Example #2
0
 def __call__(self):
     self.runtime.events.put((self.handler.onHTTPInit, (self.request,), {}))
     try:
         handle = urllib2.urlopen(self.py_request)
         body = handle.read()
     except urllib2.HTTPError, e:
         response = _HTTPResponse()
         response.setCode(e.code)
         response.setBody(e.read())
         for h in e.info().headers:
             k, v = h.split(":", 1)
             response.setHeader(k, v.strip())
         self.runtime.events.put((self.handler.onHTTPResponse, (self.request, response), {}))
Example #3
0
    def __call__(self, environ, start_response):
        path = environ["PATH_INFO"]
        url = util.request_uri(environ)
        try:
            request_body_size = int(environ.get('CONTENT_LENGTH', 0))
        except (ValueError):
            request_body_size = 0
        request_body = environ['wsgi.input'].read(request_body_size)

        request = _HTTPRequest(url)
        request.setMethod(environ["REQUEST_METHOD"])
        request.setBody(request_body)
        request.setHeader("Content-Type", environ["CONTENT_TYPE"])
        request.setHeader("Content-Length", request_body_size)
        for key in environ:
            if key.startswith("HTTP_"):
                request.setHeader(key[5:], environ[key])
        response = _HTTPResponse()

        with self.lock:
            servlet = self.servlets.get(path, None)
        if servlet is None:
            start_response("404 Not Found", [("Content-Type", "text/plain")])
            yield "404 Not Found (%r)" % path
            return

        self.runtime.events.put((self.call_servlet, (servlet, request, response), {}))
        try:
            self.runtime.acquire()
            while not response._responded:
                self.runtime.wait(60)
        finally:
            self.runtime.release()

        for chunk in servlet.respond(environ, start_response, request, response):
            yield chunk
Example #4
0
        self.runtime.events.put((self.handler.onHTTPInit, (self.request,), {}))
        try:
            handle = urllib2.urlopen(self.py_request)
            body = handle.read()
        except urllib2.HTTPError, e:
            response = _HTTPResponse()
            response.setCode(e.code)
            response.setBody(e.read())
            for h in e.info().headers:
                k, v = h.split(":", 1)
                response.setHeader(k, v.strip())
            self.runtime.events.put((self.handler.onHTTPResponse, (self.request, response), {}))
        except urllib2.URLError as exc:
            self.runtime.events.put((self.handler.onHTTPError, (self.request, str(exc.reason)), {}))
        else:
            response = _HTTPResponse()
            response.setCode(handle.getcode())
            response.setBody(body)
            for h in handle.info().headers:
                k, v = h.split(":", 1)
                response.setHeader(k, v.strip())
            self.runtime.events.put((self.handler.onHTTPResponse, (self.request, response), {}))

        self.runtime.events.put((self.handler.onHTTPFinal, (self.request,), {}))


class _QuarkWSAdapter(object):
    def __init__(self, ws):
        self.ws = ws

    def send(self, message):