Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-ipython for openSUSE:Factory 
checked in at 2023-06-12 15:24:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ipython (Old)
 and      /work/SRC/openSUSE:Factory/.python-ipython.new.15902 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-ipython"

Mon Jun 12 15:24:59 2023 rev:41 rq:1092420 version:8.14.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ipython/python-ipython.changes    
2023-06-04 16:41:34.885765147 +0200
+++ /work/SRC/openSUSE:Factory/.python-ipython.new.15902/python-ipython.changes 
2023-06-12 15:25:26.470693391 +0200
@@ -1,0 +2,46 @@
+Sun Jun 11 19:44:22 UTC 2023 - Ben Greiner <c...@bnavigator.de>
+
+- Update to 8.14.0
+  * PR #14080 fixes some shortcuts issues.
+  * PR #14056 Add option to %autoreload to hide errors when
+    reloading code.
+  * PR #14039 (and PR #14040) to show exception notes in
+    tracebacks.
+  * PR #14076 Add option to EventManager to prevent printing
+  ## SPEC 0 and SPEC 4
+  * You’ve heard about the NEPs, (NumPy enhancement Proposal),
+    having a NEP for something non-numpy specific was sometime
+    confusing. Long live the SPECs.
+  * We are now trying to follow SPEC 0 (aka old NEP 29) for of
+    support of upstream libraries.
+  * We also now try to follow SPEC 4 (test and publish nightly on a
+    centralized nightly repository). We encourage you to do so as
+    well in order to report breakage, and contribute to the SPEC
+    process !
+  ## Python 3.12 compatibility ?
+  * Python 3.12 changed its tokenizer to have better support for
+    f-strings and allow arbitrary expression. This is a great new
+    feature and performance improvement in python 3.12.
+  * Unfortunately this means the new tokenizer does not support
+    incomplete or invalid Python which will break many features of
+    IPython. Thus compatibility of IPython with Python 3.12 is not
+    guarantied. It is unclear to which extent IPython is affected,
+    and whether we can/should try to still support magics, shell
+    escape (! ....), …, as well as how to do it if we can.
+  * In addition even if we there is technical feasibility to do so,
+    it is no clear we have the resources to do it. We are thus
+    looking for your help if you can _test_ on Python 3.12 to see
+    to which extent this affects users and which features are
+    critical.
+  * We are not going to pin IPython to Python <3.12 as otherwise on
+    install pip would downgrade/resolve to IPython 8.13, so if you
+    plan to update to Python 3.12 after its release, we encourage
+    for extra care.
+- Skip potential future python312 because of the above
+
+-------------------------------------------------------------------
+Sat Jun 10 12:18:34 UTC 2023 - ecsos <ec...@opensuse.org>
+
+- Add %{?sle15_python_module_pythons}
+
+-------------------------------------------------------------------

Old:
----
  ipython-8.13.2.tar.gz

New:
----
  ipython-8.14.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-ipython.spec ++++++
--- /var/tmp/diff_new_pack.asjCpY/_old  2023-06-12 15:25:27.826701413 +0200
+++ /var/tmp/diff_new_pack.asjCpY/_new  2023-06-12 15:25:27.834701461 +0200
@@ -31,8 +31,11 @@
 %endif
 # extra tests are skipped automatically, don't require these packages for Ring1
 %bcond_with localtest
+%{?sle15_python_module_pythons}
+# See whatsnew of 8.14
+%define skip_python312 1
 Name:           python-ipython%{psuffix}
-Version:        8.13.2
+Version:        8.14.0
 Release:        0
 Summary:        Rich architecture for interactive computing with Python
 License:        BSD-3-Clause


++++++ ipython-8.13.2.tar.gz -> ipython-8.14.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/IPython/core/events.py 
new/ipython-8.14.0/IPython/core/events.py
--- old/ipython-8.13.2/IPython/core/events.py   2023-04-18 14:28:39.000000000 
+0200
+++ new/ipython-8.14.0/IPython/core/events.py   2023-06-02 15:24:47.000000000 
+0200
@@ -26,7 +26,8 @@
 
        This API is experimental in IPython 2.0, and may be revised in future 
versions.
     """
-    def __init__(self, shell, available_events):
+
+    def __init__(self, shell, available_events, print_on_error=True):
         """Initialise the :class:`CallbackManager`.
 
         Parameters
