Created
January 9, 2016 19:24
-
-
Save asvetlov/791ea2ba50c8b60c258b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Elpy Error | |
The backend encountered an unexpected error. This indicates a bug in | |
Elpy. Please open a bug report with the data below in the Elpy bug | |
tracker: | |
https://github.com/jorgenschaefer/elpy/issues/new | |
``` | |
Error Message | |
Configuration | |
Virtualenv........: None | |
RPC Python........: 3.4.4 (/usr/bin/python3) | |
Interactive Python: ipython3 (/home/andrew/.local/bin/ipython3) | |
Emacs.............: 24.3.1 | |
Elpy..............: 1.10.0 | |
Jedi..............: 0.9.0 | |
Rope..............: Not found (0.10.3 available) | |
Importmagic.......: 0.1.3 | |
Autopep8..........: 0.1.3 | |
Syntax checker....: flake8 (/home/andrew/.local/bin/flake8) | |
Traceback | |
Traceback (most recent call last): | |
File "/home/andrew/.emacs.d/elpa/elpy-20151101.401/elpy/jedibackend.py", line 227, in run_with_debug | |
return getattr(script, name)() | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/api/__init__.py", line 188, in completions | |
completion_names = get_completions(user_stmt, b) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/api/__init__.py", line 174, in get_completions | |
completion_names += self._simple_complete(path, dot, like) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/api/__init__.py", line 250, in _simple_complete | |
scopes = list(self._prepare_goto(path, True)) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/api/__init__.py", line 294, in _prepare_goto | |
scopes = self._evaluator.eval_element(eval_stmt) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 169, in eval_element | |
return self._eval_atom(element) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 230, in _eval_atom | |
return self.find_types(scope, atom, stmt.start_pos, search_global=True) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 120, in find_types | |
return f.find(scopes, search_global) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper | |
result = func(*args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 87, in find | |
types = self._names_to_types(names, search_global) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 233, in _names_to_types | |
new_types = _name_to_types(self._evaluator, name, self.scope) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 278, in _name_to_types | |
types += _remove_statements(evaluator, typ, name) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 323, in _remove_statements | |
types += evaluator.eval_statement(stmt, seek_name=name) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/recursion.py", line 23, in run | |
result = func(evaluator, stmt, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper | |
result = func(*args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 135, in eval_statement | |
types = self.eval_element(stmt.get_rhs()) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 183, in eval_element | |
types = self._eval_atom(element.children[0]) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 230, in _eval_atom | |
return self.find_types(scope, atom, stmt.start_pos, search_global=True) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 120, in find_types | |
return f.find(scopes, search_global) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper | |
result = func(*args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 87, in find | |
types = self._names_to_types(names, search_global) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 233, in _names_to_types | |
new_types = _name_to_types(self._evaluator, name, self.scope) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 278, in _name_to_types | |
types += _remove_statements(evaluator, typ, name) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 323, in _remove_statements | |
types += evaluator.eval_statement(stmt, seek_name=name) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/recursion.py", line 23, in run | |
result = func(evaluator, stmt, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper | |
result = func(*args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 135, in eval_statement | |
types = self.eval_element(stmt.get_rhs()) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 212, in eval_element | |
return precedence.calculate_children(self, element.children) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/precedence.py", line 45, in calculate_children | |
right = next(iterator) | |
StopIteration | |
During handling of the above exception, another exception occurred: | |
Traceback (most recent call last): | |
File "/home/andrew/.emacs.d/elpa/elpy-20151101.401/elpy/jedibackend.py", line 341, in run_with_debug | |
return getattr(script, name)() | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/api/__init__.py", line 188, in completions | |
completion_names = get_completions(user_stmt, b) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/api/__init__.py", line 174, in get_completions | |
completion_names += self._simple_complete(path, dot, like) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/api/__init__.py", line 250, in _simple_complete | |
scopes = list(self._prepare_goto(path, True)) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/api/__init__.py", line 294, in _prepare_goto | |
scopes = self._evaluator.eval_element(eval_stmt) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 169, in eval_element | |
return self._eval_atom(element) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 230, in _eval_atom | |
return self.find_types(scope, atom, stmt.start_pos, search_global=True) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 120, in find_types | |
return f.find(scopes, search_global) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper | |
result = func(*args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 87, in find | |
types = self._names_to_types(names, search_global) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 233, in _names_to_types | |
new_types = _name_to_types(self._evaluator, name, self.scope) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 278, in _name_to_types | |
types += _remove_statements(evaluator, typ, name) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 323, in _remove_statements | |
types += evaluator.eval_statement(stmt, seek_name=name) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/recursion.py", line 23, in run | |
result = func(evaluator, stmt, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper | |
result = func(*args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 135, in eval_statement | |
types = self.eval_element(stmt.get_rhs()) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 183, in eval_element | |
types = self._eval_atom(element.children[0]) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 230, in _eval_atom | |
return self.find_types(scope, atom, stmt.start_pos, search_global=True) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 120, in find_types | |
return f.find(scopes, search_global) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper | |
result = func(*args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 87, in find | |
types = self._names_to_types(names, search_global) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 233, in _names_to_types | |
new_types = _name_to_types(self._evaluator, name, self.scope) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 278, in _name_to_types | |
types += _remove_statements(evaluator, typ, name) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 323, in _remove_statements | |
types += evaluator.eval_statement(stmt, seek_name=name) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/recursion.py", line 23, in run | |
result = func(evaluator, stmt, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper | |
result = func(*args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 135, in eval_statement | |
types = self.eval_element(stmt.get_rhs()) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper | |
rv = function(obj, *args, **kwargs) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 212, in eval_element | |
return precedence.calculate_children(self, element.children) | |
File "/home/andrew/.local/lib/python3.4/site-packages/jedi/evaluate/precedence.py", line 45, in calculate_children | |
right = next(iterator) | |
StopIteration | |
Jedi Debug Information | |
[N] dbg: While parsing '/home/andrew/projects/aiohttp/tests/test_client_functional.py', line 258 slowed down the fast parser. | |
[N] dbg: While parsing '/home/andrew/projects/aiohttp/tests/test_client_functional.py', line 265 slowed down the fast parser. | |
[N] dbg: While parsing '/home/andrew/projects/aiohttp/tests/test_client_functional.py', line 283 slowed down the fast parser. | |
[N] dbg: While parsing '/home/andrew/projects/aiohttp/tests/test_client_functional.py', line 290 slowed down the fast parser. | |
[N] dbg: Parsed /home/andrew/projects/aiohttp/tests/test_client_functional.py, with 6 parsers in 65 splits. | |
[W] warning: No statement under the cursor. | |
[N] dbg: start: 'resp' in <Function: test_raw_headers@405-415> | |
[N] dbg: eval_element <Name: resp@414,16>@(414, 16) | |
[N] dbg: finder.filter_name "<Name: resp@414,16>" in (<eFunction of <Function: test_raw_headers@405-415>>): '[<Name: resp@412,4>]'@(414, 16) | |
[N] dbg: eval_statement <ExprStmt: resp = client.get('/')@412,4> (<Name: resp@412,4>) | |
[N] dbg: eval_element Node(power, [<Name: client@412,11>, Node(trailer, [<Operator: .>, <Name: get@412,18>]), Node(trailer, [<Operator: (>, <String: '/'>, <Operator: )>])])@(412, 11) | |
[N] dbg: finder.filter_name "<Name: client@412,11>" in (<eFunction of <Function: test_raw_headers@405-415>>): '[<Name: client@410,9>]'@(412, 4) | |
[N] dbg: eval_statement <ExprStmt: app, client = yield from create_app_and_client()@410,4> (<Name: client@410,9>) | |
[N] dbg: eval_element <YieldExpr: yield from create_app_and_client()@410,18>@(410, 18) | |
[N] dbg: eval_element <Keyword: yield>@(410, 18) | |
``` | |
Reproduction: | |
```Python | |
import jedi | |
source = '''\ | |
"""Http client functional tests against aiohttp.web server""" | |
import aiohttp | |
import asyncio | |
import io | |
import os | |
import os.path | |
import pytest | |
import ssl | |
from aiohttp import hdrs, web | |
from aiohttp.errors import FingerprintMismatch | |
@pytest.fixture | |
def ssl_ctx(): | |
here = os.path.dirname(__file__) | |
ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23) | |
ssl_ctx.load_cert_chain( | |
os.path.join(here, 'sample.crt'), | |
os.path.join(here, 'sample.key')) | |
return ssl_ctx | |
@pytest.mark.run_loop | |
def test_keepalive_two_requests_success(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
body = yield from request.read() | |
assert b'' == body | |
return web.Response(body=b'OK') | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp1 = yield from client.get('/') | |
yield from resp1.read() | |
resp2 = yield from client.get('/') | |
yield from resp2.read() | |
assert 1 == len(client._session.connector._conns) | |
@pytest.mark.run_loop | |
def test_keepalive_response_released(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
body = yield from request.read() | |
assert b'' == body | |
return web.Response(body=b'OK') | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp1 = yield from client.get('/') | |
yield from resp1.release() | |
resp2 = yield from client.get('/') | |
yield from resp2.release() | |
assert 1 == len(client._session.connector._conns) | |
@pytest.mark.run_loop | |
def test_keepalive_server_force_close_connection(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
body = yield from request.read() | |
assert b'' == body | |
response = web.Response(body=b'OK') | |
response.force_close() | |
return response | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp1 = yield from client.get('/') | |
resp1.close() | |
resp2 = yield from client.get('/') | |
resp2.close() | |
assert 0 == len(client._session.connector._conns) | |
@pytest.mark.run_loop | |
def test_HTTP_304(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
body = yield from request.read() | |
assert b'' == body | |
return web.Response(status=304) | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/') | |
assert resp.status == 304 | |
content = yield from resp.read() | |
assert content == b'' | |
@pytest.mark.run_loop | |
def test_HTTP_304_WITH_BODY(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
body = yield from request.read() | |
assert b'' == body | |
return web.Response(body=b'test', status=304) | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/') | |
assert resp.status == 304 | |
content = yield from resp.read() | |
assert content == b'' | |
@pytest.mark.run_loop | |
def test_auto_header_user_agent(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
assert 'aiohttp' in request.headers['user-agent'] | |
return web.Response() | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/') | |
try: | |
assert 200, resp.status | |
finally: | |
yield from resp.release() | |
@pytest.mark.run_loop | |
def test_skip_auto_headers_user_agent(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
assert hdrs.USER_AGENT not in request.headers | |
return web.Response() | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/', | |
skip_auto_headers=['user-agent']) | |
try: | |
assert 200 == resp.status | |
finally: | |
yield from resp.release() | |
@pytest.mark.run_loop | |
def test_skip_default_auto_headers_user_agent(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
assert hdrs.USER_AGENT not in request.headers | |
return web.Response() | |
app, client = yield from create_app_and_client(client_params=dict( | |
skip_auto_headers=['user-agent'])) | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/') | |
try: | |
assert 200 == resp.status | |
finally: | |
yield from resp.release() | |
@pytest.mark.run_loop | |
def test_skip_auto_headers_content_type(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
assert hdrs.CONTENT_TYPE not in request.headers | |
return web.Response() | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/', | |
skip_auto_headers=['content-type']) | |
try: | |
assert 200 == resp.status | |
finally: | |
yield from resp.release() | |
@pytest.mark.run_loop | |
def test_post_data_bytesio(create_app_and_client): | |
data = b'some buffer' | |
@asyncio.coroutine | |
def handler(request): | |
assert len(data) == request.content_length | |
val = yield from request.read() | |
assert data == val | |
return web.Response() | |
app, client = yield from create_app_and_client() | |
app.router.add_route('POST', '/', handler) | |
resp = yield from client.post('/', data=io.BytesIO(data)) | |
try: | |
assert 200 == resp.status | |
finally: | |
yield from resp.release() | |
@pytest.mark.run_loop | |
def test_post_data_with_bytesio_file(create_app_and_client): | |
data = b'some buffer' | |
@asyncio.coroutine | |
def handler(request): | |
post_data = yield from request.post() | |
assert ['file'] == list(post_data.keys()) | |
assert data == post_data['file'].file.read() | |
return web.Response() | |
app, client = yield from create_app_and_client() | |
app.router.add_route('POST', '/', handler) | |
resp = yield from client.post('/', data={'file': io.BytesIO(data)}) | |
try: | |
assert 200 == resp.status | |
finally: | |
yield from resp.release() | |
@pytest.mark.run_loop | |
def test_client_ssl(create_app_and_client, loop, ssl_ctx): | |
connector = aiohttp.TCPConnector(verify_ssl=False, loop=loop) | |
@asyncio.coroutine | |
def handler(request): | |
return web.HTTPOk(text='Test message') | |
app, client = yield from create_app_and_client( | |
server_params=dict(ssl_ctx=ssl_ctx), | |
client_params=dict(connector=connector)) | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/') | |
try: | |
assert 200 == resp.status | |
txt = yield from resp.text() | |
assert txt == 'Test message' | |
finally: | |
yield from resp.release() | |
@pytest.mark.parametrize('fingerprint', [ | |
b'\xa2\x06G\xad\xaa\xf5\xd8\\J\x99^by;\x06=', | |
b's\x93\xfd:\xed\x08\x1do\xa9\xaeq9\x1a\xe3\xc5\x7f\x89\xe7l\xf9', | |
b'0\x9a\xc9D\x83\xdc\x91\'\x88\x91\x11\xa1d\x97\xfd\xcb~7U\x14D@L' | |
b'\x11\xab\x99\xa8\xae\xb7\x14\xee\x8b'], | |
ids=['md5', 'sha1', 'sha256']) | |
@pytest.mark.run_loop | |
def test_tcp_connector_fingerprint_ok(create_app_and_client, | |
loop, ssl_ctx, fingerprint): | |
@asyncio.coroutine | |
def handler(request): | |
return web.HTTPOk(text='Test message') | |
connector = aiohttp.TCPConnector(loop=loop, verify_ssl=False, | |
fingerprint=fingerprint) | |
app, client = yield from create_app_and_client( | |
server_params=dict(ssl_ctx=ssl_ctx), | |
client_params=dict(connector=connector)) | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/') | |
assert resp.status == 200 | |
resp.close() | |
@pytest.mark.parametrize('fingerprint', [ | |
b'\xa2\x06G\xad\xaa\xf5\xd8\\J\x99^by;\x06=', | |
b's\x93\xfd:\xed\x08\x1do\xa9\xaeq9\x1a\xe3\xc5\x7f\x89\xe7l\xf9', | |
b'0\x9a\xc9D\x83\xdc\x91\'\x88\x91\x11\xa1d\x97\xfd\xcb~7U\x14D@L' | |
b'\x11\xab\x99\xa8\xae\xb7\x14\xee\x8b'], | |
ids=['md5', 'sha1', 'sha256']) | |
@pytest.mark.run_loop | |
def test_tcp_connector_fingerprint_fail(create_app_and_client, | |
loop, ssl_ctx, fingerprint): | |
@asyncio.coroutine | |
def handler(request): | |
return web.HTTPOk(text='Test message') | |
bad_fingerprint = b'\x00' * len(fingerprint) | |
connector = aiohttp.TCPConnector(loop=loop, verify_ssl=False, | |
fingerprint=bad_fingerprint) | |
app, client = yield from create_app_and_client( | |
server_params=dict(ssl_ctx=ssl_ctx), | |
client_params=dict(connector=connector)) | |
app.router.add_route('GET', '/', handler) | |
with pytest.raises(FingerprintMismatch) as cm: | |
yield from client.get('/') | |
exc = cm.value | |
assert exc.expected == bad_fingerprint | |
assert exc.got == fingerprint | |
@pytest.mark.run_loop | |
def test_format_task_get(create_server, loop): | |
@asyncio.coroutine | |
def handler(request): | |
return web.Response(body=b'OK') | |
app, url = yield from create_server() | |
app.router.add_route('GET', '/', handler) | |
client = aiohttp.ClientSession(loop=loop) | |
task = loop.create_task(client.get(url)) | |
assert "{}".format(task)[:18] == "<Task pending coro" | |
yield from task | |
@pytest.mark.run_loop | |
def test_str_params(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
assert 'q=t+est' in request.query_string | |
return web.Response() | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp = yield from client.get('/', params='q=t+est') | |
try: | |
assert 200 == resp.status | |
finally: | |
yield from resp.release() | |
@pytest.mark.run_loop | |
def test_history(create_app_and_client): | |
@asyncio.coroutine | |
def handler_redirect(request): | |
return web.Response(status=301, headers={'Location': '/ok'}) | |
@asyncio.coroutine | |
def handler_ok(request): | |
return web.Response(status=200) | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/ok', handler_ok) | |
app.router.add_route('GET', '/redirect', handler_redirect) | |
resp = yield from client.get('/ok') | |
try: | |
assert len(resp.history) == 0 | |
assert resp.status == 200 | |
finally: | |
resp.release() | |
resp_redirect = yield from client.get('/redirect') | |
try: | |
assert len(resp_redirect.history) == 1 | |
assert resp_redirect.history[0].status == 301 | |
assert resp_redirect.status == 200 | |
finally: | |
resp_redirect.release() | |
@pytest.mark.run_loop | |
def test_keepalive_closed_by_server(create_app_and_client): | |
@asyncio.coroutine | |
def handler(request): | |
body = yield from request.read() | |
assert b'' == body | |
resp = web.Response(body=b'OK') | |
resp.force_close() | |
return resp | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp1 = yield from client.get('/') | |
val1 = yield from resp1.read() | |
assert val1 == b'OK' | |
resp2 = yield from client.get('/') | |
val2 = yield from resp2.read() | |
assert val2 == b'OK' | |
assert 0 == len(client._session.connector._conns) | |
@pytest.mark.run_loop | |
def test_wait_for(create_app_and_client, loop): | |
@asyncio.coroutine | |
def handler(request): | |
return web.Response(body=b'OK') | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp = yield from asyncio.wait_for(client.get('/'), 10, loop=loop) | |
assert resp.status == 200 | |
txt = yield from resp.text() | |
assert txt == 'OK' | |
@pytest.mark.run_loop | |
def test_raw_headers(create_app_and_client, loop): | |
@asyncio.coroutine | |
def handler(request): | |
return web.Response() | |
app, client = yield from create_app_and_client() | |
app.router.add_route('GET', '/', handler) | |
resp = client.get('/') | |
assert resp.status == 200 | |
assert resp. | |
''' | |
script = jedi.Script(source=source, line=414, column=16, path='/home/andrew/projects/aiohttp/tests/test_client_functional.py', encoding='utf-8') | |
script.completions() | |
``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment