This commit is contained in:
Iliyan Angelov
2025-12-06 03:27:35 +02:00
parent 7667eb5eda
commit 5a8ca3c475
2211 changed files with 28086 additions and 37066 deletions

View File

@@ -1,18 +1,15 @@
# mypy: allow-untyped-defs
"""Submit failure or test session information to a pastebin service."""
from __future__ import annotations
from io import StringIO
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
import pytest
pastebinfile_key = StashKey[IO[bytes]]()
@@ -20,7 +17,7 @@ pastebinfile_key = StashKey[IO[bytes]]()
def pytest_addoption(parser: Parser) -> None:
group = parser.getgroup("terminal reporting")
group.addoption(
group._addoption(
"--pastebin",
metavar="mode",
action="store",
@@ -66,19 +63,18 @@ def pytest_unconfigure(config: Config) -> None:
# Write summary.
tr.write_sep("=", "Sending information to Paste Service")
pastebinurl = create_new_paste(sessionlog)
tr.write_line(f"pastebin session-log: {pastebinurl}\n")
tr.write_line("pastebin session-log: %s\n" % pastebinurl)
def create_new_paste(contents: str | bytes) -> str:
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.error import HTTPError
from urllib.parse import urlencode
from urllib.request import urlopen
from urllib.parse import urlencode
params = {"code": contents, "lexer": "text", "expiry": "1week"}
url = "https://bpa.st"
@@ -86,11 +82,8 @@ def create_new_paste(contents: str | bytes) -> str:
response: str = (
urlopen(url, data=urlencode(params).encode("ascii")).read().decode("utf-8")
)
except HTTPError as e:
with e: # HTTPErrors are also http responses that must be closed!
return f"bad response: {e}"
except OSError as e: # eg urllib.error.URLError
return f"bad response: {e}"
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)}"