@@ -35,9 +36,12 @@
             The :class:`~IPython.core.interactiveshell.InteractiveShell` 
instance
         available_events
             An iterable of names for callback events.
+        print_on_error:
+            A boolean flag to set whether the EventManager will print a 
warning which a event errors.
         """
         self.shell = shell
         self.callbacks = {n:[] for n in available_events}
+        self.print_on_error = print_on_error
     
     def register(self, event, function):
         """Register a new event callback.
@@ -88,7 +92,8 @@
             try:
                 func(*args, **kwargs)
             except (Exception, KeyboardInterrupt):
-                print("Error in callback {} (for {}):".format(func, event))
+                if self.print_on_error:
+                    print("Error in callback {} (for {}):".format(func, event))
                 self.shell.showtraceback()
 
 # event_name -> prototype mapping
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/IPython/core/guarded_eval.py 
new/ipython-8.14.0/IPython/core/guarded_eval.py
--- old/ipython-8.13.2/IPython/core/guarded_eval.py     2023-05-04 
14:41:43.000000000 +0200
+++ new/ipython-8.14.0/IPython/core/guarded_eval.py     2023-06-02 
15:24:47.000000000 +0200
@@ -18,6 +18,7 @@
 import sys
 from functools import cached_property
 from dataclasses import dataclass, field
+from types import MethodDescriptorType, ModuleType
 
 from IPython.utils.docs import GENERATING_DOCUMENTATION
 from IPython.utils.decorators import undoc
@@ -630,8 +631,6 @@
 
 
 dict_keys: Type[collections.abc.KeysView] = type({}.keys())
-method_descriptor: Any = type(list.copy)
-module = type(builtins)
 
 NUMERICS = {int, float, complex}
 
@@ -680,8 +679,8 @@
     type,  # `type` handles a lot of generic cases, e.g. numbers as in 
`int.real`.
     *NUMERICS,
     dict_keys,
-    method_descriptor,
-    module,
+    MethodDescriptorType,
+    ModuleType,
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/IPython/core/release.py 
new/ipython-8.14.0/IPython/core/release.py
--- old/ipython-8.13.2/IPython/core/release.py  2023-05-04 14:43:01.000000000 
+0200
+++ new/ipython-8.14.0/IPython/core/release.py  2023-06-02 16:08:33.000000000 
+0200
@@ -16,8 +16,8 @@
 # release.  'dev' as a _version_extra string means this is a development
 # version
 _version_major = 8
-_version_minor = 13
-_version_patch = 2
+_version_minor = 14
+_version_patch = 0
 _version_extra = ".dev"
 # _version_extra = "rc1"
 _version_extra = ""  # Uncomment this for full releases
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/IPython/core/tests/test_ultratb.py 
new/ipython-8.14.0/IPython/core/tests/test_ultratb.py
--- old/ipython-8.13.2/IPython/core/tests/test_ultratb.py       2023-05-04 
14:41:43.000000000 +0200
+++ new/ipython-8.14.0/IPython/core/tests/test_ultratb.py       2023-06-02 
15:24:47.000000000 +0200
@@ -51,24 +51,24 @@
 class ChangedPyFileTest(unittest.TestCase):
     def test_changing_py_file(self):
         """Traceback produced if the line where the error occurred is missing?
-        
+
         https://github.com/ipython/ipython/issues/1456
         """
         with TemporaryDirectory() as td:
             fname = os.path.join(td, "foo.py")
             with open(fname, "w", encoding="utf-8") as f:
                 f.write(file_1)
-            
+
             with prepended_to_syspath(td):
                 ip.run_cell("import foo")
-            
+
             with tt.AssertPrints("ZeroDivisionError"):
                 ip.run_cell("foo.f()")
-            
+
             # Make the file shorter, so the line of the error is missing.
             with open(fname, "w", encoding="utf-8") as f:
                 f.write(file_2)
-            
+
             # For some reason, this was failing on the *second* call after
             # changing the file, so we call f() twice.
             with tt.AssertNotPrints("Internal Python error", channel='stderr'):
@@ -92,27 +92,27 @@
             fname = os.path.join(td, u"fooé.py")
             with open(fname, "w", encoding="utf-8") as f:
                 f.write(file_1)
