view tests/filtertraceback.py @ 52430:31c4987034b9

tests: drop py2 support from `filtertraceback.py`
author Matt Harbison <matt_harbison@yahoo.com>
date Mon, 02 Dec 2024 12:52:39 -0500
parents 8431296a93e8
children 3afe0be4f4b7
line wrap: on
line source

#!/usr/bin/env python3

# Filters traceback lines from stdin.


import io
import sys

# Prevent \r from being inserted on Windows.
sys.stdout = io.TextIOWrapper(
    sys.stdout.buffer,
    sys.stdout.encoding,
    sys.stdout.errors,
    newline="\n",
    line_buffering=sys.stdout.line_buffering,
)

state = 'none'

for line in sys.stdin:
    if state == 'none':
        if line.startswith('Traceback '):
            state = 'tb'

    elif state == 'tb':
        if line.startswith('  File '):
            state = 'file'
            continue

        elif not line.startswith(' '):
            state = 'none'

        elif not line.replace('^', '').replace('~', '').strip():
            # PEP 657: Fine-grained error locations in tracebacks
            #                       ~~~~~~^^^^^^^^^
            continue

    elif state == 'file':
        # Ignore one line after "  File ", but sometimes "File" lines are
        # contiguous:
        #      File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
        #      File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
        #      File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
        if not line.startswith('  File '):
            state = 'tb'
        continue

    print(line, end='')