From b42fbe98b90c78fecc25424b32ca8535e817564a7daa67929fcd8df14131a2b7 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Mon, 15 Nov 2021 11:32:41 +0000 Subject: [PATCH] Accepting request 931330 from home:marxin:branches:devel:languages:python - Add temporarily workaround for https://github.com/tholo/pytest-flake8/issues/81 (fix-recent-flake8-stdoutWriteHook-change.patch). OBS-URL: https://build.opensuse.org/request/show/931330 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-flake8?expand=0&rev=77 --- ...recent-flake8-stdoutWriteHook-change.patch | 74 +++++++++++++++++++ python-flake8.changes | 6 ++ python-flake8.spec | 1 + 3 files changed, 81 insertions(+) create mode 100644 fix-recent-flake8-stdoutWriteHook-change.patch diff --git a/fix-recent-flake8-stdoutWriteHook-change.patch b/fix-recent-flake8-stdoutWriteHook-change.patch new file mode 100644 index 0000000..55e5624 --- /dev/null +++ b/fix-recent-flake8-stdoutWriteHook-change.patch @@ -0,0 +1,74 @@ +diff --git a/src/flake8/formatting/base.py b/src/flake8/formatting/base.py +index 7919f92..ea351ca 100644 +--- a/src/flake8/formatting/base.py ++++ b/src/flake8/formatting/base.py +@@ -179,12 +179,26 @@ class BaseFormatter: + # one + return f"{error.physical_line}{indent}^" + ++ def _stdout_write_hook(self, value: str) -> None: ++ """sys.stdout.write() with fallbacks.""" ++ try: ++ sys.stdout.write(value) ++ except UnicodeEncodeError: ++ byte_value = value.encode(sys.stdout.encoding, "backslashreplace") ++ if hasattr(sys.stdout, "buffer"): ++ sys.stdout.buffer.write(byte_value) ++ else: ++ sys.stdout.write( ++ byte_value.decode(sys.stdout.encoding, "strict") ++ ) ++ + def _write(self, output: str) -> None: + """Handle logic of whether to use an output file or print().""" + if self.output_fd is not None: + self.output_fd.write(output + self.newline) + if self.output_fd is None or self.options.tee: +- sys.stdout.buffer.write(output.encode() + self.newline.encode()) ++ self._stdout_write_hook(output) ++ self._stdout_write_hook(self.newline) + + def write(self, line: Optional[str], source: Optional[str]) -> None: + """Write the line either to the output file or stdout. +diff --git a/tests/unit/test_base_formatter.py b/tests/unit/test_base_formatter.py +index 8958903..5959636 100644 +--- a/tests/unit/test_base_formatter.py ++++ b/tests/unit/test_base_formatter.py +@@ -136,6 +136,37 @@ def test_write_produces_stdout(capsys): + assert capsys.readouterr().out == f"{line}\n{source}\n" + + ++@pytest.mark.parametrize("buffered_stdout", [True, False]) ++def test_write_hook_fallbacks(buffered_stdout): ++ """Varify stdout.write() fallbacks.""" ++ mock_line = mock.Mock(name="Mock Line") ++ ++ stdout_spec = ["write", "encoding"] ++ if buffered_stdout: ++ stdout_spec.append("buffer") ++ ++ with mock.patch("sys.stdout", spec=stdout_spec) as mock_stdout: ++ ++ def _stdout_write_effect(value): ++ if value is mock_line: ++ raise UnicodeEncodeError("unittest-codec", "", 42, 43, "NOPE") ++ return None ++ ++ mock_stdout.write.side_effect = _stdout_write_effect ++ mock_stdout.encoding = "ascii" ++ ++ formatter = base.BaseFormatter(options()) ++ formatter.write(mock_line, None) ++ ++ mock_line.encode.assert_called_once_with("ascii", "backslashreplace") ++ byte_mock_line = mock_line.encode.return_value ++ if buffered_stdout: ++ mock_stdout.buffer.write.assert_any_call(byte_mock_line) ++ else: ++ byte_mock_line.decode.assert_called_once_with("ascii", "strict") ++ mock_stdout.write.assert_any_call(byte_mock_line.decode.return_value) ++ ++ + class AfterInitFormatter(base.BaseFormatter): + """Subclass for testing after_init.""" + diff --git a/python-flake8.changes b/python-flake8.changes index f519670..5348bf0 100644 --- a/python-flake8.changes +++ b/python-flake8.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Sun Nov 14 12:10:58 UTC 2021 - Martin Liška + +- Add temporarily workaround for https://github.com/tholo/pytest-flake8/issues/81 + (fix-recent-flake8-stdoutWriteHook-change.patch). + ------------------------------------------------------------------- Tue Nov 9 08:06:25 UTC 2021 - Martin Liška diff --git a/python-flake8.spec b/python-flake8.spec index 25e959a..88efec3 100644 --- a/python-flake8.spec +++ b/python-flake8.spec @@ -26,6 +26,7 @@ License: MIT URL: https://gitlab.com/pycqa/flake8 Source: https://files.pythonhosted.org/packages/source/f/flake8/flake8-%{version}.tar.gz Patch0: fix-mock-patch-with-python3.4.patch +Patch1: fix-recent-flake8-stdoutWriteHook-change.patch BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros