Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-qtconsole for openSUSE:Factory checked in at 2024-09-09 14:45:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-qtconsole (Old) and /work/SRC/openSUSE:Factory/.python-qtconsole.new.10096 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-qtconsole" Mon Sep 9 14:45:30 2024 rev:34 rq:1199487 version:5.6.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-qtconsole/python-qtconsole.changes 2024-07-14 08:54:38.361534178 +0200 +++ /work/SRC/openSUSE:Factory/.python-qtconsole.new.10096/python-qtconsole.changes 2024-09-09 14:46:38.364175535 +0200 @@ -1,0 +2,11 @@ +Sun Sep 8 11:32:42 UTC 2024 - Ben Greiner <c...@bnavigator.de> + +- Update to 5.6.0 + * Use selected syntax highlighting style for tracebacks and + improve ANSI color codes support. + * Remove syntax highlighting support for Python 2. + * Fix handling of carriage return. + * Fix showing bold face characters in output when using ANSI + codes. + +------------------------------------------------------------------- Old: ---- qtconsole-5.5.2.tar.gz New: ---- qtconsole-5.6.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-qtconsole.spec ++++++ --- /var/tmp/diff_new_pack.Zr0OGh/_old 2024-09-09 14:46:38.808193941 +0200 +++ /var/tmp/diff_new_pack.Zr0OGh/_new 2024-09-09 14:46:38.808193941 +0200 @@ -22,7 +22,7 @@ %bcond_with libalternatives %endif Name: python-qtconsole -Version: 5.5.2 +Version: 5.6.0 Release: 0 Summary: Jupyter Qt console License: BSD-3-Clause @@ -49,7 +49,6 @@ Requires: python-jupyter-client >= 4.1 Requires: python-jupyter-core Requires: python-packaging -Requires: python-pyzmq >= 17.1 Requires: python-traitlets Conflicts: python-traitlets = 5.2.1 Conflicts: python-traitlets = 5.2.2 @@ -77,7 +76,6 @@ BuildRequires: %{python_module pytest-qt} BuildRequires: %{python_module pytest-xvfb} BuildRequires: %{python_module pytest} -BuildRequires: %{python_module pyzmq >= 17.1} BuildRequires: %{python_module qt5} BuildRequires: %{python_module traitlets} # /SECTION ++++++ qtconsole-5.5.2.tar.gz -> qtconsole-5.6.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/.github/workflows/linux-tests.yml new/qtconsole-5.6.0/.github/workflows/linux-tests.yml --- old/qtconsole-5.5.2/.github/workflows/linux-tests.yml 2024-05-05 03:53:54.000000000 +0200 +++ new/qtconsole-5.6.0/.github/workflows/linux-tests.yml 2024-08-28 20:01:04.000000000 +0200 @@ -23,6 +23,7 @@ PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }} RUNNER_OS: 'ubuntu' COVERALLS_REPO_TOKEN: XWVhJf2AsO7iouBLuCsh0pPhwHy81Uz1v + COVERALLS_SERVICE_NAME: 'github-actions' strategy: fail-fast: false matrix: @@ -76,7 +77,7 @@ env: QT_API: ${{ matrix.QT_LIB }} PYTEST_QT_API: ${{ matrix.QT_LIB }} - - name: Upload coverage to Codecov + - name: Upload coverage to coveralls if: matrix.PYTHON_VERSION == '3.8' shell: bash -l {0} run: coveralls diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/.gitignore new/qtconsole-5.6.0/.gitignore --- old/qtconsole-5.5.2/.gitignore 2023-05-05 19:34:26.000000000 +0200 +++ new/qtconsole-5.6.0/.gitignore 2024-08-28 20:01:04.000000000 +0200 @@ -22,3 +22,4 @@ .coverage .pytest_cache .vscode +.spyproject diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/PKG-INFO new/qtconsole-5.6.0/PKG-INFO --- old/qtconsole-5.5.2/PKG-INFO 2024-05-05 17:55:09.689656500 +0200 +++ new/qtconsole-5.6.0/PKG-INFO 2024-08-28 20:20:33.893727500 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: qtconsole -Version: 5.5.2 +Version: 5.6.0 Summary: Jupyter Qt console Home-page: http://jupyter.org Author: Jupyter Development Team @@ -31,7 +31,6 @@ Requires-Dist: pygments Requires-Dist: ipykernel>=4.1 Requires-Dist: qtpy>=2.4.0 -Requires-Dist: pyzmq>=17.1 Requires-Dist: packaging Provides-Extra: test Requires-Dist: flaky; extra == "test" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/docs/source/changelog.rst new/qtconsole-5.6.0/docs/source/changelog.rst --- old/qtconsole-5.5.2/docs/source/changelog.rst 2024-05-05 17:50:54.000000000 +0200 +++ new/qtconsole-5.6.0/docs/source/changelog.rst 2024-08-28 20:12:03.000000000 +0200 @@ -3,6 +3,29 @@ Changes in Jupyter Qt console ============================= +.. _5.6: + +5.6 +~~~ + +5.6.0 +----- + +`5.6.0 on GitHub <https://github.com/jupyter/qtconsole/milestones/5.6.0>`__ + +Additions ++++++++++ + +* Use selected syntax highlighting style for tracebacks and improve ANSI color + codes support. + +Changes ++++++++ + +* Remove syntax highlighting support for Python 2. +* Fix handling of carriage return. +* Fix showing bold face characters in output when using ANSI codes. + .. _5.5: 5.5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/_version.py new/qtconsole-5.6.0/qtconsole/_version.py --- old/qtconsole-5.5.2/qtconsole/_version.py 2024-05-05 17:53:42.000000000 +0200 +++ new/qtconsole-5.6.0/qtconsole/_version.py 2024-08-28 20:19:51.000000000 +0200 @@ -1,2 +1,2 @@ -version_info = (5, 5, 2) +version_info = (5, 6, 0) __version__ = '.'.join(map(str, version_info)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/ansi_code_processor.py new/qtconsole-5.6.0/qtconsole/ansi_code_processor.py --- old/qtconsole-5.5.2/qtconsole/ansi_code_processor.py 2021-11-14 19:48:23.000000000 +0100 +++ new/qtconsole-5.6.0/qtconsole/ansi_code_processor.py 2024-08-28 20:01:04.000000000 +0200 @@ -61,7 +61,7 @@ # Whether to increase intensity or set boldness for SGR code 1. # (Different terminals handle this in different ways.) - bold_text_enabled = False + bold_text_enabled = True # We provide an empty default color map because subclasses will likely want # to use a custom color format. @@ -292,6 +292,31 @@ self.actions.append(ScrollAction('scroll', 'down', 'page', 1)) return '' + def _parse_ansi_color(self, color, intensity): + """ + Map an ANSI color code to color name or a RGB tuple. + Based on: https://gist.github.com/MightyPork/1d9bd3a3fd4eb1a661011560f6921b5b + """ + parsed_color = None + if color < 16: + # Adjust for intensity, if possible. + if intensity > 0 and color < 8: + color += 8 + parsed_color = self.color_map.get(color, None) + elif (color > 231): + s = int((color - 232) * 10 + 8) + parsed_color = (s, s, s) + else: + n = color - 16 + b = n % 6 + g = (n - b) / 6 % 6 + r = (n - b - g * 6) / 36 % 6 + r = int(r * 40 + 55) if r else 0 + g = int(g * 40 + 55) if g else 0 + b = int(b * 40 + 55) if b else 0 + parsed_color = (r, g, b) + return parsed_color + class QtAnsiCodeProcessor(AnsiCodeProcessor): """ Translates ANSI escape codes into QTextCharFormats. @@ -302,7 +327,7 @@ 0 : 'black', # black 1 : 'darkred', # red 2 : 'darkgreen', # green - 3 : 'brown', # yellow + 3 : 'gold', # yellow 4 : 'darkblue', # blue 5 : 'darkviolet', # magenta 6 : 'steelblue', # cyan @@ -323,12 +348,8 @@ """ Returns a QColor for a given color code or rgb list, or None if one cannot be constructed. """ - if isinstance(color, int): - # Adjust for intensity, if possible. - if color < 8 and intensity > 0: - color += 8 - constructor = self.color_map.get(color, None) + constructor = self._parse_ansi_color(color, intensity) elif isinstance(color, (tuple, list)): constructor = color else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/console_widget.py new/qtconsole-5.6.0/qtconsole/console_widget.py --- old/qtconsole-5.5.2/qtconsole/console_widget.py 2023-11-06 01:26:20.000000000 +0100 +++ new/qtconsole-5.6.0/qtconsole/console_widget.py 2024-08-28 20:01:04.000000000 +0200 @@ -297,6 +297,10 @@ self._reading_callback = None self._tab_width = 4 + # Cursor position of where to insert text. + # Control characters allow this to move around on the current line. + self._insert_text_cursor = self._control.textCursor() + # List of strings pending to be appended as plain text in the widget. # The text is not immediately inserted when available to not # choke the Qt event loop with paint events for the widget in @@ -695,6 +699,9 @@ # effect when using a QTextEdit. I believe this is a Qt bug. self._control.moveCursor(QtGui.QTextCursor.End) + # Advance where text is inserted + self._insert_text_cursor.movePosition(QtGui.QTextCursor.End) + def export_html(self): """ Shows a dialog to export HTML/XML in various formats. """ @@ -712,6 +719,9 @@ self._append_before_prompt_cursor.setPosition( self._get_end_cursor().position()) + self._insert_text_cursor.setPosition( + self._get_end_cursor().position()) + # The maximum block count is only in effect during execution. # This ensures that _prompt_pos does not become invalid due to # text truncation. @@ -841,12 +851,12 @@ self._insert_plain_text_into_buffer(cursor, dedent(text)) - def print_(self, printer = None): + def print_(self, printer=None): """ Print the contents of the ConsoleWidget to the specified QPrinter. """ - if (not printer): + if not printer: printer = QtPrintSupport.QPrinter() - if(QtPrintSupport.QPrintDialog(printer).exec_() != QtPrintSupport.QPrintDialog.Accepted): + if QtPrintSupport.QPrintDialog(printer).exec_() != QtPrintSupport.QPrintDialog.Accepted: return self._control.print_(printer) @@ -998,18 +1008,40 @@ current prompt, if there is one. """ # Determine where to insert the content. - cursor = self._control.textCursor() + cursor = self._insert_text_cursor if before_prompt and (self._reading or not self._executing): self._flush_pending_stream() - cursor._insert_mode=True - cursor.setPosition(self._append_before_prompt_pos) - else: + + # Jump to before prompt, if there is one + if cursor.position() >= self._append_before_prompt_pos \ + and self._append_before_prompt_pos != self._get_end_pos(): + cursor.setPosition(self._append_before_prompt_pos) + + # If we're appending on the same line as the prompt, use insert mode. + # If so, the character at self._append_before_prompt_pos will not be a newline + cursor.movePosition(QtGui.QTextCursor.Right, + QtGui.QTextCursor.KeepAnchor) + if cursor.selection().toPlainText() != '\n': + cursor._insert_mode = True + cursor.movePosition(QtGui.QTextCursor.Left) + else: + # Insert at current printing point. + # If cursor is before prompt jump to end, but only if there + # is a prompt (before_prompt_pos != end) + if cursor.position() <= self._append_before_prompt_pos \ + and self._append_before_prompt_pos != self._get_end_pos(): + cursor.movePosition(QtGui.QTextCursor.End) + if insert != self._insert_plain_text: self._flush_pending_stream() - cursor.movePosition(QtGui.QTextCursor.End) # Perform the insertion. result = insert(cursor, input, *args, **kwargs) + + # Remove insert mode tag + if hasattr(cursor, '_insert_mode'): + del cursor._insert_mode + return result def _append_block(self, block_format=None, before_prompt=False): @@ -1045,7 +1077,7 @@ # Select and remove all text below the input buffer. cursor = self._get_prompt_cursor() prompt = self._continuation_prompt.lstrip() - if(self._temp_buffer_filled): + if self._temp_buffer_filled: self._temp_buffer_filled = False while cursor.movePosition(QtGui.QTextCursor.NextBlock): temp_cursor = QtGui.QTextCursor(cursor) @@ -1657,16 +1689,18 @@ return False def _on_flush_pending_stream_timer(self): - """ Flush the pending stream output and change the - prompt position appropriately. + """ Flush pending text into the widget on console timer trigger. """ - cursor = self._control.textCursor() - cursor.movePosition(QtGui.QTextCursor.End) self._flush_pending_stream() - cursor.movePosition(QtGui.QTextCursor.End) def _flush_pending_stream(self): - """ Flush out pending text into the widget. """ + """ + Flush pending text into the widget. + + It only applies to text that is pending when the console is in the + running state. Text printed when console is not running is shown + immediately, and does not wait to be flushed. + """ text = self._pending_insert_text self._pending_insert_text = [] buffer_size = self._control.document().maximumBlockCount() @@ -1674,7 +1708,7 @@ text = self._get_last_lines_from_list(text, buffer_size) text = ''.join(text) t = time.time() - self._insert_plain_text(self._get_end_cursor(), text, flush=True) + self._insert_plain_text(self._insert_text_cursor, text, flush=True) # Set the flush interval to equal the maximum time to update text. self._pending_text_flush_interval.setInterval( int(max(100, (time.time() - t) * 1000)) @@ -2093,12 +2127,12 @@ if (self._executing and not flush and self._pending_text_flush_interval.isActive() and - cursor.position() == self._get_end_pos()): + cursor.position() == self._insert_text_cursor.position()): # Queue the text to insert in case it is being inserted at end self._pending_insert_text.append(text) if buffer_size > 0: self._pending_insert_text = self._get_last_lines_from_list( - self._pending_insert_text, buffer_size) + self._pending_insert_text, buffer_size) return if self._executing and not self._pending_text_flush_interval.isActive(): @@ -2123,7 +2157,7 @@ cursor.select(QtGui.QTextCursor.Document) remove = True if act.area == 'line': - if act.erase_to == 'all': + if act.erase_to == 'all': cursor.select(QtGui.QTextCursor.LineUnderCursor) remove = True elif act.erase_to == 'start': @@ -2137,7 +2171,7 @@ QtGui.QTextCursor.EndOfLine, QtGui.QTextCursor.KeepAnchor) remove = True - if remove: + if remove: nspace=cursor.selectionEnd()-cursor.selectionStart() if fill else 0 cursor.removeSelectedText() if nspace>0: cursor.insertText(' '*nspace) # replace text by space, to keep cursor position as specified @@ -2174,15 +2208,17 @@ # simulate replacement mode if substring is not None: format = self._ansi_processor.get_format() - if not (hasattr(cursor,'_insert_mode') and cursor._insert_mode): + + # Note that using _insert_mode means the \r ANSI sequence will not swallow characters. + if not (hasattr(cursor, '_insert_mode') and cursor._insert_mode): pos = cursor.position() cursor2 = QtGui.QTextCursor(cursor) # self._get_line_end_pos() is the previous line, don't use it cursor2.movePosition(QtGui.QTextCursor.EndOfLine) remain = cursor2.position() - pos # number of characters until end of line n=len(substring) swallow = min(n, remain) # number of character to swallow - cursor.setPosition(pos+swallow,QtGui.QTextCursor.KeepAnchor) - cursor.insertText(substring,format) + cursor.setPosition(pos + swallow, QtGui.QTextCursor.KeepAnchor) + cursor.insertText(substring, format) else: cursor.insertText(text) cursor.endEditBlock() @@ -2399,7 +2435,7 @@ self._reading = True if password: - self._show_prompt('Warning: QtConsole does not support password mode, '\ + self._show_prompt('Warning: QtConsole does not support password mode, ' 'the text you type will be visible.', newline=True) if 'ipdb' not in prompt.lower(): @@ -2531,6 +2567,9 @@ if move_forward: self._append_before_prompt_cursor.setPosition( self._append_before_prompt_cursor.position() + 1) + else: + # cursor position was 0, set before prompt cursor + self._append_before_prompt_cursor.setPosition(0) self._prompt_started() #------ Signal handlers ---------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/frontend_widget.py new/qtconsole-5.6.0/qtconsole/frontend_widget.py --- old/qtconsole-5.5.2/qtconsole/frontend_widget.py 2024-05-05 03:35:40.000000000 +0200 +++ new/qtconsole-5.6.0/qtconsole/frontend_widget.py 2024-08-28 20:01:04.000000000 +0200 @@ -728,7 +728,7 @@ def append_stream(self, text): """Appends text to the output stream.""" - self._append_plain_text(text, before_prompt=True) + self._append_plain_text(text, before_prompt = True) def flush_clearoutput(self): """If a clearoutput is pending, execute it.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/jupyter_widget.py new/qtconsole-5.6.0/qtconsole/jupyter_widget.py --- old/qtconsole-5.5.2/qtconsole/jupyter_widget.py 2023-11-06 00:26:17.000000000 +0100 +++ new/qtconsole-5.6.0/qtconsole/jupyter_widget.py 2024-08-28 20:01:04.000000000 +0200 @@ -14,7 +14,7 @@ from qtpy import QtCore, QtGui -from IPython.lib.lexers import IPythonLexer, IPython3Lexer +from IPython.lib.lexers import IPython3Lexer from pygments.lexers import get_lexer_by_name from pygments.util import ClassNotFound from qtconsole import __version__ @@ -303,8 +303,6 @@ # added here by hand. if pygments_lexer == 'ipython3': lexer = IPython3Lexer() - elif pygments_lexer == 'ipython2': - lexer = IPythonLexer() else: lexer = get_lexer_by_name(self.language_name) self._highlighter._lexer = lexer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/mainwindow.py new/qtconsole-5.6.0/qtconsole/mainwindow.py --- old/qtconsole-5.5.2/qtconsole/mainwindow.py 2022-05-29 18:43:26.000000000 +0200 +++ new/qtconsole-5.6.0/qtconsole/mainwindow.py 2024-08-28 20:01:04.000000000 +0200 @@ -801,6 +801,7 @@ colors='nocolor' elif styles.dark_style(syntax_style): colors='linux' + else: colors='lightbg' self.active_frontend.syntax_style = syntax_style @@ -809,7 +810,18 @@ self.active_frontend._syntax_style_changed() self.active_frontend._style_sheet_changed() self.active_frontend.reset(clear=True) - self.active_frontend._execute("%colors linux", True) + self.active_frontend._execute( +f""" +from IPython.core.ultratb import VerboseTB +if getattr(VerboseTB, 'tb_highlight_style', None) is not None: + VerboseTB.tb_highlight_style = '{syntax_style}' +elif getattr(VerboseTB, '_tb_highlight_style', None) is not None: + VerboseTB._tb_highlight_style = '{syntax_style}' +else: + get_ipython().run_line_magic('colors', '{colors}') +""", + True) + def close_active_frontend(self): self.close_tab(self.active_frontend) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/tests/test_00_console_widget.py new/qtconsole-5.6.0/qtconsole/tests/test_00_console_widget.py --- old/qtconsole-5.5.2/qtconsole/tests/test_00_console_widget.py 2023-03-28 23:52:03.000000000 +0200 +++ new/qtconsole-5.6.0/qtconsole/tests/test_00_console_widget.py 2024-08-28 20:01:04.000000000 +0200 @@ -371,6 +371,44 @@ # clear all the text cursor.insertText('') + def test_print_carriage_return(self): + """ Test that overwriting the current line works as intended, + before and after the cursor prompt. + """ + w = ConsoleWidget() + + # Show a prompt + w._prompt = "prompt>" + w._prompt_sep = "\n" + + w._show_prompt() + self.assert_text_equal(w._get_cursor(), '\u2029prompt>') + + test_inputs = ['Hello\n', 'World\r', + '*' * 10, '\r', + '0', '1', '2', '3', '4', + '5', '6', '7', '8', '9', + '\r\n'] + + for text in test_inputs: + w._append_plain_text(text, before_prompt=True) + w._flush_pending_stream() # emulate text being flushed + + self.assert_text_equal(w._get_cursor(), + "Hello\u20290123456789\u2029\u2029prompt>") + + # Print after prompt + w._executing = True + test_inputs = ['\nF', 'o', 'o', + '\r', 'Bar', '\n'] + + for text in test_inputs: + w._append_plain_text(text, before_prompt=False) + w._flush_pending_stream() # emulate text being flushed + + self.assert_text_equal(w._get_cursor(), + "Hello\u20290123456789\u2029\u2029prompt>\u2029Bar\u2029") + def test_link_handling(self): noButton = QtCore.Qt.NoButton noButtons = QtCore.Qt.NoButton diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/tests/test_ansi_code_processor.py new/qtconsole-5.6.0/qtconsole/tests/test_ansi_code_processor.py --- old/qtconsole-5.5.2/qtconsole/tests/test_ansi_code_processor.py 2021-11-14 19:48:23.000000000 +0100 +++ new/qtconsole-5.6.0/qtconsole/tests/test_ansi_code_processor.py 2024-08-28 20:01:04.000000000 +0200 @@ -2,13 +2,14 @@ import unittest # Local imports -from qtconsole.ansi_code_processor import AnsiCodeProcessor +from qtconsole.ansi_code_processor import AnsiCodeProcessor, QtAnsiCodeProcessor class TestAnsiCodeProcessor(unittest.TestCase): def setUp(self): self.processor = AnsiCodeProcessor() + self.qt_processor = QtAnsiCodeProcessor() def test_clear(self): """ Do control sequences for clearing the console work? @@ -37,7 +38,7 @@ def test_colors(self): """ Do basic controls sequences for colors work? """ - string = 'first\x1b[34mblue\x1b[0mlast' + string = 'first\x1b[34mblue\x1b[0mlast\033[33mYellow' i = -1 for i, substring in enumerate(self.processor.split_string(string)): if i == 0: @@ -49,9 +50,14 @@ elif i == 2: self.assertEqual(substring, 'last') self.assertEqual(self.processor.foreground_color, None) + elif i == 3: + foreground_color = self.processor.foreground_color + self.assertEqual(substring, 'Yellow') + self.assertEqual(foreground_color, 3) + self.assertEqual(self.qt_processor.get_color(foreground_color).name(), '#ffd700') else: self.fail('Too many substrings.') - self.assertEqual(i, 2, 'Too few substrings.') + self.assertEqual(i, 3, 'Too few substrings.') def test_colors_xterm(self): """ Do xterm-specific control sequences for colors work? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/tests/test_comms.py new/qtconsole-5.6.0/qtconsole/tests/test_comms.py --- old/qtconsole-5.5.2/qtconsole/tests/test_comms.py 2024-05-05 17:45:27.000000000 +0200 +++ new/qtconsole-5.6.0/qtconsole/tests/test_comms.py 2024-08-28 20:01:04.000000000 +0200 @@ -1,3 +1,4 @@ +import os import time from queue import Empty import unittest @@ -11,6 +12,9 @@ def setUp(self): """Open a kernel.""" + # Prevent tests assertions related with message type from failing + # due to a debug warning + os.environ['PYDEVD_DISABLE_FILE_VALIDATION'] = '1' self.kernel_manager = QtKernelManager() self.kernel_manager.start_kernel() self.kernel_client = self.kernel_manager.client() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole/tests/test_jupyter_widget.py new/qtconsole-5.6.0/qtconsole/tests/test_jupyter_widget.py --- old/qtconsole-5.5.2/qtconsole/tests/test_jupyter_widget.py 2023-03-07 01:10:49.000000000 +0100 +++ new/qtconsole-5.6.0/qtconsole/tests/test_jupyter_widget.py 2024-08-28 20:01:04.000000000 +0200 @@ -36,9 +36,15 @@ # By default, the background is light. White text is rendered as black self.assertEqual(w._ansi_processor.get_color(15).name(), '#000000') + # Color code 40 + self.assertEqual(w._ansi_processor.get_color(40).name(), '#00d700') + # Change to a dark colorscheme. White text is rendered as white w.syntax_style = 'monokai' self.assertEqual(w._ansi_processor.get_color(15).name(), '#ffffff') + + # Color code 40 with monokai + self.assertEqual(w._ansi_processor.get_color(40).name(), '#00d700') @pytest.mark.skipif(not sys.platform.startswith('linux'), reason="Works only on Linux") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole.egg-info/PKG-INFO new/qtconsole-5.6.0/qtconsole.egg-info/PKG-INFO --- old/qtconsole-5.5.2/qtconsole.egg-info/PKG-INFO 2024-05-05 17:55:09.000000000 +0200 +++ new/qtconsole-5.6.0/qtconsole.egg-info/PKG-INFO 2024-08-28 20:20:33.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: qtconsole -Version: 5.5.2 +Version: 5.6.0 Summary: Jupyter Qt console Home-page: http://jupyter.org Author: Jupyter Development Team @@ -31,7 +31,6 @@ Requires-Dist: pygments Requires-Dist: ipykernel>=4.1 Requires-Dist: qtpy>=2.4.0 -Requires-Dist: pyzmq>=17.1 Requires-Dist: packaging Provides-Extra: test Requires-Dist: flaky; extra == "test" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/qtconsole.egg-info/requires.txt new/qtconsole-5.6.0/qtconsole.egg-info/requires.txt --- old/qtconsole-5.5.2/qtconsole.egg-info/requires.txt 2024-05-05 17:55:09.000000000 +0200 +++ new/qtconsole-5.6.0/qtconsole.egg-info/requires.txt 2024-08-28 20:20:33.000000000 +0200 @@ -4,7 +4,6 @@ pygments ipykernel>=4.1 qtpy>=2.4.0 -pyzmq>=17.1 packaging [doc] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/requirements/environment.yml new/qtconsole-5.6.0/requirements/environment.yml --- old/qtconsole-5.5.2/requirements/environment.yml 2023-10-19 16:46:51.000000000 +0200 +++ new/qtconsole-5.6.0/requirements/environment.yml 2024-08-28 20:01:04.000000000 +0200 @@ -9,7 +9,6 @@ - jupyter_client - pygments - ipykernel -- pyzmq >=17.1 # For testing - coveralls diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconsole-5.5.2/setup.py new/qtconsole-5.6.0/setup.py --- old/qtconsole-5.5.2/setup.py 2023-10-19 17:09:05.000000000 +0200 +++ new/qtconsole-5.6.0/setup.py 2024-08-28 20:01:04.000000000 +0200 @@ -71,7 +71,6 @@ 'pygments', 'ipykernel>=4.1', # not a real dependency, but require the reference kernel 'qtpy>=2.4.0', - 'pyzmq>=17.1', 'packaging' ], extras_require = {