Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-autopage for openSUSE:Factory checked in at 2023-11-13 22:18:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-autopage (Old) and /work/SRC/openSUSE:Factory/.python-autopage.new.17445 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-autopage" Mon Nov 13 22:18:07 2023 rev:7 rq:1124975 version:0.5.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-autopage/python-autopage.changes 2023-01-11 17:14:30.511636280 +0100 +++ /work/SRC/openSUSE:Factory/.python-autopage.new.17445/python-autopage.changes 2023-11-13 22:20:43.991198592 +0100 @@ -1,0 +2,17 @@ +Fri Nov 10 13:14:47 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 0.5.2: + * Always return an integer error code from exit_code() + * Fix line buffering detection for TTYs on Illumos/Solaris + * Numerous improvements to the integration tests: + - Work correctly with less v633 + - Fix flaky tests + - Improve behaviour and debugging when tests fail + - Allow test runners to capture stdout of all child processes + * Update test dependencies to account for recent releases of + fixtures + * Test using a more recent version of mypy + * Run tests on Python 3.11 and 3.12 + main + +------------------------------------------------------------------- Old: ---- autopage-0.5.1.tar.gz New: ---- autopage-0.5.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-autopage.spec ++++++ --- /var/tmp/diff_new_pack.ohYkNX/_old 2023-11-13 22:20:45.351248667 +0100 +++ /var/tmp/diff_new_pack.ohYkNX/_new 2023-11-13 22:20:45.367249256 +0100 @@ -16,9 +16,8 @@ # -%global skip_python2 1 Name: python-autopage -Version: 0.5.1 +Version: 0.5.2 Release: 0 Summary: A library to provide automatic paging for console output License: Apache-2.0 ++++++ autopage-0.5.1.tar.gz -> autopage-0.5.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/.package/lib/python3.10/site-packages/pip/py.typed new/autopage-0.5.2/.tox/.package/lib/python3.10/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/.package/lib/python3.10/site-packages/pip/py.typed 2022-05-09 17:11:49.000000000 +0200 +++ new/autopage-0.5.2/.tox/.package/lib/python3.10/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 @@ -1,4 +0,0 @@ -pip is a command line program. While it is implemented in Python, and so is -available for import, you must not use pip's internal APIs in this way. Typing -information is provided as a convenience only and is not a guarantee. Expect -unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/.package/lib/python3.11/site-packages/pip/py.typed new/autopage-0.5.2/.tox/.package/lib/python3.11/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/.package/lib/python3.11/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/.package/lib/python3.11/site-packages/pip/py.typed 2023-05-25 02:30:05.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/.pkg/lib/python3.11/site-packages/pip/py.typed new/autopage-0.5.2/.tox/.pkg/lib/python3.11/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/.pkg/lib/python3.11/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/.pkg/lib/python3.11/site-packages/pip/py.typed 2023-10-13 00:23:23.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/mypy/lib/python3.11/site-packages/pip/py.typed new/autopage-0.5.2/.tox/mypy/lib/python3.11/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/mypy/lib/python3.11/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/mypy/lib/python3.11/site-packages/pip/py.typed 2023-10-13 06:00:58.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/mypy/lib64/python3.11/site-packages/mypy/py.typed new/autopage-0.5.2/.tox/mypy/lib64/python3.11/site-packages/mypy/py.typed --- old/autopage-0.5.1/.tox/mypy/lib64/python3.11/site-packages/mypy/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/mypy/lib64/python3.11/site-packages/mypy/py.typed 2023-05-25 02:30:12.000000000 +0200 @@ -0,0 +1 @@ +# Marker file for PEP 561. The mypy package uses inline types. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/mypy/lib64/python3.9/site-packages/mypy/py.typed new/autopage-0.5.2/.tox/mypy/lib64/python3.9/site-packages/mypy/py.typed --- old/autopage-0.5.1/.tox/mypy/lib64/python3.9/site-packages/mypy/py.typed 2022-01-21 15:26:29.000000000 +0100 +++ new/autopage-0.5.2/.tox/mypy/lib64/python3.9/site-packages/mypy/py.typed 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -# Marker file for PEP 561. The mypy package uses inline types. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/pep8/lib/python3.11/site-packages/pip/py.typed new/autopage-0.5.2/.tox/pep8/lib/python3.11/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/pep8/lib/python3.11/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/pep8/lib/python3.11/site-packages/pip/py.typed 2023-10-13 06:00:54.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/py311/lib/python3.11/site-packages/pip/py.typed new/autopage-0.5.2/.tox/py311/lib/python3.11/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/py311/lib/python3.11/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/py311/lib/python3.11/site-packages/pip/py.typed 2023-10-13 00:23:22.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/py312/lib/python3.12/site-packages/pip/py.typed new/autopage-0.5.2/.tox/py312/lib/python3.12/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/py312/lib/python3.12/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/py312/lib/python3.12/site-packages/pip/py.typed 2023-10-13 10:15:06.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/py36/lib/python3.6/site-packages/pip/py.typed new/autopage-0.5.2/.tox/py36/lib/python3.6/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/py36/lib/python3.6/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/py36/lib/python3.6/site-packages/pip/py.typed 2023-10-13 06:02:29.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/py36/lib/python3.6/site-packages/tomli/py.typed new/autopage-0.5.2/.tox/py36/lib/python3.6/site-packages/tomli/py.typed --- old/autopage-0.5.1/.tox/py36/lib/python3.6/site-packages/tomli/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/py36/lib/python3.6/site-packages/tomli/py.typed 2023-05-25 02:30:29.000000000 +0200 @@ -0,0 +1 @@ +# Marker file for PEP 561 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/py37/lib/python3.7/site-packages/pip/py.typed new/autopage-0.5.2/.tox/py37/lib/python3.7/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/py37/lib/python3.7/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/py37/lib/python3.7/site-packages/pip/py.typed 2023-10-13 06:02:35.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/py37/lib/python3.7/site-packages/tomli/py.typed new/autopage-0.5.2/.tox/py37/lib/python3.7/site-packages/tomli/py.typed --- old/autopage-0.5.1/.tox/py37/lib/python3.7/site-packages/tomli/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/py37/lib/python3.7/site-packages/tomli/py.typed 2023-05-25 02:30:38.000000000 +0200 @@ -0,0 +1 @@ +# Marker file for PEP 561 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/py38/lib/python3.8/site-packages/pip/py.typed new/autopage-0.5.2/.tox/py38/lib/python3.8/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/py38/lib/python3.8/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/py38/lib/python3.8/site-packages/pip/py.typed 2023-10-13 06:02:41.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/py38/lib/python3.8/site-packages/tomli/py.typed new/autopage-0.5.2/.tox/py38/lib/python3.8/site-packages/tomli/py.typed --- old/autopage-0.5.1/.tox/py38/lib/python3.8/site-packages/tomli/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/py38/lib/python3.8/site-packages/tomli/py.typed 2023-05-25 02:30:45.000000000 +0200 @@ -0,0 +1 @@ +# Marker file for PEP 561 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/pypy3/lib/pypy3.9/site-packages/pip/py.typed new/autopage-0.5.2/.tox/pypy3/lib/pypy3.9/site-packages/pip/py.typed --- old/autopage-0.5.1/.tox/pypy3/lib/pypy3.9/site-packages/pip/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/pypy3/lib/pypy3.9/site-packages/pip/py.typed 2023-10-13 06:01:00.000000000 +0200 @@ -0,0 +1,4 @@ +pip is a command line program. While it is implemented in Python, and so is +available for import, you must not use pip's internal APIs in this way. Typing +information is provided as a convenience only and is not a guarantee. Expect +unannounced changes to the API and types in releases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/.tox/pypy3/lib/pypy3.9/site-packages/tomli/py.typed new/autopage-0.5.2/.tox/pypy3/lib/pypy3.9/site-packages/tomli/py.typed --- old/autopage-0.5.1/.tox/pypy3/lib/pypy3.9/site-packages/tomli/py.typed 1970-01-01 01:00:00.000000000 +0100 +++ new/autopage-0.5.2/.tox/pypy3/lib/pypy3.9/site-packages/tomli/py.typed 2023-05-25 02:30:18.000000000 +0200 @@ -0,0 +1 @@ +# Marker file for PEP 561 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/PKG-INFO new/autopage-0.5.2/PKG-INFO --- old/autopage-0.5.1/PKG-INFO 2022-05-27 16:46:58.188008300 +0200 +++ new/autopage-0.5.2/PKG-INFO 2023-10-16 11:19:58.986908000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: autopage -Version: 0.5.1 +Version: 0.5.2 Summary: A library to provide automatic paging for console output Home-page: https://github.com/zaneb/autopage Author: Zane Bitter @@ -14,6 +14,8 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Operating System :: POSIX Classifier: Environment :: Console Classifier: Intended Audience :: Developers @@ -128,7 +130,7 @@ user to override the pager command by setting the `PAGER` environment variable. To disable this behaviour, pass `pager_command=autopage.command.PlatformPager()` to use the default pager for -the current platform, or pass a specific pager from `autopage.commands`. The +the current platform, or pass a specific pager from `autopage.command`. The default pager command is `less` on most platforms. On AIX the default pager command is `more`, and on Windows `more.com`. @@ -165,9 +167,9 @@ import sys import autopage -with autopage.AutoPager(line_buffering=line_buffer_from_input()) as out: +with autopage.AutoPager(line_buffering=autopage.line_buffer_from_input()) as o: for l in sys.stdin: - out.write(l) + o.write(l) ``` ## Terminal reset diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/README.md new/autopage-0.5.2/README.md --- old/autopage-0.5.1/README.md 2022-01-21 19:30:50.000000000 +0100 +++ new/autopage-0.5.2/README.md 2023-05-25 01:25:05.000000000 +0200 @@ -101,7 +101,7 @@ user to override the pager command by setting the `PAGER` environment variable. To disable this behaviour, pass `pager_command=autopage.command.PlatformPager()` to use the default pager for -the current platform, or pass a specific pager from `autopage.commands`. The +the current platform, or pass a specific pager from `autopage.command`. The default pager command is `less` on most platforms. On AIX the default pager command is `more`, and on Windows `more.com`. @@ -138,9 +138,9 @@ import sys import autopage -with autopage.AutoPager(line_buffering=line_buffer_from_input()) as out: +with autopage.AutoPager(line_buffering=autopage.line_buffer_from_input()) as o: for l in sys.stdin: - out.write(l) + o.write(l) ``` ## Terminal reset diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/autopage/__init__.py new/autopage-0.5.2/autopage/__init__.py --- old/autopage-0.5.1/autopage/__init__.py 2022-01-21 15:51:20.000000000 +0100 +++ new/autopage-0.5.2/autopage/__init__.py 2023-10-16 11:01:59.000000000 +0200 @@ -224,7 +224,7 @@ return True elif isinstance(exc, KeyboardInterrupt): self._exit_code = _signal_exit_code(signal.SIGINT) - elif isinstance(exc, SystemExit): + elif isinstance(exc, SystemExit) and isinstance(exc.code, int): self._exit_code = exc.code else: self._exit_code = 1 @@ -263,7 +263,8 @@ """ if input_stream is None: input_stream = sys.stdin - return not input_stream.seekable() + # On Illumos, TTYs claim to be seekable so don't believe them + return not (input_stream.seekable() and not input_stream.isatty()) def _signal_exit_code(signum: signal.Signals) -> int: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/autopage/tests/isolation.py new/autopage-0.5.2/autopage/tests/isolation.py --- old/autopage-0.5.1/autopage/tests/isolation.py 2022-05-09 17:55:16.000000000 +0200 +++ new/autopage-0.5.2/autopage/tests/isolation.py 2023-10-13 13:50:11.000000000 +0200 @@ -26,7 +26,7 @@ import traceback import types -from typing import Optional, Generator +from typing import Optional, Generator, Tuple import typing @@ -56,15 +56,20 @@ self._exit_code: Optional[int] = None + self._raw_lines: typing.List[str] = [] + self._lines: typing.List[str] = [] + def interrupt(self) -> None: self.write(b'\x03') - time.sleep(0.001) def write(self, data: bytes) -> None: os.write(self._ptm_fd, data) + time.sleep(0.001) def readline(self) -> str: - return self._tty.readline() + line = self._tty.readline() + self._raw_lines.append(line) + return line def error_output(self) -> str: if self._stderr_fifo_fd is None: @@ -103,6 +108,13 @@ assert self._exit_code is not None return self._exit_code + def record_output(self, line: str) -> None: + self._lines.append(line) + + def recorded_output(self) -> typing.Tuple[typing.List[str], + typing.List[str]]: + return self._raw_lines[:], self._lines[:] + class PagerControl: _page_end = None @@ -116,6 +128,25 @@ def _iter_lines(self) -> Generator[typing.Union[str, None], None, None]: + def get_content(segment: str) -> Tuple[bool, + typing.Union[str, None]]: + if not segment: + return False, '' + if segment == '\x1b[1m~\x1b[0m\n': + # Ignore lines that are filling blank vertical space with + # '~' after hitting Ctrl-C when the screen is not full + return False, '' + visible = self._ctrl_chars.sub('', segment) + if ((visible.rstrip() == ':' or '(END)' in visible + or 'Waiting for data...' in visible) + and segment.replace('\x1b[m', '') != visible): + return True, self._page_end + elif visible.rstrip() or segment == visible: + self._total_lines += 1 + self.env.record_output(visible) + return True, visible + return False, '' + while True: line = '\x1b[?' while line.lstrip(' q').startswith('\x1b[?'): @@ -123,18 +154,15 @@ line = (rawline.replace('\x07', '') # Ignore bell .replace('\x1b[m', '')) # Ignore style reset before, reset, after = line.partition('\x1b[2J') - for segment in filter(bool, (before, after)): - if segment == '\x1b[1m~\x1b[0m\n': - # Ignore lines that are filling blank vertical space with - # '~' after hitting Ctrl-C when the screen is not full - continue - visible = self._ctrl_chars.sub('', segment) - if ((visible.rstrip() == ':' or '(END)' in visible) - and segment.replace('\x1b[m', '') != visible): - yield self._page_end - elif visible != '\n' or segment == visible: - self._total_lines += 1 - yield visible + + valid, content = get_content(before) + if valid: + yield content + if reset and not (valid and (content is self._page_end)): + yield self._page_end + valid, content = get_content(after) + if valid: + yield content def read_lines(self, count: int) -> typing.Iterator[str]: return itertools.islice((line for line in self._lines @@ -190,6 +218,11 @@ pass +class TimeoutException(Exception): + def __init__(self, pid: Optional[int]): + super(Exception, self).__init__(f'Test process {pid} timed out') + + @contextlib.contextmanager def isolate(child_function: typing.Callable[[], int], stdin_pipe: bool = False, @@ -204,10 +237,12 @@ 'stderr' if stderr_pipe else None) as fifo_paths: result_r, result_w = os.pipe() env_pid, tty = pty.fork() - if env_pid == 0: + if env_pid == pty.CHILD: try: os.close(result_r) - pts = os.ttyname(sys.stdout.fileno()) + # Get ttyname from original stdout, even if test runner has + # replaced stdout with another file + pts = os.ttyname(pty.STDOUT_FILENO) ctx = multiprocessing.get_context('spawn') p = ctx.Process(target=_run_test, args=(child_function, pts, @@ -215,7 +250,7 @@ p.start() def handle_terminate(signum: int, - frame: types.FrameType) -> None: + frame: Optional[types.FrameType]) -> None: if p.is_alive(): p.terminate() @@ -224,14 +259,18 @@ signal.signal(signal.SIGINT, signal.SIG_IGN) p.join(2) # Wait at most 2s + if p.exitcode is None: + raise TimeoutException(p.pid) except BaseException: - with os.fdopen(result_w, 'w') as result_writer: - traceback.print_exc(file=result_writer) - # Prevent blocking in parent process by opening our end of all - # FIFOs. - for path, write in zip(fifo_paths, [True, False, False]): - _open_fifo(path, write) - os._exit(1) + try: + with os.fdopen(result_w, 'w') as result_writer: + traceback.print_exc(file=result_writer) + finally: + # Prevent blocking in parent process by opening our end of + # all FIFOs. + for path, write in zip(fifo_paths, [False, True, True]): + _open_fifo(path, write) + os._exit(1) with os.fdopen(result_w, 'w') as result_writer: result_writer.write(f'{p.exitcode}\n') @@ -243,20 +282,29 @@ env = IsolationEnvironment(env_pid, tty, *fifo_paths) time.sleep(0.01) try: - yield env - finally: - def get_return_code() -> int: - with os.fdopen(result_r) as result_reader: - result = result_reader.readline().rstrip() - try: - return int(result) - except ValueError: - pass - trace = result_reader.read() - raise TestProcessNotComplete('\n'.join([result, - trace])) - - env.close(get_return_code) + try: + yield env + finally: + def get_return_code() -> int: + with os.fdopen(result_r) as result_reader: + result = result_reader.readline().rstrip() + try: + return int(result) + except ValueError: + pass + trace = result_reader.read() + raise TestProcessNotComplete('\n'.join([result, + trace])) + + env.close(get_return_code) + except Exception: + raw, processed = env.recorded_output() + if raw: + print(f'Raw output: {repr(raw)}', file=sys.stderr) + if processed: + print(f'Recorded output: {repr(processed)}', + file=sys.stderr) + raise def _run_test(test_function: typing.Callable[[], int], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/autopage.egg-info/PKG-INFO new/autopage-0.5.2/autopage.egg-info/PKG-INFO --- old/autopage-0.5.1/autopage.egg-info/PKG-INFO 2022-05-27 16:46:57.000000000 +0200 +++ new/autopage-0.5.2/autopage.egg-info/PKG-INFO 2023-10-16 11:19:58.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: autopage -Version: 0.5.1 +Version: 0.5.2 Summary: A library to provide automatic paging for console output Home-page: https://github.com/zaneb/autopage Author: Zane Bitter @@ -14,6 +14,8 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Operating System :: POSIX Classifier: Environment :: Console Classifier: Intended Audience :: Developers @@ -128,7 +130,7 @@ user to override the pager command by setting the `PAGER` environment variable. To disable this behaviour, pass `pager_command=autopage.command.PlatformPager()` to use the default pager for -the current platform, or pass a specific pager from `autopage.commands`. The +the current platform, or pass a specific pager from `autopage.command`. The default pager command is `less` on most platforms. On AIX the default pager command is `more`, and on Windows `more.com`. @@ -165,9 +167,9 @@ import sys import autopage -with autopage.AutoPager(line_buffering=line_buffer_from_input()) as out: +with autopage.AutoPager(line_buffering=autopage.line_buffer_from_input()) as o: for l in sys.stdin: - out.write(l) + o.write(l) ``` ## Terminal reset diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/autopage.egg-info/SOURCES.txt new/autopage-0.5.2/autopage.egg-info/SOURCES.txt --- old/autopage-0.5.1/autopage.egg-info/SOURCES.txt 2022-05-27 16:46:58.000000000 +0200 +++ new/autopage-0.5.2/autopage.egg-info/SOURCES.txt 2023-10-16 11:19:58.000000000 +0200 @@ -4,22 +4,34 @@ pyproject.toml setup.cfg tox.ini -.tox/.package/lib/python3.10/site-packages/pip/py.typed -.tox/mypy/lib/python3.9/site-packages/autopage/py.typed -.tox/mypy/lib64/python3.9/site-packages/mypy/py.typed -.tox/pep8/lib/python3.9/site-packages/autopage/py.typed +.tox/.package/lib/python3.11/site-packages/pip/py.typed +.tox/.pkg/lib/python3.11/site-packages/pip/py.typed +.tox/mypy/lib/python3.11/site-packages/autopage/py.typed +.tox/mypy/lib/python3.11/site-packages/pip/py.typed +.tox/mypy/lib64/python3.11/site-packages/mypy/py.typed +.tox/pep8/lib/python3.11/site-packages/autopage/py.typed +.tox/pep8/lib/python3.11/site-packages/pip/py.typed .tox/py310/lib/python3.10/site-packages/_pytest/py.typed -.tox/py310/lib/python3.10/site-packages/attr/py.typed -.tox/py310/lib/python3.10/site-packages/attrs/py.typed .tox/py310/lib/python3.10/site-packages/autopage/py.typed +.tox/py310/lib/python3.10/site-packages/exceptiongroup/py.typed .tox/py310/lib/python3.10/site-packages/iniconfig/py.typed .tox/py310/lib/python3.10/site-packages/packaging/py.typed .tox/py310/lib/python3.10/site-packages/pip/py.typed -.tox/py310/lib/python3.10/site-packages/py/py.typed -.tox/py310/lib/python3.10/site-packages/py/_vendored_packages/iniconfig/py.typed -.tox/py310/lib/python3.10/site-packages/pyparsing/py.typed .tox/py310/lib/python3.10/site-packages/pytest/py.typed .tox/py310/lib/python3.10/site-packages/tomli/py.typed +.tox/py311/lib/python3.11/site-packages/_pytest/py.typed +.tox/py311/lib/python3.11/site-packages/autopage/py.typed +.tox/py311/lib/python3.11/site-packages/iniconfig/py.typed +.tox/py311/lib/python3.11/site-packages/packaging/py.typed +.tox/py311/lib/python3.11/site-packages/pip/py.typed +.tox/py311/lib/python3.11/site-packages/pytest/py.typed +.tox/py312/lib/python3.12/site-packages/_pytest/py.typed +.tox/py312/lib/python3.12/site-packages/autopage/py.typed +.tox/py312/lib/python3.12/site-packages/iniconfig/py.typed +.tox/py312/lib/python3.12/site-packages/packaging/py.typed +.tox/py312/lib/python3.12/site-packages/pip/py.typed +.tox/py312/lib/python3.12/site-packages/pluggy/py.typed +.tox/py312/lib/python3.12/site-packages/pytest/py.typed .tox/py36/lib/python3.6/site-packages/_pytest/py.typed .tox/py36/lib/python3.6/site-packages/attr/py.typed .tox/py36/lib/python3.6/site-packages/attrs/py.typed @@ -27,54 +39,49 @@ .tox/py36/lib/python3.6/site-packages/importlib_metadata/py.typed .tox/py36/lib/python3.6/site-packages/iniconfig/py.typed .tox/py36/lib/python3.6/site-packages/packaging/py.typed +.tox/py36/lib/python3.6/site-packages/pip/py.typed .tox/py36/lib/python3.6/site-packages/py/py.typed .tox/py36/lib/python3.6/site-packages/py/_vendored_packages/iniconfig/py.typed +.tox/py36/lib/python3.6/site-packages/pyparsing/py.typed .tox/py36/lib/python3.6/site-packages/pytest/py.typed +.tox/py36/lib/python3.6/site-packages/tomli/py.typed .tox/py37/lib/python3.7/site-packages/_pytest/py.typed -.tox/py37/lib/python3.7/site-packages/attr/py.typed -.tox/py37/lib/python3.7/site-packages/attrs/py.typed .tox/py37/lib/python3.7/site-packages/autopage/py.typed +.tox/py37/lib/python3.7/site-packages/exceptiongroup/py.typed .tox/py37/lib/python3.7/site-packages/importlib_metadata/py.typed .tox/py37/lib/python3.7/site-packages/iniconfig/py.typed .tox/py37/lib/python3.7/site-packages/packaging/py.typed -.tox/py37/lib/python3.7/site-packages/py/py.typed -.tox/py37/lib/python3.7/site-packages/py/_vendored_packages/iniconfig/py.typed +.tox/py37/lib/python3.7/site-packages/pip/py.typed .tox/py37/lib/python3.7/site-packages/pytest/py.typed +.tox/py37/lib/python3.7/site-packages/tomli/py.typed .tox/py38/lib/python3.8/site-packages/_pytest/py.typed -.tox/py38/lib/python3.8/site-packages/attr/py.typed -.tox/py38/lib/python3.8/site-packages/attrs/py.typed .tox/py38/lib/python3.8/site-packages/autopage/py.typed +.tox/py38/lib/python3.8/site-packages/exceptiongroup/py.typed .tox/py38/lib/python3.8/site-packages/iniconfig/py.typed .tox/py38/lib/python3.8/site-packages/packaging/py.typed -.tox/py38/lib/python3.8/site-packages/py/py.typed -.tox/py38/lib/python3.8/site-packages/py/_vendored_packages/iniconfig/py.typed +.tox/py38/lib/python3.8/site-packages/pip/py.typed .tox/py38/lib/python3.8/site-packages/pytest/py.typed +.tox/py38/lib/python3.8/site-packages/tomli/py.typed .tox/py39/lib/python3.9/site-packages/_pytest/py.typed -.tox/py39/lib/python3.9/site-packages/attr/py.typed -.tox/py39/lib/python3.9/site-packages/attrs/py.typed .tox/py39/lib/python3.9/site-packages/autopage/py.typed +.tox/py39/lib/python3.9/site-packages/exceptiongroup/py.typed .tox/py39/lib/python3.9/site-packages/iniconfig/py.typed .tox/py39/lib/python3.9/site-packages/packaging/py.typed .tox/py39/lib/python3.9/site-packages/pip/py.typed -.tox/py39/lib/python3.9/site-packages/py/py.typed -.tox/py39/lib/python3.9/site-packages/py/_vendored_packages/iniconfig/py.typed -.tox/py39/lib/python3.9/site-packages/pyparsing/py.typed .tox/py39/lib/python3.9/site-packages/pytest/py.typed .tox/py39/lib/python3.9/site-packages/tomli/py.typed .tox/pypy/site-packages/attr/py.typed .tox/pypy/site-packages/packaging/py.typed .tox/pypy/site-packages/py/py.typed .tox/pypy/site-packages/py/_vendored_packages/iniconfig/py.typed -.tox/pypy3/site-packages/_pytest/py.typed -.tox/pypy3/site-packages/attr/py.typed -.tox/pypy3/site-packages/attrs/py.typed -.tox/pypy3/site-packages/autopage/py.typed -.tox/pypy3/site-packages/importlib_metadata/py.typed -.tox/pypy3/site-packages/iniconfig/py.typed -.tox/pypy3/site-packages/packaging/py.typed -.tox/pypy3/site-packages/py/py.typed -.tox/pypy3/site-packages/py/_vendored_packages/iniconfig/py.typed -.tox/pypy3/site-packages/pytest/py.typed +.tox/pypy3/lib/pypy3.9/site-packages/_pytest/py.typed +.tox/pypy3/lib/pypy3.9/site-packages/autopage/py.typed +.tox/pypy3/lib/pypy3.9/site-packages/exceptiongroup/py.typed +.tox/pypy3/lib/pypy3.9/site-packages/iniconfig/py.typed +.tox/pypy3/lib/pypy3.9/site-packages/packaging/py.typed +.tox/pypy3/lib/pypy3.9/site-packages/pip/py.typed +.tox/pypy3/lib/pypy3.9/site-packages/pytest/py.typed +.tox/pypy3/lib/pypy3.9/site-packages/tomli/py.typed autopage/__init__.py autopage/argparse.py autopage/command.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/setup.cfg new/autopage-0.5.2/setup.cfg --- old/autopage-0.5.1/setup.cfg 2022-05-27 16:46:58.189008500 +0200 +++ new/autopage-0.5.2/setup.cfg 2023-10-16 11:19:58.986908000 +0200 @@ -1,6 +1,6 @@ [metadata] name = autopage -version = 0.5.1 +version = 0.5.2 author = Zane Bitter author_email = zbit...@redhat.com description = A library to provide automatic paging for console output @@ -17,6 +17,8 @@ Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 + Programming Language :: Python :: 3.12 Operating System :: POSIX Environment :: Console Intended Audience :: Developers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autopage-0.5.1/tox.ini new/autopage-0.5.2/tox.ini --- old/autopage-0.5.1/tox.ini 2021-11-21 01:05:34.000000000 +0100 +++ new/autopage-0.5.2/tox.ini 2023-06-16 03:21:27.000000000 +0200 @@ -1,13 +1,16 @@ [tox] -envlist = pep8,mypy,pypy3,py36,py37,py38,py39,py310 +envlist = pep8,mypy,pypy3,py36,py37,py38,py39,py310,py311,py312 isolated_build = true [testenv] deps = pytest fixtures + fixtures[streams] + pip>=19;python_version<'3.7' + testtools;python_version<'3.7' commands = - pytest -s + pytest [testenv:pep8] deps = flake8 @@ -15,6 +18,6 @@ flake8 autopage [testenv:mypy] -deps = mypy>=0.800,<0.900 +deps = mypy>=0.900,<1.3.0 commands = mypy -p autopage