Aiohttp: O parâmetro "loop_factory" deve ser declarado explicitamente via indireta ou na própria função

Criado em 12 mar. 2020  ·  3Comentários  ·  Fonte: aio-libs/aiohttp

Tentando atualizar de 3.7.2 para 3.8.1 e comecei a ver o seguinte em py.test com descoberta de teste:

O parâmetro "loop_factory" deve ser declarado explicitamente via indireta ou na própria função

Acontece que a semelhança eram funções assíncronas e parece ser causada em algum lugar dentro de aiohttp. Não estou familiarizado com asyncio ou aiohttp, então estou feliz em depurar mais com orientação, mas espero que alguém possa ter mais ideias aqui.

Pacotes relacionados:

aiohttp==3.6.2
pytest==5.4.0
pytest-aiohttp==0.3.0
pytest-cov==2.8.1
pytest-forked==1.1.3
pytest-mock==2.0.0
pytest-responses==0.4.0
pytest-xdist==1.31.0

Alguns detalhes sobre a pilha de chamadas:

➜  ~/D/zeus (feat/increase-lru-cache) ✗ py.test -x --pdb
=========================================================================================== test session starts ============================================================================================
platform darwin -- Python 3.8.1, pytest-5.4.0, py-1.8.1, pluggy-0.13.1
rootdir: /Users/dcramer/Development/zeus, inifile: setup.cfg
plugins: mock-2.0.0, celery-4.1.1, xdist-1.31.0, aiohttp-0.3.0, forked-1.1.3, responses-0.4.0, cov-2.8.1
collecting 186 items
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> traceback >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
In function "test_health_check":
Parameter "loop_factory" should be declared explicitly via indirect or in function itself
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> entering PDB >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB post_mortem (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/_pytest/python.py(1144)_validate_explicit_parameters()
-> fail(msg, pytrace=False)
(Pdb) l
1139                    func_name = self.function.__name__
1140                    msg = (
1141                        'In function "{func_name}":\n'
1142                        'Parameter "{arg}" should be declared explicitly via indirect or in function itself'
1143                    ).format(func_name=func_name, arg=arg)
1144 ->                 fail(msg, pytrace=False)
1145
1146
1147    def _find_parametrized_scope(argnames, arg2fixturedefs, indirect):
1148        """Find the most appropriate scope for a parametrized call based on its arguments.
1149
(Pdb) u
> /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/_pytest/python.py(939)parametrize()
-> self._validate_explicit_parameters(argnames, indirect)
(Pdb) l
934
935             self._validate_if_using_arg_names(argnames, indirect)
936
937             arg_values_types = self._resolve_arg_value_types(argnames, indirect)
938
939  ->         self._validate_explicit_parameters(argnames, indirect)
940
941             # Use any already (possibly) generated ids with parametrize Marks.
942             if _param_mark and _param_mark._param_ids_from:
943                 generated_ids = _param_mark._param_ids_from._param_ids_generated
944                 if generated_ids is not None:
(Pdb) u
> /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/aiohttp/pytest_plugin.py(203)pytest_generate_tests()
-> metafunc.parametrize("loop_factory",
(Pdb) l
198                         "Unknown loop '%s', available loops: %s" % (
199                             name, list(factories.keys())))
200                 else:
201                     continue
202             factories[name] = avail_factories[name]
203  ->     metafunc.parametrize("loop_factory",
204                              list(factories.values()),
205                              ids=list(factories.keys()))
206
207
208     @pytest.fixture
bug

Todos 3 comentários

Isso pode não estar realmente relacionado ao 3.8.x, como estou vendo agora no 3.7.2. Indo continuar a dividir.

Isso é causado pela liberação de pytest==5.4.0 . Acabei de me queimar e reverter para pytest<5.4 resolve o problema.

Sim, você está certo. Cheguei tão longe na minha depuração :).

Espero que isso ajude alguém pesquisando por ele no Google. Irá fazer a triagem no pytest.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

AtomsForPeace picture AtomsForPeace  ·  5Comentários

thehesiod picture thehesiod  ·  4Comentários

asvetlov picture asvetlov  ·  4Comentários

alxpy picture alxpy  ·  5Comentários

rckclmbr picture rckclmbr  ·  5Comentários