Codecov reporting wrong coverage information.
lk-geimfari opened this issue · comments
This is what happens when we comment out the pytest plugin: https://app.codecov.io/gh/lk-geimfari/mimesis/pull/1502
The coverage increased to 99%.
Try to move imports inside the fixture functions. sys.modules
is populated too early.
@sobolevn Do you mean like this?
@pytest.fixture(scope="session")
def _mimesis_cache() -> _CacheCallable:
from mimesis.locales import Locale
from mimesis.schema import Field
cached_instances: dict[Locale, Field] = {}
def factory(locale: Locale) -> Field:
if locale not in cached_instances:
cached_instances[locale] = Field(locale)
return cached_instances[locale]
return factory
@pytest.fixture()
def mimesis_locale(): # type: ignore
"""Specifies which locale to use."""
from mimesis.locales import Locale
return Locale.DEFAULT
yes
Alas, it didn't helped.
This is due to how the import system works and how you're using __init__.py
.
Neither are wrong or bad.
When python tries to import mimesis.plugins.pytest
, it loads mimesis.__init__.py
and looks for plugins
.
Because the init refers to most of the files in the package, they're all loaded too early.
You can see this in action by doing the following:
Modify as many files as you dare in the mimesis folder with the following line:
from pathlib import Path; (Path(__file__).parent / Path(__file__).stem).touch()
Now run the python repl and enter this: from mimesis.plugins import bloop
This is due to how the import system works and how you're using
__init__.py
. Neither are wrong or bad.When python tries to import
mimesis.plugins.pytest
, it loadsmimesis.__init__.py
and looks forplugins
. Because the init refers to most of the files in the package, they're all loaded too early.You can see this in action by doing the following: Modify as many files as you dare in the mimesis folder with the following line:
from pathlib import Path; (Path(__file__).parent / Path(__file__).stem).touch()
Now run the python repl and enter this:
from mimesis.plugins import bloop
Yeah, I get it, but i did not figured out how can I fix this without breaking anything. Ideas or PR are welcomen.