示例#1
0
class ProxyResponse(object):
    '''Asynchronous wsgi response.
    '''
    _headers = None
    _done = False

    def __init__(self, environ, start_response, response):
        self.environ = environ
        self.start_response = start_response
        self.queue = Queue()
        response.on_finished.add_errback(self.error)
        self.setup(response)

    def setup(self, response):
        response.bind_event('data_processed', self.data_processed)

    def __iter__(self):
        while True:
            try:
                yield self.queue.get(wait=not self._done)
            except Empty:
                break

    def data_processed(self, response, **kw):
        '''Receive data from the requesting HTTP client.'''
        status = response.get_status()
        if status == '100 Continue':
            stream = self.environ.get('wsgi.input') or io.BytesIO()
            body = yield stream.read()
            response.transport.write(body)
        if response.parser.is_headers_complete():
            if self._headers is None:
                headers = self.remove_hop_headers(response.headers)
                self._headers = Headers(headers, kind='server')
                # start the response
                self.start_response(status, list(self._headers))
            body = response.recv_body()
            if response.parser.is_message_complete():
                self._done = True
            self.queue.put(body)

    def error(self, failure):
        '''Handle a failure.'''
        if not self._done:
            uri = self.environ['RAW_URI']
            msg = 'Oops! Could not find %s' % uri
            html = wsgi.HtmlDocument(title=msg)
            html.body.append('<h1>%s</h1>' % msg)
            data = html.render()
            resp = wsgi.WsgiResponse(504, data, content_type='text/html')
            self.start_response(resp.status, resp.get_headers(),
                                failure.exc_info)
            self._done = True
            self.queue.put(resp.content[0])

    def remove_hop_headers(self, headers):
        for header, value in headers:
            if header.lower() not in wsgi.HOP_HEADERS:
                yield header, value
示例#2
0
class ProxyResponse(object):
    """Asynchronous wsgi response.
    """

    _headers = None
    _done = False

    def __init__(self, environ, start_response, response):
        self.environ = environ
        self.start_response = start_response
        self.queue = Queue()
        response.on_finished.add_errback(self.error)
        self.setup(response)

    def setup(self, response):
        response.bind_event("data_processed", self.data_processed)

    def __iter__(self):
        while True:
            try:
                yield self.queue.get(wait=not self._done)
            except Empty:
                break

    def data_processed(self, response, **kw):
        """Receive data from the requesting HTTP client."""
        status = response.get_status()
        if status == "100 Continue":
            stream = self.environ.get("wsgi.input") or io.BytesIO()
            body = yield stream.read()
            response.transport.write(body)
        if response.parser.is_headers_complete():
            if self._headers is None:
                headers = self.remove_hop_headers(response.headers)
                self._headers = Headers(headers, kind="server")
                # start the response
                self.start_response(status, list(self._headers))
            body = response.recv_body()
            if response.parser.is_message_complete():
                self._done = True
            self.queue.put(body)

    def error(self, failure):
        """Handle a failure."""
        if not self._done:
            uri = self.environ["RAW_URI"]
            msg = "Oops! Could not find %s" % uri
            html = wsgi.HtmlDocument(title=msg)
            html.body.append("<h1>%s</h1>" % msg)
            data = html.render()
            resp = wsgi.WsgiResponse(504, data, content_type="text/html")
            self.start_response(resp.status, resp.get_headers(), failure.exc_info)
            self._done = True
            self.queue.put(resp.content[0])

    def remove_hop_headers(self, headers):
        for header, value in headers:
            if header.lower() not in wsgi.HOP_HEADERS:
                yield header, value
示例#3
0
文件: tests.py 项目: japaks/pulsar
class MessageHandler(ws.WS):
    def __init__(self):
        self.queue = Queue()

    def get(self):
        return self.queue.get()

    def on_message(self, websocket, message):
        self.queue.put(message)
