In my application stackprinter ignores the passed in supressed_paths and I am not sure why (this has already worked and I am not sure what changed).
I can't seem to create a short snippet which reproduces the error but in my application it fails every time.
This is the function where I get the traceback.
If I set a break point with the debugger I see that suppressed_paths is indeed properly populated. However if I inspect the returned lines I see the traceback with the included library files.

I have created a testcase for pytest which fails every time.
Excerpt from github actions (just open the tox part in line 12)
ERROR WrapperTest:wrapper.py:179 File "/opt/hostedtoolcache/Python/3.9.0/x64/lib/python3.9/asyncio/base_events.py", line 1056, in create_connection
ERROR WrapperTest:wrapper.py:179 967 async def create_connection(
ERROR WrapperTest:wrapper.py:179 968 self, protocol_factory, host=None, port=None,
ERROR WrapperTest:wrapper.py:179 969 *, ssl=None, family=0,
ERROR WrapperTest:wrapper.py:179 970 proto=0, flags=0, sock=None,
Details
I tried to recreate the issue with a snipped but the library files are correctly ignored here, so I am confident that my regexes are correct and that I pass in the parameters correctly.
from pathlib import Path
import aiohttp, typing
import asyncio
import re
import stackprinter
SUPPRESSED_PATHS = (
re.compile(f'[/\\\\]{Path(__file__).name}$'), # this file
# rule file loader
re.compile(r'[/\\]rule_file.py$'),
re.compile(r'[/\\]runpy.py$'),
# Worker functions
re.compile(r'[/\\]wrappedfunction.py$'),
# Don't print stack for used libraries
re.compile(r'[/\\](site-packages|lib)[/\\]asyncio[/\\]'),
re.compile(r'[/\\]site-packages[/\\]aiohttp[/\\]'),
re.compile(r'[/\\]site-packages[/\\]voluptuous[/\\]'),
re.compile(r'[/\\]site-packages[/\\]pydantic[/\\]'),
)
SKIP_TB = tuple(re.compile(k.pattern.replace('$', ', ')) for k in SUPPRESSED_PATHS)
def format_exception(e: typing.Union[Exception, typing.Tuple[typing.Any, typing.Any, typing.Any]]) -> typing.List[str]:
tb = []
skip = 0
lines = stackprinter.format(e, line_wrap=0, truncate_vals=2000, suppressed_paths=SUPPRESSED_PATHS).splitlines()
for i, line in enumerate(lines):
if not skip:
for s in SKIP_TB:
if s.search(line):
# if it's just a two line traceback we skip it
if lines[i + 1].startswith(' ') and lines[i + 2].startswith('File'):
skip = 2
continue
if skip:
skip -= 1
continue
tb.append(line)
return tb
class PrintException:
def __enter__(self):
pass
def __exit__(self, exc_type, exc_val, exc_tb):
# no exception -> we exit gracefully
if exc_type is None and exc_val is None:
return True
for l in format_exception((exc_type, exc_val, exc_tb)):
print(l)
return True
def test_run():
async def test():
async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(0.01)) as session:
async with session.get('http://localhost:12345') as resp:
pass
with PrintException():
asyncio.get_event_loop().run_until_complete(test())
Do you have any idea what the issue might be?
It would be really nice if you could check out the dev branch and run pytest on the test_wrapper.py file.
The tests need the following libraries additionally to the ones in requirements.txt:
pytest pytest-asyncio asynctest
In my application stackprinter ignores the passed in
supressed_pathsand I am not sure why (this has already worked and I am not sure what changed).I can't seem to create a short snippet which reproduces the error but in my application it fails every time.
This is the function where I get the traceback.
If I set a break point with the debugger I see that suppressed_paths is indeed properly populated. However if I inspect the returned
linesI see the traceback with the included library files.I have created a testcase for pytest which fails every time.
Excerpt from github actions (just open the tox part in line 12)
Details
I tried to recreate the issue with a snipped but the library files are correctly ignored here, so I am confident that my regexes are correct and that I pass in the parameters correctly.Do you have any idea what the issue might be?
It would be really nice if you could check out the dev branch and run pytest on the
test_wrapper.pyfile.The tests need the following libraries additionally to the ones in requirements.txt:
pytest pytest-asyncio asynctest