It looks like it is 100% a pytest code pattern.
See:
pytest fixtures: explicit, modular, scalable
I had the same problem with it, and this is why I found this post ;)
# ./tests/test_twitter1.py import os import pytest from mylib import db # ... @pytest.fixture def twitter(): twitter_ = db.Twitter() twitter_._debug = True return twitter_ @pytest.mark.parametrize("query,expected", [ ("BANCO PROVINCIAL", 8), ("name", 6), ("castlabs", 42), ]) def test_search(twitter: db.Twitter, query: str, expected: int): for query in queries: res = twitter.search(query) print(res) assert res
And it will warn with This inspection detects shadowing names defined in outer scopes.
To fix that, just move your twitter fixture into ./tests/conftest.py
# ./tests/conftest.py import pytest from syntropy import db @pytest.fixture def twitter(): twitter_ = db.Twitter() twitter_._debug = True return twitter_
And remove the twitter fixture, like in ./tests/test_twitter2.py:
# ./tests/test_twitter2.py import os import pytest from mylib import db # ... @pytest.mark.parametrize("query,expected", [ ("BANCO PROVINCIAL", 8), ("name", 6), ("castlabs", 42), ]) def test_search(twitter: db.Twitter, query: str, expected: int): for query in queries: res = twitter.search(query) print(res) assert res
This will be make happy for QA, PyCharm and everyone.