-            
+
             with prepended_to_syspath(td):
                 ip.run_cell("import foo")
-            
+
             with tt.AssertPrints("ZeroDivisionError"):
                 ip.run_cell("foo.f()")
-    
+
     def test_iso8859_5(self):
         with TemporaryDirectory() as td:
             fname = os.path.join(td, 'dfghjkl.py')
 
             with io.open(fname, 'w', encoding='iso-8859-5') as f:
                 f.write(iso_8859_5_file)
-            
+
             with prepended_to_syspath(td):
                 ip.run_cell("from dfghjkl import fail")
-            
+
             with tt.AssertPrints("ZeroDivisionError"):
                 with tt.AssertPrints(u'дбИЖ', suppress=False):
                     ip.run_cell('fail()')
-    
+
     def test_nonascii_msg(self):
         cell = u"raise Exception('é')"
         expected = u"Exception('é')"
@@ -167,12 +167,12 @@
         with tt.AssertPrints("IndentationError"):
             with tt.AssertPrints("zoon()", suppress=False):
                 ip.run_cell(indentationerror_file)
-        
+
         with TemporaryDirectory() as td:
             fname = os.path.join(td, "foo.py")
             with open(fname, "w", encoding="utf-8") as f:
                 f.write(indentationerror_file)
-            
+
             with tt.AssertPrints("IndentationError"):
                 with tt.AssertPrints("zoon()", suppress=False):
                     ip.magic('run %s' % fname)
@@ -363,6 +363,29 @@
             ip.run_cell("r3o2()")
 
 
