pytest icon indicating copy to clipboard operation
pytest copied to clipboard

Disable assertion rewriting external modules

Open Tusenka opened this issue 7 months ago • 12 comments

Disable assertion rewriting of external modules. Closes 13403.

Tusenka avatar May 13 '25 03:05 Tusenka

Need to squash commits - OK to close, I'll reopen a new one with one commit

Tusenka avatar May 13 '25 03:05 Tusenka

I skimmed through the issue (I'm short on time so I cannot do a more through research), but looking at the code is not immediately clear to me so thought I would ask:

Note that we want to rewrite asserts for files belonging to a pytest plugin, even if they are not test_*.py files. How does this patch relate to that? This is an important behavior that should be kept.

nicoddemus avatar May 16 '25 11:05 nicoddemus

I skimmed through the issue (I'm short on time so I cannot do a more through research), but looking at the code is not immediately clear to me so thought I would ask:

Note that we want to rewrite asserts for files belonging to a pytest plugin, even if they are not test_*.py files. How does this patch relate to that? This is an important behavior that should be kept.

At present time the fix is applied only for path which applies test_*py. The plugins are processed separately. I'll add some tests against that important part.

Tusenka avatar May 16 '25 16:05 Tusenka

I skimmed through the issue (I'm short on time so I cannot do a more through research), but looking at the code is not immediately clear to me so thought I would ask: Note that we want to rewrite asserts for files belonging to a pytest plugin, even if they are not test_*.py files. How does this patch relate to that? This is an important behavior that should be kept.

At present time the fix is applied only for path which applies test_*py. The plugins are processed separately. I'll add some tests against that important part.

Added some tests for plugin rewriting, it works now

Tusenka avatar May 18 '25 04:05 Tusenka

Do we need to rewrite contest plugins? It's the not original behavior

Tusenka avatar Jun 12 '25 13:06 Tusenka

Conftest files that are part of the collection should rewrite as far as I remember

RonnyPfannschmidt avatar Jun 12 '25 15:06 RonnyPfannschmidt

my understanding is that rewrite of conftest plugins was always happening as part of the original assertion hooking

RonnyPfannschmidt avatar Jun 12 '25 17:06 RonnyPfannschmidt

But it still doen't see conftest plugins image Result of provided plugins: ['pytest', 'zope.interface', 'idna', 'anyio', 'sniffio', 'filelock', 'cachetools', 'incremental', 'greenlet', 'pluggy', 'hypothesis', 'Automat', 'wheel', 'virtualenv', 'coverage', 'pip', 'distlib', 'mock', 'pre_commit', 'typing_extensions', 'elementpath', 'pytest-twisted', 'PyYAML', 'pyproject-api', 'identify', 'colorama', 'urllib3', 'hyperlink', 'Pygments', 'sortedcontainers', 'constantly', 'nodeenv', 'xmlschema', 'setuptools', 'attrs', 'requests', 'pytest', 'exceptiongroup', 'decorator', 'platformdirs', 'packaging', 'charset-normalizer', 'cfgv', 'Twisted', 'certifi', 'chardet', 'tox', 'argcomplete', 'iniconfig', 'jaraco.collections', 'zipp', 'typeguard', 'wheel', 'importlib_metadata', 'jaraco.text', 'jaraco.context', 'autocommand', 'tomli', 'typing_extensions', 'more-itertools', 'jaraco.functools', 'packaging', 'platformdirs', 'inflect', 'backports.tarfile']

The conftest plugins are loaded after the PEP302/PEP451 import hook considers files to rewrite. I propose a separate ticket for conftest plugins rewritng. I'll try to "play" with this.

Tusenka avatar Jun 13 '25 10:06 Tusenka

I see code coverage is less than 100%(96%), maybe add some unit tests? Also mypy doesn't like the packeage name, created a question on stackoverflow nicoddemus[RonnyPfannschmidt], what do you think?

Tusenka avatar Aug 25 '25 15:08 Tusenka

@Tusenka

testing/example_scripts/rewrite/src/main.py: error: Source file found twice under different module names: "example_scripts.rewrite.src.main" and "testing.example_scripts.rewrite.src.main"
testing/example_scripts/rewrite/src/main.py: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#mapping-file-paths-to-modules for more info
testing/example_scripts/rewrite/src/main.py: note: Common resolutions include: a) adding `__init__.py` somewhere, b) using `--explicit-package-bases` or adjusting MYPYPATH
Found 1 error in 1 file (errors prevented further checking)

I would scratch the explicit files in testing/example_scripts and create the scripts inside the tests that use them, with pytester. This side steps the issue entirely.

nicoddemus avatar Aug 26 '25 20:08 nicoddemus

@Tusenka

testing/example_scripts/rewrite/src/main.py: error: Source file found twice under different module names: "example_scripts.rewrite.src.main" and "testing.example_scripts.rewrite.src.main"
testing/example_scripts/rewrite/src/main.py: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#mapping-file-paths-to-modules for more info
testing/example_scripts/rewrite/src/main.py: note: Common resolutions include: a) adding `__init__.py` somewhere, b) using `--explicit-package-bases` or adjusting MYPYPATH
Found 1 error in 1 file (errors prevented further checking)

I would scratch the explicit files in testing/example_scripts and create the scripts inside the tests that use them, with pytester. This side steps the issue entirely.

Thank you a lot. I would try to invoke the script in the acceptance tests.

Tusenka avatar Aug 29 '25 13:08 Tusenka

Stuck on relative import - digging in

Tusenka avatar Aug 31 '25 14:08 Tusenka