def test_force_compression_deflate(self, ResponseImpl): req = self.make_request("GET", "/", headers=CIMultiDict({hdrs.ACCEPT_ENCODING: "gzip, deflate"})) resp = StreamResponse() resp.enable_compression(ContentCoding.deflate) self.assertTrue(resp.compression) msg = self.loop.run_until_complete(resp.prepare(req)) msg.add_compression_filter.assert_called_with("deflate") self.assertEqual("deflate", resp.headers.get(hdrs.CONTENT_ENCODING))
async def test_force_compression_false_backwards_compat(): req = make_request('GET', '/') resp = StreamResponse() assert not resp.compression resp.enable_compression(force=False) assert resp.compression msg = await resp.prepare(req) assert not msg.enable_compression.called
def test_force_compression_no_accept_gzip(self, ResponseImpl): req = self.make_request('GET', '/') resp = StreamResponse() resp.enable_compression(ContentCoding.gzip) self.assertTrue(resp.compression) msg = resp.start(req) msg.add_compression_filter.assert_called_with('gzip') self.assertEqual('gzip', resp.headers.get(hdrs.CONTENT_ENCODING))
def test_force_compression_no_accept_gzip(self, ResponseImpl): req = self.make_request("GET", "/") resp = StreamResponse() resp.enable_compression(ContentCoding.gzip) self.assertTrue(resp.compression) msg = self.loop.run_until_complete(resp.prepare(req)) msg.add_compression_filter.assert_called_with("gzip") self.assertEqual("gzip", resp.headers.get(hdrs.CONTENT_ENCODING))
def test_force_compression_false_backwards_compat(): req = make_request('GET', '/', payload_writer=mock.Mock()) resp = StreamResponse() assert not resp.compression resp.enable_compression(force=False) assert resp.compression msg = yield from resp.prepare(req) assert not msg.enable_compression.called
def test_force_compression_no_accept_deflate(): req = make_request('GET', '/') resp = StreamResponse() resp.enable_compression(ContentCoding.deflate) assert resp.compression msg = yield from resp.prepare(req) msg.enable_compression.assert_called_with('deflate') assert 'deflate' == resp.headers.get(hdrs.CONTENT_ENCODING)
def test_force_compression_false_backwards_compat(self, ResponseImpl): req = self.make_request("GET", "/") resp = StreamResponse() self.assertFalse(resp.compression) resp.enable_compression(force=False) self.assertTrue(resp.compression) msg = self.loop.run_until_complete(resp.prepare(req)) self.assertFalse(msg.add_compression_filter.called)
async def test_force_compression_no_accept_gzip(): req = make_request('GET', '/') resp = StreamResponse() resp.enable_compression(ContentCoding.gzip) assert resp.compression msg = await resp.prepare(req) msg.enable_compression.assert_called_with('gzip') assert 'gzip' == resp.headers.get(hdrs.CONTENT_ENCODING)
def test_force_compression_false_backwards_compat(self, ResponseImpl): req = self.make_request('GET', '/') resp = StreamResponse() self.assertFalse(resp.compression) resp.enable_compression(force=False) self.assertTrue(resp.compression) msg = resp.start(req) self.assertFalse(msg.add_compression_filter.called)
def test_compression_no_accept(self, ResponseImpl): req = self.make_request("GET", "/") resp = StreamResponse() self.assertFalse(resp.chunked) self.assertFalse(resp.compression) resp.enable_compression() self.assertTrue(resp.compression) msg = self.loop.run_until_complete(resp.prepare(req)) self.assertFalse(msg.add_compression_filter.called)
async def test_force_compression_false_backwards_compat() -> None: req = make_request('GET', '/') resp = StreamResponse() assert not resp.compression with pytest.warns(DeprecationWarning): resp.enable_compression(force=False) assert resp.compression msg = await resp.prepare(req) assert not msg.enable_compression.called
def test_force_compression_false_backwards_compat(): req = make_request('GET', '/') resp = StreamResponse() assert not resp.compression resp.enable_compression(force=False) assert resp.compression with mock.patch('aiohttp.web_reqrep.ResponseImpl'): msg = yield from resp.prepare(req) assert not msg.add_compression_filter.called
def test_compression_no_accept(self, ResponseImpl): req = self.make_request('GET', '/') resp = StreamResponse() self.assertFalse(resp.chunked) self.assertFalse(resp.compression) resp.enable_compression() self.assertTrue(resp.compression) msg = resp.start(req) self.assertFalse(msg.add_compression_filter.called)
def test_compression_no_accept(): req = make_request('GET', '/', payload_writer=mock.Mock()) resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression() assert resp.compression msg = yield from resp.prepare(req) assert not msg.enable_compression.called
def test_force_compression_no_accept_gzip(): req = make_request('GET', '/') resp = StreamResponse() resp.enable_compression(ContentCoding.gzip) assert resp.compression with mock.patch('aiohttp.web_reqrep.ResponseImpl'): msg = yield from resp.prepare(req) msg.add_compression_filter.assert_called_with('gzip') assert 'gzip' == resp.headers.get(hdrs.CONTENT_ENCODING)
async def test_compression_no_accept(): req = make_request('GET', '/') resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression() assert resp.compression msg = await resp.prepare(req) assert not msg.enable_compression.called
async def test_force_compression_no_accept_backwards_compat(): req = make_request('GET', '/') resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression(force=True) assert resp.compression msg = await resp.prepare(req) assert msg.enable_compression.called assert msg.filter is not None
def test_compression_no_accept(): req = make_request('GET', '/') resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression() assert resp.compression with mock.patch('aiohttp.web_reqrep.ResponseImpl'): msg = yield from resp.prepare(req) assert not msg.add_compression_filter.called
async def test_force_compression_gzip(): req = make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() resp.enable_compression(ContentCoding.gzip) assert resp.compression msg = await resp.prepare(req) msg.enable_compression.assert_called_with('gzip') assert 'gzip' == resp.headers.get(hdrs.CONTENT_ENCODING)
def test_force_compression_no_accept_backwards_compat(): req = make_request('GET', '/', payload_writer=mock.Mock()) resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression(force=True) assert resp.compression msg = yield from resp.prepare(req) assert msg.enable_compression.called assert msg.filter is not None
def test_force_compression_deflate(self, ResponseImpl): req = self.make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() resp.enable_compression(ContentCoding.deflate) self.assertTrue(resp.compression) msg = resp.start(req) msg.add_compression_filter.assert_called_with('deflate') self.assertEqual('deflate', resp.headers.get(hdrs.CONTENT_ENCODING))
def test_force_compression_no_accept_backwards_compat(): req = make_request('GET', '/') resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression(force=True) assert resp.compression with mock.patch('aiohttp.web_response.PayloadWriter'): msg = yield from resp.prepare(req) assert msg.enable_compression.called assert msg.filter is not None
def test_force_compression_gzip(): req = make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() resp.enable_compression(ContentCoding.gzip) assert resp.compression with mock.patch('aiohttp.web_response.PayloadWriter'): msg = yield from resp.prepare(req) msg.enable_compression.assert_called_with('gzip') assert 'gzip' == resp.headers.get(hdrs.CONTENT_ENCODING)
def test_force_compression_deflate(): req = make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() resp.enable_compression(ContentCoding.deflate) assert resp.compression with mock.patch('aiohttp.web_reqrep.ResponseImpl'): msg = yield from resp.prepare(req) msg.add_compression_filter.assert_called_with('deflate') assert 'deflate' == resp.headers.get(hdrs.CONTENT_ENCODING)
def test_compression(self, ResponseImpl): req = self.make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() self.assertFalse(resp.chunked) self.assertFalse(resp.compression) resp.enable_compression() self.assertTrue(resp.compression) msg = resp.start(req) self.assertTrue(msg.add_compression_filter.called) self.assertIsNotNone(msg.filter)
async def test_remove_content_length_if_compression_enabled_http11(): writer = mock.Mock() async def write_headers(status_line, headers): assert hdrs.CONTENT_LENGTH not in headers assert headers.get(hdrs.TRANSFER_ENCODING, '') == 'chunked' writer.write_headers.side_effect = write_headers req = make_request('GET', '/', writer=writer) resp = StreamResponse() resp.content_length = 123 resp.enable_compression(ContentCoding.gzip) await resp.prepare(req) assert resp.content_length is None
def test_remove_content_length_if_compression_enabled_http10(): writer = mock.Mock() def write_headers(status_line, headers): assert hdrs.CONTENT_LENGTH not in headers assert hdrs.TRANSFER_ENCODING not in headers writer.write_headers.side_effect = write_headers req = make_request('GET', '/', version=HttpVersion10, payload_writer=writer) resp = StreamResponse() resp.content_length = 123 resp.enable_compression(ContentCoding.gzip) yield from resp.prepare(req) assert resp.content_length is None
def test_compression_default_coding(self, ResponseImpl): req = self.make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() self.assertFalse(resp.chunked) self.assertFalse(resp.compression) resp.enable_compression() self.assertTrue(resp.compression) msg = resp.start(req) msg.add_compression_filter.assert_called_with('deflate') self.assertEqual('deflate', resp.headers.get(hdrs.CONTENT_ENCODING)) self.assertIsNotNone(msg.filter)
async def test_force_compression_identity(): writer = mock.Mock() async def write_headers(status_line, headers): assert hdrs.CONTENT_LENGTH in headers assert hdrs.TRANSFER_ENCODING not in headers writer.write_headers.side_effect = write_headers req = make_request('GET', '/', writer=writer) resp = StreamResponse() resp.content_length = 123 resp.enable_compression(ContentCoding.identity) await resp.prepare(req) assert resp.content_length == 123
def test_compression_default_coding(self, ResponseImpl): req = self.make_request('GET', '/', headers=CIMultiDict( {hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() self.assertFalse(resp.chunked) self.assertFalse(resp.compression) resp.enable_compression() self.assertTrue(resp.compression) msg = resp.start(req) msg.add_compression_filter.assert_called_with('deflate') self.assertEqual('deflate', resp.headers.get(hdrs.CONTENT_ENCODING)) self.assertIsNotNone(msg.filter)
async def test_compression_default_coding() -> None: req = make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression() assert resp.compression msg = await resp.prepare(req) msg.enable_compression.assert_called_with('deflate') assert 'deflate' == resp.headers.get(hdrs.CONTENT_ENCODING) assert msg.filter is not None
async def test_compression_default_coding(): req = make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression() assert resp.compression msg = await resp.prepare(req) msg.enable_compression.assert_called_with('deflate') assert 'deflate' == resp.headers.get(hdrs.CONTENT_ENCODING) assert msg.filter is not None
def test_compression_default_coding(): req = make_request( 'GET', '/', headers=CIMultiDict({hdrs.ACCEPT_ENCODING: 'gzip, deflate'})) resp = StreamResponse() assert not resp.chunked assert not resp.compression resp.enable_compression() assert resp.compression with mock.patch('aiohttp.web_reqrep.ResponseImpl'): msg = yield from resp.prepare(req) msg.add_compression_filter.assert_called_with('deflate') assert 'deflate' == resp.headers.get(hdrs.CONTENT_ENCODING) assert msg.filter is not None
async def dump_snapshots(request): ''' For debugging purposes only - possibility of skipping snapshots due to race conditions between creating objectid and finishing DB insert. ''' model = request.app['model'] stream_id = request.query.get('streamId') after_snapshot_id = request.query.get('afterSnapshotId') tail = bool(int(request.query.get('tail', 0))) streams = await model.streams.list_all() streams = {s.id: s for s in streams} res = StreamResponse() res.headers['Content-Type'] = 'text/plain' res.enable_chunked_encoding() res.enable_compression() await res.prepare(request) try: while True: t = monotime() snapshots = await model.stream_snapshots.dump( stream_id=stream_id, after_snapshot_id=after_snapshot_id) if not snapshots: if not tail: break logger.debug('No snapshots dumped, sleeping') await sleep(1) continue logger.debug( 'Dumped %s snapshots %s - %s in %.3f s', len(snapshots), snapshots[0].id, snapshots[-1].id, monotime() - t) parts = [] for snapshot in snapshots: stream = streams.get(snapshot.stream_id) if not stream: stream = await model.streams.get_by_id(snapshot.stream_id) assert stream.id == snapshot.stream_id record = { 'id': str(snapshot.id), 'date': snapshot.date.isoformat(), 'stream': { 'id': snapshot.stream_id, 'label': stream.label, }, 'state_json': snapshot.state_json, } line = to_compact_json(record) parts.append(line.encode()) parts.append(b'\n') after_snapshot_id = snapshot.id del snapshots chunk = b''.join(parts) logger.debug('Sending %.2f kB of JSONL response chunk', len(chunk) / 1024) await res.write(chunk) await res.write_eof() except CancelledError as e: logger.debug('dump_snapshots finished: %r', e) except Exception as e: logger.exception('dump_snapshots failed: %r', e) return res