+class PEP678NotesReportingTest(unittest.TestCase):
+    ERROR_WITH_NOTE = """
+try:
+    raise AssertionError("Message")
+except Exception as e:
+    try:
+        e.add_note("This is a PEP-678 note.")
+    except AttributeError:  # Python <= 3.10
+        e.__notes__ = ("This is a PEP-678 note.",)
+    raise
+    """
+
+    def test_verbose_reports_notes(self):
+        with tt.AssertPrints(["AssertionError", "Message", "This is a PEP-678 
note."]):
+            ip.run_cell(self.ERROR_WITH_NOTE)
+
+    def test_plain_reports_notes(self):
+        with tt.AssertPrints(["AssertionError", "Message", "This is a PEP-678 
note."]):
+            ip.run_cell("%xmode Plain")
+            ip.run_cell(self.ERROR_WITH_NOTE)
+            ip.run_cell("%xmode Verbose")
+
+
 #----------------------------------------------------------------------------
 
 # module testing (minimal)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/IPython/core/ultratb.py 
new/ipython-8.14.0/IPython/core/ultratb.py
--- old/ipython-8.13.2/IPython/core/ultratb.py  2023-04-28 11:49:16.000000000 
+0200
+++ new/ipython-8.14.0/IPython/core/ultratb.py  2023-06-02 15:24:47.000000000 
+0200
@@ -89,6 +89,7 @@
 #*****************************************************************************
 
 
+from collections.abc import Sequence
 import functools
 import inspect
 import linecache
@@ -183,6 +184,14 @@
     return count_lines_in_py_file(filename)
 
 
+def _safe_string(value, what, func=str):
+    # Copied from cpython/Lib/traceback.py
+    try:
+        return func(value)
+    except:
+        return f"<{what} {func.__name__}() failed>"
+
+
 def _format_traceback_lines(lines, Colors, has_colors: bool, lvals):
     """
     Format tracebacks lines with pointing arrow, leading numbers...
@@ -582,7 +591,7 @@
         """
 
         Colors = self.Colors
-        list = []
+        output_list = []
         for ind, (filename, lineno, name, line) in enumerate(extracted_list):
             normalCol, nameCol, fileCol, lineCol = (
                 # Emphasize the last entry
@@ -600,9 +609,9 @@
                 item += "\n"
             if line:
                 item += f"{lineCol}    {line.strip()}{normalCol}\n"
-            list.append(item)
+            output_list.append(item)
 
-        return list
+        return output_list
 
     def _format_exception_only(self, etype, value):
         """Format the exception part of a traceback.
@@ -619,11 +628,11 @@
         """
         have_filedata = False
         Colors = self.Colors
-        list = []
+        output_list = []
         stype = py3compat.cast_unicode(Colors.excName + etype.__name__ + 
Colors.Normal)
         if value is None:
             # Not sure if this can still happen in Python 2.6 and above
-            list.append(stype + '\n')
+            output_list.append(stype + "\n")
         else:
             if issubclass(etype, SyntaxError):
                 have_filedata = True
@@ -634,7 +643,7 @@
                 else:
                     lineno = "unknown"
                     textline = ""
-                list.append(
+                output_list.append(
                     "%s  %s%s\n"
                     % (
                         Colors.normalEm,
@@ -654,28 +663,33 @@
                     i = 0
                     while i < len(textline) and textline[i].isspace():
                         i += 1
-                    list.append('%s    %s%s\n' % (Colors.line,
-                                                  textline.strip(),
-                                                  Colors.Normal))
+                    output_list.append(
+                        "%s    %s%s\n" % (Colors.line, textline.strip(), 
Colors.Normal)
+                    )
                     if value.offset is not None:
                         s = '    '
                         for c in textline[i:value.offset - 1]:
                             if c.isspace():
                                 s += c
                             else:
-                                s += ' '
-                        list.append('%s%s^%s\n' % (Colors.caret, s,
-                                                   Colors.Normal))
+                                s += " "
+                        output_list.append(
+                            "%s%s^%s\n" % (Colors.caret, s, Colors.Normal)
+                        )
 
             try:
                 s = value.msg
             except Exception:
                 s = self._some_str(value)
             if s:
-                list.append('%s%s:%s %s\n' % (stype, Colors.excName,
-                                              Colors.Normal, s))
+                output_list.append(
+                    "%s%s:%s %s\n" % (stype, Colors.excName, Colors.Normal, s)
+                )
             else:
-                list.append('%s\n' % stype)
+                output_list.append("%s\n" % stype)
+
+            # PEP-678 notes
+            output_list.extend(f"{x}\n" for x in getattr(value, "__notes__", 
[]))
 
         # sync with user hooks
         if have_filedata:
@@ -683,7 +697,7 @@
             if ipinst is not None:
                 ipinst.hooks.synchronize_with_editor(value.filename, 
value.lineno, 0)
 
-        return list
+        return output_list
 
     def get_exception_only(self, etype, value):
         """Only print the exception type and message, without a traceback.
@@ -999,9 +1013,27 @@
             # User exception is improperly defined.
             etype, evalue = str, sys.exc_info()[:2]
             etype_str, evalue_str = map(str, (etype, evalue))
+
+        # PEP-678 notes
+        notes = getattr(evalue, "__notes__", [])
+        if not isinstance(notes, Sequence) or isinstance(notes, (str, bytes)):
+            notes = [_safe_string(notes, "__notes__", func=repr)]
+
         # ... and format it
-        return ['%s%s%s: %s' % (colors.excName, etype_str,
-                                colorsnormal, 
py3compat.cast_unicode(evalue_str))]
+        return [
+            "{}{}{}: {}".format(
+                colors.excName,
+                etype_str,
+                colorsnormal,
+                py3compat.cast_unicode(evalue_str),
+            ),
+            *(
+                "{}{}".format(
+                    colorsnormal, _safe_string(py3compat.cast_unicode(n), 
"note")
+                )
+                for n in notes
+            ),
+        ]
 
     def format_exception_as_a_whole(
         self,
@@ -1068,7 +1100,7 @@
             if ipinst is not None:
                 ipinst.hooks.synchronize_with_editor(frame_info.filename, 
frame_info.lineno, 0)
 
-        return [[head] + frames + [''.join(formatted_exception[0])]]
+        return [[head] + frames + formatted_exception]
 
     def get_records(
         self, etb: TracebackType, number_of_lines_of_context: int, tb_offset: 
int
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/IPython/extensions/autoreload.py 
new/ipython-8.14.0/IPython/extensions/autoreload.py
--- old/ipython-8.13.2/IPython/extensions/autoreload.py 2023-04-18 
14:04:54.000000000 +0200
+++ new/ipython-8.14.0/IPython/extensions/autoreload.py 2023-06-02 
15:24:47.000000000 +0200
@@ -170,6 +170,9 @@
         # Cache module modification times
         self.check(check_all=True, do_reload=False)
 
+        # To hide autoreload errors
+        self.hide_errors = False
+
     def mark_module_skipped(self, module_name):
         """Skip reloading the named module in the future"""
         try:
@@ -274,12 +277,13 @@
                     if py_filename in self.failed:
                         del self.failed[py_filename]
                 except:
-                    print(
-                        "[autoreload of {} failed: {}]".format(
-                            modname, traceback.format_exc(10)
-                        ),
-                        file=sys.stderr,
-                    )
+                    if not self.hide_errors:
+                        print(
+                            "[autoreload of {} failed: {}]".format(
+                                modname, traceback.format_exc(10)
+                            ),
+                            file=sys.stderr,
+                        )
                     self.failed[py_filename] = pymtime
 
 
@@ -553,6 +557,12 @@
         default=False,
         help="Show autoreload activity using the logger",
     )
+    @magic_arguments.argument(
+        "--hide-errors",
+        action="store_true",
+        default=False,
+        help="Hide autoreload errors",
+    )
     def autoreload(self, line=""):
         r"""%autoreload => Reload modules automatically
 
@@ -579,6 +589,9 @@
         is to act silently; --print (or -p) will print out the names of 
modules that are being
         reloaded, and --log (or -l) outputs them to the log at INFO level.
 
+        The optional argument --hide-errors hides any errors that can happen 
when trying to
+        reload code.
+
         Reloading Python modules in a reliable way is in general
         difficult, and unexpected things may occur. %autoreload tries to
         work around common pitfalls by replacing function code objects and
@@ -628,6 +641,8 @@
         elif args.log is True:
             self._reloader._report = l
 
+        self._reloader.hide_errors = args.hide_errors
+
         if mode == "" or mode == "now":
             self._reloader.check(True)
         elif mode == "0" or mode == "off":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ipython-8.13.2/IPython/terminal/shortcuts/__init__.py 
new/ipython-8.14.0/IPython/terminal/shortcuts/__init__.py
--- old/ipython-8.13.2/IPython/terminal/shortcuts/__init__.py   2023-05-04 
14:41:48.000000000 +0200
+++ new/ipython-8.14.0/IPython/terminal/shortcuts/__init__.py   2023-06-02 
15:24:47.000000000 +0200
@@ -279,7 +279,8 @@
         ["right"],
         "is_cursor_at_the_end_of_line"
         " & default_buffer_focused"
-        " & emacs_like_insert_mode",
+        " & emacs_like_insert_mode"
+        " & pass_through",
     ),
 ]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ipython-8.13.2/IPython/terminal/shortcuts/auto_suggest.py 
new/ipython-8.14.0/IPython/terminal/shortcuts/auto_suggest.py
--- old/ipython-8.13.2/IPython/terminal/shortcuts/auto_suggest.py       
2023-04-21 11:31:59.000000000 +0200
+++ new/ipython-8.14.0/IPython/terminal/shortcuts/auto_suggest.py       
2023-06-02 15:24:47.000000000 +0200
@@ -20,6 +20,8 @@
 from IPython.core.getipython import get_ipython
 from IPython.utils.tokenutil import generate_tokens
 
+from .filters import pass_through
+
 
 def _get_query(document: Document):
     return document.lines[document.cursor_position_row]
@@ -267,7 +269,10 @@
 
 def resume_hinting(event: KeyPressEvent):
     """Resume autosuggestions"""
-    return _update_hint(event.current_buffer)
+    pass_through.reply(event)
+    # Order matters: if update happened first and event reply second, the
+    # suggestion would be auto-accepted if both actions are bound to same key.
+    _update_hint(event.current_buffer)
 
 
 def up_and_update_hint(event: KeyPressEvent):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/IPython/terminal/shortcuts/filters.py 
new/ipython-8.14.0/IPython/terminal/shortcuts/filters.py
--- old/ipython-8.13.2/IPython/terminal/shortcuts/filters.py    2023-05-04 
14:41:48.000000000 +0200
+++ new/ipython-8.14.0/IPython/terminal/shortcuts/filters.py    2023-06-02 
15:24:47.000000000 +0200
@@ -13,7 +13,8 @@
 
 from prompt_toolkit.application.current import get_app
 from prompt_toolkit.enums import DEFAULT_BUFFER, SEARCH_BUFFER
-from prompt_toolkit.filters import Condition, emacs_insert_mode, 
has_completions
+from prompt_toolkit.key_binding import KeyPressEvent
+from prompt_toolkit.filters import Condition, Filter, emacs_insert_mode, 
has_completions
 from prompt_toolkit.filters import has_focus as has_focus_impl
 from prompt_toolkit.filters import (
     Always,
@@ -175,6 +176,36 @@
     return sys.platform == "win32"
 
 
+class PassThrough(Filter):
+    """A filter allowing to implement pass-through behaviour of keybindings.
+
+    Prompt toolkit key processor dispatches only one event per binding match,
+    which means that adding a new shortcut will suppress the old shortcut
+    if the keybindings are the same (unless one is filtered out).
+
+    To stop a shortcut binding from suppressing other shortcuts:
+    - add the `pass_through` filter to list of filter, and
+    - call `pass_through.reply(event)` in the shortcut handler.
+    """
+
+    def __init__(self):
+        self._is_replying = False
+
+    def reply(self, event: KeyPressEvent):
+        self._is_replying = True
+        try:
+            event.key_processor.reset()
+            event.key_processor.feed_multiple(event.key_sequence)
+            event.key_processor.process_keys()
+        finally:
+            self._is_replying = False
+
+    def __call__(self):
+        return not self._is_replying
+
+
+pass_through = PassThrough()
+
 # these one is callable and re-used multiple times hence needs to be
 # only defined once beforhand so that transforming back to human-readable
 # names works well in the documentation.
@@ -248,6 +279,7 @@
     "followed_by_single_quote": following_text("^'"),
     "navigable_suggestions": navigable_suggestions,
     "cursor_in_leading_ws": cursor_in_leading_ws,
+    "pass_through": pass_through,
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/IPython/utils/_sysinfo.py 
new/ipython-8.14.0/IPython/utils/_sysinfo.py
--- old/ipython-8.13.2/IPython/utils/_sysinfo.py        2023-05-04 
14:43:01.000000000 +0200
+++ new/ipython-8.14.0/IPython/utils/_sysinfo.py        2023-06-02 
16:08:33.000000000 +0200
@@ -1,2 +1,2 @@
 # GENERATED BY setup.py
-commit = "2c4c28a3a"
+commit = "f11276427"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/PKG-INFO new/ipython-8.14.0/PKG-INFO
--- old/ipython-8.13.2/PKG-INFO 2023-05-04 14:43:01.000000000 +0200
+++ new/ipython-8.14.0/PKG-INFO 2023-06-02 16:08:33.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: ipython
-Version: 8.13.2
+Version: 8.14.0
 Summary: IPython: Productive Interactive Computing
 Home-page: https://ipython.org
 Author: The IPython Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/docs/autogen_shortcuts.py 
new/ipython-8.14.0/docs/autogen_shortcuts.py
--- old/ipython-8.13.2/docs/autogen_shortcuts.py        2023-04-18 
14:04:54.000000000 +0200
+++ new/ipython-8.14.0/docs/autogen_shortcuts.py        2023-06-02 
15:24:47.000000000 +0200
@@ -88,6 +88,8 @@
         return result
     elif s in ["Never", "Always"]:
         return s.lower()
+    elif s == "PassThrough":
+        return "pass_through"
     else:
         raise ValueError(f"Unknown filter type: {filter_}")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ipython-8.13.2/docs/source/whatsnew/pr/pep678-notes.rst 
new/ipython-8.14.0/docs/source/whatsnew/pr/pep678-notes.rst
--- old/ipython-8.13.2/docs/source/whatsnew/pr/pep678-notes.rst 1970-01-01 
01:00:00.000000000 +0100
+++ new/ipython-8.14.0/docs/source/whatsnew/pr/pep678-notes.rst 2023-06-02 
15:24:47.000000000 +0200
@@ -0,0 +1,5 @@
+Support for PEP-678 Exception Notes
+-----------------------------------
+
+Ultratb now shows :pep:`678` notes, improving your debugging experience on
+Python 3.11+ or with libraries such as Pytest and Hypothesis.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/docs/source/whatsnew/version8.rst 
new/ipython-8.14.0/docs/source/whatsnew/version8.rst
--- old/ipython-8.13.2/docs/source/whatsnew/version8.rst        2023-05-04 
14:41:43.000000000 +0200
+++ new/ipython-8.14.0/docs/source/whatsnew/version8.rst        2023-06-02 
15:43:57.000000000 +0200
@@ -1,6 +1,51 @@
 ============
  8.x Series
 ============
+.. _version 8.14:
+
+IPython 8.14
+------------
+
+Small release of IPython.
+
+ - :ghpull:`14080` fixes some shortcuts issues.
+ - :ghpull:`14056` Add option to ``%autoreload`` to hide errors when reloading 
code. This will be the default for spyder
+   user is my understanding.
+ - :ghpull:`14039` (and :ghpull:`14040`) to show exception notes in tracebacks.
+
+ - :ghpull:`14076` Add option to EventManager to prevent printing
+
+
+SPEC 0 and SPEC 4
+~~~~~~~~~~~~~~~~~
+
+You've heard about the NEPs, (NumPy enhancement Proposal), having a NEP for 
something non-numpy specific was sometime confusing.
+Long live the `SPECs <https://scientific-python.org/specs/>`_.
+
+We are now trying to follow SPEC 0 (aka old NEP 29) for of support of upstream 
libraries.
+
+We also now try to follow SPEC 4 (test and publish nightly on a centralized 
nightly repository).
+We encourage you to do so as well in order to report breakage, and contribute 
to the SPEC process !
+
+
+Python 3.12 compatibility ?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Python 3.12 changed its tokenizer to have better support for f-strings and 
allow arbitrary expression.
+This is a great new feature and performance improvement in python 3.12.
+
+Unfortunately this means the new tokenizer does not support incomplete or 
invalid Python which will
+break many features of IPython. Thus compatibility of IPython with Python 3.12 
is not guarantied.
+It is unclear to which extent IPython is affected, and whether we can/should 
try to still support magics, shell
+escape (``! ....``), ...,  as well as how to do it if we can.
+
+In addition even if we there is technical feasibility to do so, it is no clear 
we have the resources to do it.
+We are thus looking for your help if you can _test_ on Python 3.12 to see to 
which extent this affects users and which
+features are critical.
+
+We are not going to pin IPython to Python ``<3.12`` as otherwise on install 
pip would downgrade/resolve to IPython 8.13,
+so if you plan to update to Python 3.12 after its release, we encourage for 
extra care.
+
 
 .. _version 8.13.1:
 .. _version 8.13.2:
@@ -10,12 +55,12 @@
 ---------------------------------
 
 3 quick in succession patch release of IPython in addition to IPython 8.13.0
-having been yanked. 
+having been yanked.
 
 IPython 8.13.0 was improperly tagged as still compatible with Python 3.8, and
 still had some mention of compatibility woth 3.8. IPython 8.13.1 is identical 
to
 8.13 but with the exception of being correctly tagged. This release and yank 
was
-mostly done to fix CI. 
+mostly done to fix CI.
 
 IPython 8.12.2 and 8.13.2 contain UI fixes, with respect to right arrow not
 working in some case in the terminal, and 8.12.2 contain also a requested
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/ipython.egg-info/PKG-INFO 
new/ipython-8.14.0/ipython.egg-info/PKG-INFO
--- old/ipython-8.13.2/ipython.egg-info/PKG-INFO        2023-05-04 
14:43:01.000000000 +0200
+++ new/ipython-8.14.0/ipython.egg-info/PKG-INFO        2023-06-02 
16:08:33.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: ipython
-Version: 8.13.2
+Version: 8.14.0
 Summary: IPython: Productive Interactive Computing
 Home-page: https://ipython.org
 Author: The IPython Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ipython-8.13.2/ipython.egg-info/SOURCES.txt 
new/ipython-8.14.0/ipython.egg-info/SOURCES.txt
--- old/ipython-8.13.2/ipython.egg-info/SOURCES.txt     2023-05-04 
14:43:01.000000000 +0200
+++ new/ipython-8.14.0/ipython.egg-info/SOURCES.txt     2023-06-02 
16:08:33.000000000 +0200
@@ -433,6 +433,7 @@
 docs/source/whatsnew/pr/README.md
 docs/source/whatsnew/pr/antigravity-feature.rst
 docs/source/whatsnew/pr/incompat-switching-to-perl.rst
+docs/source/whatsnew/pr/pep678-notes.rst
 docs/sphinxext/apigen.py
 docs/sphinxext/configtraits.py
 docs/sphinxext/github.py

Reply via email to