From 8e1413fed79d1e8036e65228af6c93399ccf5502 Mon Sep 17 00:00:00 2001
From: arcadia-devtools <arcadia-devtools@yandex-team.ru>
Date: Wed, 9 Feb 2022 12:00:52 +0300
Subject: intermediate changes ref:614ed510ddd3cdf86a8c5dbf19afd113397e0172

---
 contrib/python/pytest/py3/_pytest/pastebin.py | 59 ++++++++++++++-------------
 1 file changed, 30 insertions(+), 29 deletions(-)

(limited to 'contrib/python/pytest/py3/_pytest/pastebin.py')

diff --git a/contrib/python/pytest/py3/_pytest/pastebin.py b/contrib/python/pytest/py3/_pytest/pastebin.py
index 3f4a7502d5..131873c174 100644
--- a/contrib/python/pytest/py3/_pytest/pastebin.py
+++ b/contrib/python/pytest/py3/_pytest/pastebin.py
@@ -1,15 +1,21 @@
-""" submit failure or test session information to a pastebin service. """
+"""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.store import StoreKey
+from _pytest.terminal import TerminalReporter
 
 
 pastebinfile_key = StoreKey[IO[bytes]]()
 
 
-def pytest_addoption(parser):
+def pytest_addoption(parser: Parser) -> None:
     group = parser.getgroup("terminal reporting")
     group._addoption(
         "--pastebin",
@@ -23,14 +29,14 @@ def pytest_addoption(parser):
 
 
 @pytest.hookimpl(trylast=True)
-def pytest_configure(config):
+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 slave node
-        # when using pytest-xdist, for example
+        # 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
+            # pastebin file will be UTF-8 encoded binary file.
             config._store[pastebinfile_key] = tempfile.TemporaryFile("w+b")
             oldwrite = tr._tw.write
 
@@ -43,29 +49,28 @@ def pytest_configure(config):
             tr._tw.write = tee_write
 
 
-def pytest_unconfigure(config):
+def pytest_unconfigure(config: Config) -> None:
     if pastebinfile_key in config._store:
         pastebinfile = config._store[pastebinfile_key]
-        # get terminal contents and delete file
+        # Get terminal contents and delete file.
         pastebinfile.seek(0)
         sessionlog = pastebinfile.read()
         pastebinfile.close()
         del config._store[pastebinfile_key]
-        # undo our patching in the terminal reporter
+        # Undo our patching in the terminal reporter.
         tr = config.pluginmanager.getplugin("terminalreporter")
         del tr._tw.__dict__["write"]
-        # write summary
+        # 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):
-    """
-    Creates a new paste using bpaste.net service.
+def create_new_paste(contents: Union[str, bytes]) -> str:
+    """Create a new paste using the bpaste.net service.
 
-    :contents: paste contents as utf-8 encoded bytes
-    :returns: url to the pasted contents or error message
+    :contents: Paste contents string.
+    :returns: URL to the pasted contents, or an error message.
     """
     import re
     from urllib.request import urlopen
@@ -74,7 +79,7 @@ def create_new_paste(contents):
     params = {"code": contents, "lexer": "text", "expiry": "1week"}
     url = "https://bpaste.net"
     try:
-        response = (
+        response: str = (
             urlopen(url, data=urlencode(params).encode("ascii")).read().decode("utf-8")
         )
     except OSError as exc_info:  # urllib errors
@@ -86,24 +91,20 @@ def create_new_paste(contents):
         return "bad response: invalid format ('" + response + "')"
 
 
-def pytest_terminal_summary(terminalreporter):
-    import _pytest.config
-
+def pytest_terminal_summary(terminalreporter: TerminalReporter) -> None:
     if terminalreporter.config.option.pastebin != "failed":
         return
-    tr = terminalreporter
-    if "failed" in tr.stats:
+    if "failed" in terminalreporter.stats:
         terminalreporter.write_sep("=", "Sending information to Paste Service")
-        for rep in terminalreporter.stats.get("failed"):
+        for rep in terminalreporter.stats["failed"]:
             try:
                 msg = rep.longrepr.reprtraceback.reprentries[-1].reprfileloc
             except AttributeError:
-                msg = tr._getfailureheadline(rep)
-            tw = _pytest.config.create_terminal_writer(
-                terminalreporter.config, stringio=True
-            )
+                msg = terminalreporter._getfailureheadline(rep)
+            file = StringIO()
+            tw = create_terminal_writer(terminalreporter.config, file)
             rep.toterminal(tw)
-            s = tw.stringio.getvalue()
+            s = file.getvalue()
             assert len(s)
             pastebinurl = create_new_paste(s)
-            tr.write_line("{} --> {}".format(msg, pastebinurl))
+            terminalreporter.write_line(f"{msg} --> {pastebinurl}")
-- 
cgit v1.2.3