示例#4
0
文件: queue.py 项目: japaks/pulsar
 def test_get_nowait(self):
     q = Queue()
     self.assertRaises(Empty, q.get_nowait)
     self.assertRaises(Empty, q.get, wait=False)
     r = q.put('ciao')
     self.assertIsInstance(r, Deferred)
     self.assertTrue(r.done())
     self.assertEqual(r.result, None)
     self.assertEqual(q.get_nowait(), 'ciao')
     self.assertRaises(Empty, q.get_nowait)
示例#5
0
 def test_maxsize(self):
     q = Queue(maxsize=2)
     self.assertEqual(q.maxsize, 2)
     yield self.async.assertEqual(q.put('hello'), None)
     yield self.async.assertEqual(q.put('ciao'), None)
     self.assertEqual(q.qsize(), 2)
     self.assertTrue(q.full())
     start = default_timer()
     yield self.async.assertRaises(Full, q.put, 'ciao', timeout=0.5)
     self.assertTrue(default_timer()-start >= 0.5)
示例#6
0
 def test_async_get(self):
     q = Queue()
     self.assertEqual(q.qsize(), 0)
     item = maybe_async(q.get())
     self.assertIsInstance(item , Deferred)
     result = yield q.put('Hello')
     self.assertEqual(result, None)
     self.assertTrue(item.done())
     self.assertEqual(item.result, 'Hello')
     self.assertEqual(q.qsize(), 0)
示例#7
0
 def test_timeout(self):
     q = Queue()
     self.assertEqual(q.qsize(), 0)
     start = default_timer()
     try:
         item = yield q.get(timeout=0.5)
     except Empty:
         pass
     self.assertTrue(default_timer()-start >= 0.5)
     self.assertEqual(q.qsize(), 0)
示例#8
0
class MessageHandler(ws.WS):

    def __init__(self):
        self.queue = Queue()

    def get(self):
        return self.queue.get()

    def on_message(self, websocket, message):
        self.queue.put(message)
示例#9
0
 def test_get_nowait(self):
     q = Queue()
     self.assertRaises(Empty, q.get_nowait)
     self.assertRaises(Empty, q.get, wait=False)
     r = q.put('ciao')
     self.assertIsInstance(r, Deferred)
     self.assertTrue(r.done())
     self.assertEqual(r.result, None)
     self.assertEqual(q.get_nowait(), 'ciao')
     self.assertRaises(Empty, q.get_nowait)
示例#10
0
文件: queue.py 项目: japaks/pulsar
 def test_timeout(self):
     q = Queue()
     self.assertEqual(q.qsize(), 0)
     start = default_timer()
     try:
         item = yield q.get(timeout=0.5)
     except Empty:
         pass
     self.assertTrue(default_timer() - start >= 0.5)
     self.assertEqual(q.qsize(), 0)
示例#11
0
文件: queue.py 项目: japaks/pulsar
 def test_sync(self):
     q = Queue()
     self.assertEqual(q.qsize(), 0)
     result = yield q.put('hello')
     self.assertEqual(result, None)
     self.assertEqual(q.qsize(), 1)
     item = yield q.get()
     self.assertEqual(item, 'hello')
     self.assertEqual(q.qsize(), 0)
     result = yield q.put('ciao')
     self.assertEqual(result, None)
     self.assertEqual(q.qsize(), 1)
示例#12
0
 def test_put_timeout(self):
     q = Queue(maxsize=2)
     self.assertEqual(q.maxsize, 2)
     yield self.async.assertEqual(q.put('hello'), None)
     yield self.async.assertEqual(q.put('ciao'), None)
     yield self.async.assertRaises(Full, q.put, 'bla1', timeout=0.5)
     result = maybe_async(q.put('bla2'))
     self.assertEqual(q.qsize(), 2)
     item = yield q.get()
     self.assertEqual(item, 'hello')
     self.assertEqual(q.qsize(), 2)
     item = yield q.get()
     self.assertEqual(item, 'ciao')
     item = yield q.get()
     self.assertEqual(item, 'bla2')
     self.assertEqual(q.qsize(), 0)
