404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@18.188.227.15: ~ $
from typing import List
from typing import Optional
from typing import TYPE_CHECKING

import pytest
from _pytest import nodes
from _pytest.config import Config
from _pytest.config.argparsing import Parser
from _pytest.main import Session
from _pytest.reports import TestReport

if TYPE_CHECKING:
    from _pytest.cacheprovider import Cache

STEPWISE_CACHE_DIR = "cache/stepwise"


def pytest_addoption(parser: Parser) -> None:
    group = parser.getgroup("general")
    group.addoption(
        "--sw",
        "--stepwise",
        action="store_true",
        default=False,
        dest="stepwise",
        help="Exit on test failure and continue from last failing test next time",
    )
    group.addoption(
        "--sw-skip",
        "--stepwise-skip",
        action="store_true",
        default=False,
        dest="stepwise_skip",
        help="Ignore the first failing test but stop on the next failing test. "
        "Implicitly enables --stepwise.",
    )


@pytest.hookimpl
def pytest_configure(config: Config) -> None:
    if config.option.stepwise_skip:
        # allow --stepwise-skip to work on it's own merits.
        config.option.stepwise = True
    if config.getoption("stepwise"):
        config.pluginmanager.register(StepwisePlugin(config), "stepwiseplugin")


def pytest_sessionfinish(session: Session) -> None:
    if not session.config.getoption("stepwise"):
        assert session.config.cache is not None
        if hasattr(session.config, "workerinput"):
            # Do not update cache if this process is a xdist worker to prevent
            # race conditions (#10641).
            return
        # Clear the list of failing tests if the plugin is not active.
        session.config.cache.set(STEPWISE_CACHE_DIR, [])


class StepwisePlugin:
    def __init__(self, config: Config) -> None:
        self.config = config
        self.session: Optional[Session] = None
        self.report_status = ""
        assert config.cache is not None
        self.cache: Cache = config.cache
        self.lastfailed: Optional[str] = self.cache.get(STEPWISE_CACHE_DIR, None)
        self.skip: bool = config.getoption("stepwise_skip")

    def pytest_sessionstart(self, session: Session) -> None:
        self.session = session

    def pytest_collection_modifyitems(
        self, config: Config, items: List[nodes.Item]
    ) -> None:
        if not self.lastfailed:
            self.report_status = "no previously failed tests, not skipping."
            return

        # check all item nodes until we find a match on last failed
        failed_index = None
        for index, item in enumerate(items):
            if item.nodeid == self.lastfailed:
                failed_index = index
                break

        # If the previously failed test was not found among the test items,
        # do not skip any tests.
        if failed_index is None:
            self.report_status = "previously failed test not found, not skipping."
        else:
            self.report_status = f"skipping {failed_index} already passed items."
            deselected = items[:failed_index]
            del items[:failed_index]
            config.hook.pytest_deselected(items=deselected)

    def pytest_runtest_logreport(self, report: TestReport) -> None:
        if report.failed:
            if self.skip:
                # Remove test from the failed ones (if it exists) and unset the skip option
                # to make sure the following tests will not be skipped.
                if report.nodeid == self.lastfailed:
                    self.lastfailed = None

                self.skip = False
            else:
                # Mark test as the last failing and interrupt the test session.
                self.lastfailed = report.nodeid
                assert self.session is not None
                self.session.shouldstop = (
                    "Test failed, continuing from this test next run."
                )

        else:
            # If the test was actually run and did pass.
            if report.when == "call":
                # Remove test from the failed ones, if exists.
                if report.nodeid == self.lastfailed:
                    self.lastfailed = None

    def pytest_report_collectionfinish(self) -> Optional[str]:
        if self.config.getoption("verbose") >= 0 and self.report_status:
            return f"stepwise: {self.report_status}"
        return None

    def pytest_sessionfinish(self) -> None:
        if hasattr(self.config, "workerinput"):
            # Do not update cache if this process is a xdist worker to prevent
            # race conditions (#10641).
            return
        self.cache.set(STEPWISE_CACHE_DIR, self.lastfailed)

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
_code Folder 0755
_io Folder 0755
_py Folder 0755
assertion Folder 0755
config Folder 0755
mark Folder 0755
__init__.py File 356 B 0644
_argcomplete.py File 3.71 KB 0644
_version.py File 160 B 0644
cacheprovider.py File 20.89 KB 0644
capture.py File 33.92 KB 0644
compat.py File 12.89 KB 0644
debugging.py File 13.18 KB 0644
deprecated.py File 5.36 KB 0644
doctest.py File 25.35 KB 0644
faulthandler.py File 3.04 KB 0644
fixtures.py File 65.51 KB 0644
freeze_support.py File 1.31 KB 0644
helpconfig.py File 8.34 KB 0644
hookspec.py File 31.79 KB 0644
junitxml.py File 25.11 KB 0644
legacypath.py File 16.53 KB 0644
logging.py File 33.23 KB 0644
main.py File 31.73 KB 0644
monkeypatch.py File 14.51 KB 0644
nodes.py File 25.94 KB 0644
nose.py File 1.65 KB 0644
outcomes.py File 10.02 KB 0644
pastebin.py File 3.86 KB 0644
pathlib.py File 25.22 KB 0644
py.typed File 0 B 0644
pytester.py File 60.52 KB 0644
pytester_assertions.py File 2.27 KB 0644
python.py File 69.49 KB 0644
python_api.py File 37.5 KB 0644
python_path.py File 709 B 0644
recwarn.py File 10.67 KB 0644
reports.py File 20.35 KB 0644
runner.py File 18.01 KB 0644
scope.py File 2.81 KB 0644
setuponly.py File 3.18 KB 0644
setupplan.py File 1.19 KB 0644
skipping.py File 9.96 KB 0644
stash.py File 2.98 KB 0644
stepwise.py File 4.6 KB 0644
terminal.py File 52.25 KB 0644
threadexception.py File 2.85 KB 0644
timing.py File 375 B 0644
tmpdir.py File 11.43 KB 0644
unittest.py File 14.46 KB 0644
unraisableexception.py File 3.12 KB 0644
warning_types.py File 4.37 KB 0644
warnings.py File 4.95 KB 0644