diff options
author | deshevoy <deshevoy@yandex-team.ru> | 2022-02-10 16:46:56 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:56 +0300 |
commit | e988f30484abe5fdeedcc7a5d3c226c01a21800c (patch) | |
tree | 0a217b173aabb57b7e51f8a169989b1a3e0309fe /contrib/python/pytest/py3/_pytest/pastebin.py | |
parent | 33ee501c05d3f24036ae89766a858930ae66c548 (diff) | |
download | ydb-e988f30484abe5fdeedcc7a5d3c226c01a21800c.tar.gz |
Restoring authorship annotation for <deshevoy@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/python/pytest/py3/_pytest/pastebin.py')
-rw-r--r-- | contrib/python/pytest/py3/_pytest/pastebin.py | 110 |
1 files changed, 55 insertions, 55 deletions
diff --git a/contrib/python/pytest/py3/_pytest/pastebin.py b/contrib/python/pytest/py3/_pytest/pastebin.py index 131873c174..22b6151fb2 100644 --- a/contrib/python/pytest/py3/_pytest/pastebin.py +++ b/contrib/python/pytest/py3/_pytest/pastebin.py @@ -1,54 +1,54 @@ """Submit failure or test session information to a pastebin service.""" -import tempfile +import tempfile from io import StringIO from typing import IO from typing import Union - -import pytest + +import pytest from _pytest.config import Config from _pytest.config import create_terminal_writer from _pytest.config.argparsing import Parser from _pytest.store import StoreKey from _pytest.terminal import TerminalReporter - - + + pastebinfile_key = StoreKey[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) + 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 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: + if tr is not None: # pastebin file will be UTF-8 encoded binary file. config._store[pastebinfile_key] = tempfile.TemporaryFile("w+b") - oldwrite = tr._tw.write - - def tee_write(s, **kwargs): - oldwrite(s, **kwargs) + oldwrite = tr._tw.write + + def tee_write(s, **kwargs): + oldwrite(s, **kwargs) if isinstance(s, str): - s = s.encode("utf-8") + s = s.encode("utf-8") config._store[pastebinfile_key].write(s) - - tr._tw.write = tee_write - - + + tr._tw.write = tee_write + + def pytest_unconfigure(config: Config) -> None: if pastebinfile_key in config._store: pastebinfile = config._store[pastebinfile_key] @@ -58,26 +58,26 @@ def pytest_unconfigure(config: Config) -> None: pastebinfile.close() del config._store[pastebinfile_key] # Undo our patching in the terminal reporter. - tr = config.pluginmanager.getplugin("terminalreporter") - del tr._tw.__dict__["write"] + 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) - - + 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 + """ + import re from urllib.request import urlopen from urllib.parse import urlencode - + params = {"code": contents, "lexer": "text", "expiry": "1week"} - url = "https://bpaste.net" + url = "https://bpaste.net" try: response: str = ( urlopen(url, data=urlencode(params).encode("ascii")).read().decode("utf-8") @@ -85,26 +85,26 @@ def create_new_paste(contents: Union[str, bytes]) -> str: except OSError as exc_info: # urllib errors return "bad response: %s" % exc_info m = re.search(r'href="/raw/(\w+)"', response) - if m: + if m: return "{}/show/{}".format(url, m.group(1)) - else: + else: return "bad response: invalid format ('" + response + "')" - - + + def pytest_terminal_summary(terminalreporter: TerminalReporter) -> None: - if terminalreporter.config.option.pastebin != "failed": - return + if terminalreporter.config.option.pastebin != "failed": + return if "failed" in terminalreporter.stats: - terminalreporter.write_sep("=", "Sending information to Paste Service") + terminalreporter.write_sep("=", "Sending information to Paste Service") for rep in terminalreporter.stats["failed"]: - try: - msg = rep.longrepr.reprtraceback.reprentries[-1].reprfileloc - except AttributeError: + 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) + rep.toterminal(tw) s = file.getvalue() - assert len(s) - pastebinurl = create_new_paste(s) + assert len(s) + pastebinurl = create_new_paste(s) terminalreporter.write_line(f"{msg} --> {pastebinurl}") |