示例#13
0
class Echo(WS):
    def __init__(self):
        self.queue = Queue()

    def get(self):
        return self.queue.get()

    def on_message(self, ws, message):
        return self.queue.put(message)

    def on_ping(self, ws, body):
        super(Echo, self).on_ping(ws, body)
        return self.queue.put('PING: %s' % body.decode('utf-8'))

    def on_pong(self, ws, body):
        return self.queue.put('PONG: %s' % body.decode('utf-8'))
示例#14
0
文件: tests.py 项目: xmnlab/minilab
class Echo(WS):

    def __init__(self):
        self.queue = Queue()

    def get(self):
        return self.queue.get()

    def on_message(self, ws, message):
        return self.queue.put(message)

    def on_ping(self, ws, body):
        super(Echo, self).on_ping(ws, body)
        return self.queue.put('PING: %s' % body.decode('utf-8'))

    def on_pong(self, ws, body):
        return self.queue.put('PONG: %s' % body.decode('utf-8'))
示例#15
0
文件: queue.py 项目: japaks/pulsar
 def test_maxsize_callback(self):
     q = Queue(maxsize=2)
     self.assertEqual(q.maxsize, 2)
     yield self. async .assertEqual(q.put('hello'), None)
     yield self. async .assertEqual(q.put('ciao'), None)
     result = maybe_async(q.put('bla'))
     self.assertEqual(q.qsize(), 2)
     item = yield q.get()
     self.assertEqual(item, 'hello')
     self.assertEqual(q.qsize(), 2)
示例#16
0
 def test_sync(self):
     q = Queue()
     self.assertEqual(q.qsize(), 0)
     result = yield q.put('hello')
     self.assertEqual(result, None)
     self.assertEqual(q.qsize(), 1)
     item = yield q.get()
     self.assertEqual(item, 'hello')
     self.assertEqual(q.qsize(), 0)
     result = yield q.put('ciao')
     self.assertEqual(result, None)
     self.assertEqual(q.qsize(), 1)
示例#17
0
 def test_maxsize_callback(self):
     q = Queue(maxsize=2)
     self.assertEqual(q.maxsize, 2)
     yield self.async.assertEqual(q.put('hello'), None)
     yield self.async.assertEqual(q.put('ciao'), None)
     result = maybe_async(q.put('bla'))
     self.assertEqual(q.qsize(), 2)
     item = yield q.get()
     self.assertEqual(item, 'hello')
     self.assertEqual(q.qsize(), 2)
示例#18
0
文件: queue.py 项目: japaks/pulsar
 def test_get_nowait_with_putter(self):
     q = Queue(maxsize=2)
     d = q.put('first')
     self.assertTrue(d.done())
     d = q.put('second')
     self.assertTrue(d.done())
     d = q.put('third')
     self.assertFalse(d.done())
     d2 = q.put('fourth')
     self.assertFalse(d2.done())
     # We have a putter waiting for a free slot
     self.assertEqual(q.get_nowait(), 'first')
     self.assertTrue(d.done())
     self.assertFalse(d2.done())
     self.assertEqual(q.get_nowait(), 'second')
     self.assertTrue(d2.done())
     self.assertEqual(q.get_nowait(), 'third')
     self.assertEqual(q.get_nowait(), 'fourth')
示例#19
0
文件: queue.py 项目: japaks/pulsar
 def test_async_get(self):
     q = Queue()
     self.assertEqual(q.qsize(), 0)
     item = maybe_async(q.get())
     self.assertIsInstance(item, Deferred)
     result = yield q.put('Hello')
     self.assertEqual(result, None)
     self.assertTrue(item.done())
     self.assertEqual(item.result, 'Hello')
     self.assertEqual(q.qsize(), 0)
