File: conftest.py

package info (click to toggle)
skimage 0.26.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 32,720 kB
  • sloc: python: 61,600; cpp: 2,592; ansic: 1,591; xml: 1,342; javascript: 1,267; makefile: 135; sh: 16
file content (61 lines) | stat: -rw-r--r-- 2,411 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Fixtures for doctests
from pathlib import Path
import pytest
from time import perf_counter
from datetime import timedelta
import os
import sys
from pytest_pretty import CustomTerminalReporter

from _pytest.terminal import TerminalReporter
from _pytest.pathlib import bestrelpath


class SKTerminalReporter(CustomTerminalReporter):
    """Custom terminal reporter to display test runtimes.

    It appends the cumulative runtime each time a new file is tested.
    """

    currentfspath: Path | None
    _start_time: float | None

    def write_fspath_result(self, nodeid: str, res, **markup: bool) -> None:
        if getattr(self, '_start_time', None) is None:
            self._start_time = perf_counter()

        fspath = self.config.rootpath / nodeid.split('::')[0]
        if fspath != self.currentfspath:
            if self.currentfspath is not None and self._show_progress_info:
                # call method to write information about progress
                # padding spaces and percentage information
                self._write_progress_information_filling_space()
                if os.environ.get('CI', False):
                    # write time elapsed since the beginning of the test suite
                    elapsed = timedelta(seconds=int(perf_counter() - self._start_time))
                    self.write(f' [{elapsed}]')

            self.currentfspath = fspath
            relfspath = bestrelpath(self.startpath, fspath)
            self._tw.line()
            self.write(relfspath + ' ')

        self.write(res, flush=True, **markup)

    def short_test_summary(self):
        # Don't use table-based summary from pytest_pretty,
        # use pytest's original one that won't truncate long file and test names
        TerminalReporter.short_test_summary(self)


@pytest.hookimpl(trylast=True)
def pytest_configure(config: pytest.Config) -> None:
    # Get the standard terminal reporter plugin and replace it with ours
    standard_reporter = config.pluginmanager.getplugin('terminalreporter')
    custom_reporter = SKTerminalReporter(config, sys.stdout)
    if standard_reporter._session is not None:
        # if session is already set we need to copy them from
        # the previous reporter
        custom_reporter._session = standard_reporter._session
    config.pluginmanager.unregister(standard_reporter)
    config.pluginmanager.register(custom_reporter, 'terminalreporter')