404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@18.217.57.160: ~ $
"""Submit failure or test session information to a pastebin service."""
import tempfile
from io import StringIO
from typing import IO
from typing import Union

import pytest
from _pytest.config import Config
from _pytest.config import create_terminal_writer
from _pytest.config.argparsing import Parser
from _pytest.stash import StashKey
from _pytest.terminal import TerminalReporter


pastebinfile_key = StashKey[IO[bytes]]()


def pytest_addoption(parser: Parser) -> None:
    group = parser.getgroup("terminal reporting")
    group._addoption(
        "--pastebin",
        metavar="mode",
        action="store",
        dest="pastebin",
        default=None,
        choices=["failed", "all"],
        help="Send failed|all info to bpaste.net pastebin service",
    )


@pytest.hookimpl(trylast=True)
def pytest_configure(config: Config) -> None:
    if config.option.pastebin == "all":
        tr = config.pluginmanager.getplugin("terminalreporter")
        # If no terminal reporter plugin is present, nothing we can do here;
        # this can happen when this function executes in a worker node
        # when using pytest-xdist, for example.
        if tr is not None:
            # pastebin file will be UTF-8 encoded binary file.
            config.stash[pastebinfile_key] = tempfile.TemporaryFile("w+b")
            oldwrite = tr._tw.write

            def tee_write(s, **kwargs):
                oldwrite(s, **kwargs)
                if isinstance(s, str):
                    s = s.encode("utf-8")
                config.stash[pastebinfile_key].write(s)

            tr._tw.write = tee_write


def pytest_unconfigure(config: Config) -> None:
    if pastebinfile_key in config.stash:
        pastebinfile = config.stash[pastebinfile_key]
        # Get terminal contents and delete file.
        pastebinfile.seek(0)
        sessionlog = pastebinfile.read()
        pastebinfile.close()
        del config.stash[pastebinfile_key]
        # Undo our patching in the terminal reporter.
        tr = config.pluginmanager.getplugin("terminalreporter")
        del tr._tw.__dict__["write"]
        # Write summary.
        tr.write_sep("=", "Sending information to Paste Service")
        pastebinurl = create_new_paste(sessionlog)
        tr.write_line("pastebin session-log: %s\n" % pastebinurl)


def create_new_paste(contents: Union[str, bytes]) -> str:
    """Create a new paste using the bpaste.net service.

    :contents: Paste contents string.
    :returns: URL to the pasted contents, or an error message.
    """
    import re
    from urllib.request import urlopen
    from urllib.parse import urlencode

    params = {"code": contents, "lexer": "text", "expiry": "1week"}
    url = "https://bpa.st"
    try:
        response: str = (
            urlopen(url, data=urlencode(params).encode("ascii")).read().decode("utf-8")
        )
    except OSError as exc_info:  # urllib errors
        return "bad response: %s" % exc_info
    m = re.search(r'href="/raw/(\w+)"', response)
    if m:
        return f"{url}/show/{m.group(1)}"
    else:
        return "bad response: invalid format ('" + response + "')"


def pytest_terminal_summary(terminalreporter: TerminalReporter) -> None:
    if terminalreporter.config.option.pastebin != "failed":
        return
    if "failed" in terminalreporter.stats:
        terminalreporter.write_sep("=", "Sending information to Paste Service")
        for rep in terminalreporter.stats["failed"]:
            try:
                msg = rep.longrepr.reprtraceback.reprentries[-1].reprfileloc
            except AttributeError:
                msg = terminalreporter._getfailureheadline(rep)
            file = StringIO()
            tw = create_terminal_writer(terminalreporter.config, file)
            rep.toterminal(tw)
            s = file.getvalue()
            assert len(s)
            pastebinurl = create_new_paste(s)
            terminalreporter.write_line(f"{msg} --> {pastebinurl}")

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