示例#20
0
文件: queue.py 项目: japaks/pulsar
 def test_maxsize(self):
     q = Queue(maxsize=2)
     self.assertEqual(q.maxsize, 2)
     yield self. async .assertEqual(q.put('hello'), None)
     yield self. async .assertEqual(q.put('ciao'), None)
     self.assertEqual(q.qsize(), 2)
     self.assertTrue(q.full())
     start = default_timer()
     yield self. async .assertRaises(Full, q.put, 'ciao', timeout=0.5)
     self.assertTrue(default_timer() - start >= 0.5)
示例#21
0
 def test_get_nowait_with_putter(self):
     q = Queue(maxsize=2)
     d = q.put('first')
     self.assertTrue(d.done())
     d = q.put('second')
     self.assertTrue(d.done())
     d = q.put('third')
     self.assertFalse(d.done())
     d2 = q.put('fourth')
     self.assertFalse(d2.done())
     # We have a putter waiting for a free slot
     self.assertEqual(q.get_nowait(), 'first')
     self.assertTrue(d.done())
     self.assertFalse(d2.done())
     self.assertEqual(q.get_nowait(), 'second')
     self.assertTrue(d2.done())
     self.assertEqual(q.get_nowait(), 'third')
     self.assertEqual(q.get_nowait(), 'fourth')
示例#22
0
文件: tests.py 项目: xmnlab/minilab
 def __init__(self):
     self.queue = Queue()
示例#23
0
 def test_put_nowait(self):
     q = Queue(maxsize=2)
     self.assertEqual(q.put_nowait('first'), None)
     self.assertEqual(q.put_nowait('second'), None)
     # the queue is now full
     self.assertRaises(Full, q.put_nowait, 'third')
示例#24
0
 def __init__(self):
     self.queue = Queue()
示例#25
0
 def __init__(self, environ, start_response, response):
     self.environ = environ
     self.start_response = start_response
     self.queue = Queue()
     response.on_finished.add_errback(self.error)
     self.setup(response)
示例#26
0
 def _init(self):
     self._tasks = {}
     self.queue = Queue()
示例#27
0
文件: queue.py 项目: japaks/pulsar
 def test_put_timeout(self):
     q = Queue(maxsize=2)
     self.assertEqual(q.maxsize, 2)
     yield self. async .assertEqual(q.put('hello'), None)
     yield self. async .assertEqual(q.put('ciao'), None)
     yield self. async .assertRaises(Full, q.put, 'bla1', timeout=0.5)
     result = maybe_async(q.put('bla2'))
     self.assertEqual(q.qsize(), 2)
     item = yield q.get()
     self.assertEqual(item, 'hello')
     self.assertEqual(q.qsize(), 2)
     item = yield q.get()
     self.assertEqual(item, 'ciao')
     item = yield q.get()
     self.assertEqual(item, 'bla2')
     self.assertEqual(q.qsize(), 0)
示例#28
0
文件: queue.py 项目: japaks/pulsar
 def test_event_loop(self):
     q1 = Queue(event_loop=get_request_loop())
     q2 = Queue(event_loop=get_event_loop())
     q3 = Queue()
     self.assertEqual(q2.event_loop, q3.event_loop)
     self.assertNotEqual(q1.event_loop, q3.event_loop)
示例#29
0
文件: queue.py 项目: japaks/pulsar
 def test_put_nowait(self):
     q = Queue(maxsize=2)
     self.assertEqual(q.put_nowait('first'), None)
     self.assertEqual(q.put_nowait('second'), None)
     # the queue is now full
     self.assertRaises(Full, q.put_nowait, 'third')
示例#30
0
 def __init__(self, environ, start_response, response):
     self.environ = environ
     self.start_response = start_response
     self.queue = Queue()
     response.on_finished.add_errback(self.error)
     self.setup(response)