Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-spyder-kernels for 
openSUSE:Factory checked in at 2021-02-23 20:21:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-spyder-kernels (Old)
 and      /work/SRC/openSUSE:Factory/.python-spyder-kernels.new.2378 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-spyder-kernels"

Tue Feb 23 20:21:31 2021 rev:21 rq:874444 version:1.10.2

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-spyder-kernels/python-spyder-kernels.changes  
    2021-02-15 23:23:01.975999149 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-spyder-kernels.new.2378/python-spyder-kernels.changes
    2021-02-23 20:23:05.543798265 +0100
@@ -1,0 +2,11 @@
+Mon Feb 22 17:55:31 UTC 2021 - Ben Greiner <c...@bnavigator.de>
+
+- Update to version 1.10.2
+  * Warn when comm call creates text output, by @impact27
+  * Increase minimal required version of ipykernel, by @ccordoba12
+  * Better test for non-interactive context, by @juliangilbey
+  * Fix assignment detection in exclamation mark mode (Pdb), by
+    @impact27
+  * Fix recursive debugger, by @impact27
+
+-------------------------------------------------------------------

Old:
----
  python-spyder-kernels-1.10.1.tar.gz

New:
----
  python-spyder-kernels-1.10.2.tar.gz

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

Other differences:
------------------
++++++ python-spyder-kernels.spec ++++++
--- /var/tmp/diff_new_pack.QCZGC7/_old  2021-02-23 20:23:06.107798764 +0100
+++ /var/tmp/diff_new_pack.QCZGC7/_new  2021-02-23 20:23:06.111798767 +0100
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-spyder-kernels
-Version:        1.10.1
+Version:        1.10.2
 Release:        0
 Summary:        Jupyter kernels for Spyder's console
 License:        MIT
@@ -37,7 +37,7 @@
 BuildRequires:  %{python_module cloudpickle}
 BuildRequires:  %{python_module dask-distributed}
 BuildRequires:  %{python_module flaky}
-BuildRequires:  %{python_module ipykernel >= 5.1.3}
+BuildRequires:  %{python_module ipykernel >= 5.3.0}
 BuildRequires:  %{python_module ipython >= 7.6.0}
 BuildRequires:  %{python_module jupyter_client >= 5.3.4}
 BuildRequires:  %{python_module pytest}
@@ -50,7 +50,7 @@
 BuildRequires:  %{python_module xarray if (%python-base without python36-base)}
 # /SECTION
 Requires:       python-cloudpickle
-Requires:       python-ipykernel >= 5.1.3
+Requires:       python-ipykernel >= 5.3.0
 Requires:       python-ipython >= 7.6.0
 Requires:       python-jupyter_client >= 5.3.4
 Requires:       python-pyzmq >= 17

++++++ python-spyder-kernels-1.10.1.tar.gz -> 
python-spyder-kernels-1.10.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spyder-kernels-1.10.1/.github/workflows/linux-tests.yml 
new/spyder-kernels-1.10.2/.github/workflows/linux-tests.yml
--- old/spyder-kernels-1.10.1/.github/workflows/linux-tests.yml 2020-12-18 
01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/.github/workflows/linux-tests.yml 2021-02-21 
17:09:34.000000000 +0100
@@ -42,6 +42,7 @@
         run: |
           conda install nomkl -y -q
           conda install --file requirements/tests.txt -y -q
+          if [ "$PYTHON_VERSION" != "2.7" ]; then conda install -y -q 
jedi=0.17.2; fi
       - name: Install Package
         shell: bash -l {0}
         run: pip install -e .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spyder-kernels-1.10.1/.github/workflows/macos-tests.yml 
new/spyder-kernels-1.10.2/.github/workflows/macos-tests.yml
--- old/spyder-kernels-1.10.1/.github/workflows/macos-tests.yml 2020-12-18 
01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/.github/workflows/macos-tests.yml 2021-02-21 
17:09:34.000000000 +0100
@@ -38,6 +38,7 @@
         run: |
           conda install nomkl -y -q
           conda install --file requirements/tests.txt -y -q
+          if [ "$PYTHON_VERSION" != "2.7" ]; then conda install -y -q 
jedi=0.17.2; fi
       - name: Install Package
         shell: bash -l {0}
         run: pip install -e .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spyder-kernels-1.10.1/.github/workflows/windows-tests.yml 
new/spyder-kernels-1.10.2/.github/workflows/windows-tests.yml
--- old/spyder-kernels-1.10.1/.github/workflows/windows-tests.yml       
2020-12-18 01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/.github/workflows/windows-tests.yml       
2021-02-21 17:09:34.000000000 +0100
@@ -35,7 +35,9 @@
         run: conda install --file requirements/windows.txt -y -q
       - name: Install test dependencies
         shell: bash -l {0}
-        run: conda install --file requirements/tests.txt -y -q
+        run: |
+          conda install --file requirements/tests.txt -y -q
+          if [ "$PYTHON_VERSION" != "2.7" ]; then conda install -q -y 
jedi=0.17.2; fi
       - name: Install Package
         shell: bash -l {0}
         run: pip install -e .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spyder-kernels-1.10.1/CHANGELOG.md 
new/spyder-kernels-1.10.2/CHANGELOG.md
--- old/spyder-kernels-1.10.1/CHANGELOG.md      2020-12-18 01:40:05.000000000 
+0100
+++ new/spyder-kernels-1.10.2/CHANGELOG.md      2021-02-21 17:09:34.000000000 
+0100
@@ -1,5 +1,21 @@
 # History of changes
 
+## Version 1.10.2 (2021-02-21)
+
+### Pull Requests Merged
+
+* [PR 278](https://github.com/spyder-ide/spyder-kernels/pull/278) - PR: Warn 
when comm call creates text output, by [@impact27](https://github.com/impact27)
+* [PR 277](https://github.com/spyder-ide/spyder-kernels/pull/277) - PR: 
Increase minimal required version of ipykernel, by 
[@ccordoba12](https://github.com/ccordoba12)
+* [PR 275](https://github.com/spyder-ide/spyder-kernels/pull/275) - PR: Better 
test for non-interactive context, by 
[@juliangilbey](https://github.com/juliangilbey)
+* [PR 272](https://github.com/spyder-ide/spyder-kernels/pull/272) - PR: Fix 
assignment detection in exclamation mark mode (Pdb), by 
[@impact27](https://github.com/impact27)
+* [PR 271](https://github.com/spyder-ide/spyder-kernels/pull/271) - PR: Fix 
recursive debugger, by [@impact27](https://github.com/impact27)
+
+In this release 5 pull requests were closed.
+
+
+----
+
+
 ## Version 1.10.1 (2020-12-18)
 
 ### Issues Closed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spyder-kernels-1.10.1/requirements/tests.txt 
new/spyder-kernels-1.10.2/requirements/tests.txt
--- old/spyder-kernels-1.10.1/requirements/tests.txt    2020-12-18 
01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/requirements/tests.txt    2021-02-21 
17:09:34.000000000 +0100
@@ -10,4 +10,4 @@
 pytest-cov
 scipy
 xarray
-pillow
\ No newline at end of file
+pillow
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spyder-kernels-1.10.1/setup.py 
new/spyder-kernels-1.10.2/setup.py
--- old/spyder-kernels-1.10.1/setup.py  2020-12-18 01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/setup.py  2021-02-21 17:09:34.000000000 +0100
@@ -38,7 +38,7 @@
 REQUIREMENTS = [
     'cloudpickle',
     'ipykernel<5; python_version<"3"',
-    'ipykernel>=5.1.3; python_version>="3"',
+    'ipykernel>=5.3.0; python_version>="3"',
     'ipython<6; python_version<"3"',
     'ipython>=7.6.0; python_version>="3"',
     'jupyter-client>=5.3.4',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spyder-kernels-1.10.1/spyder_kernels/_version.py 
new/spyder-kernels-1.10.2/spyder_kernels/_version.py
--- old/spyder-kernels-1.10.1/spyder_kernels/_version.py        2020-12-18 
01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/spyder_kernels/_version.py        2021-02-21 
17:09:34.000000000 +0100
@@ -8,5 +8,5 @@
 
 """Version File."""
 
-VERSION_INFO = (1, 10, 1)
+VERSION_INFO = (1, 10, 2)
 __version__ = '.'.join(map(str, VERSION_INFO))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spyder-kernels-1.10.1/spyder_kernels/comms/frontendcomm.py 
new/spyder-kernels-1.10.2/spyder_kernels/comms/frontendcomm.py
--- old/spyder-kernels-1.10.1/spyder_kernels/comms/frontendcomm.py      
2020-12-18 01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/spyder_kernels/comms/frontendcomm.py      
2021-02-21 17:09:34.000000000 +0100
@@ -229,3 +229,34 @@
                 comm._msg_callback(msg)
         comm.handle_msg = handle_msg
         super(FrontendComm, self)._register_comm(comm)
+
+    def _remote_callback(self, call_name, call_args, call_kwargs):
+        """Call the callback function for the remote call."""
+        saved_stdout_write = sys.stdout.write
+        saved_stderr_write = sys.stderr.write
+        sys.stdout.write = WriteWrapper(saved_stdout_write, call_name)
+        sys.stderr.write = WriteWrapper(saved_stderr_write, call_name)
+        try:
+            return super(FrontendComm, self)._remote_callback(
+                call_name, call_args, call_kwargs)
+        finally:
+            sys.stdout.write = saved_stdout_write
+            sys.stderr.write = saved_stderr_write
+
+
+class WriteWrapper():
+    """Wrapper to warn user when text is printed."""
+
+    def __init__(self, write, name):
+        self._write = write
+        self._name = name
+        self._warning_shown = False
+
+    def __call__(self, string):
+        """Print warning once."""
+        if not self._warning_shown:
+            self._warning_shown = True
+            self._write(
+                "\nOutput from spyder call "
+                + repr(self._name) + ":\n")
+        return self._write(string)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spyder-kernels-1.10.1/spyder_kernels/console/tests/test_console_kernel.py 
new/spyder-kernels-1.10.2/spyder_kernels/console/tests/test_console_kernel.py
--- 
old/spyder-kernels-1.10.1/spyder_kernels/console/tests/test_console_kernel.py   
    2020-12-18 01:40:05.000000000 +0100
+++ 
new/spyder-kernels-1.10.2/spyder_kernels/console/tests/test_console_kernel.py   
    2021-02-21 17:09:34.000000000 +0100
@@ -43,13 +43,6 @@
 TIMEOUT = 15
 SETUP_TIMEOUT = 60
 
-TKINTER_INSTALLED = False
-try:
-    import tkinter
-    TKINTER_INSTALLED = True
-except:
-    pass
-
 
 @contextmanager
 def setup_kernel(cmd):
@@ -605,9 +598,21 @@
         assert "{'float_kind': <built-in method format of str object" in 
content
 
 
+# We declare this constant immediately before the test, as determining
+# that TURTLE_ACTIVE is True will briefly pop up a window, similar to the
+# windows that will pop up during the test itself.
+TURTLE_ACTIVE = False
+try:
+    import turtle
+    turtle.Screen()
+    turtle.bye()
+    TURTLE_ACTIVE = True
+except:
+    pass
+
 @flaky(max_runs=3)
-@pytest.mark.skipif(not TKINTER_INSTALLED,
-                    reason="Doesn't work on Python installations without Tk")
+@pytest.mark.skipif(not TURTLE_ACTIVE,
+                    reason="Doesn't work on non-interactive settings or Python 
installations without Tk")
 def test_turtle_launch(tmpdir):
     """Test turtle scripts running in the same kernel."""
     # Command to start the kernel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spyder-kernels-1.10.1/spyder_kernels/customize/spydercustomize.py 
new/spyder-kernels-1.10.2/spyder_kernels/customize/spydercustomize.py
--- old/spyder-kernels-1.10.1/spyder_kernels/customize/spydercustomize.py       
2020-12-18 01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/spyder_kernels/customize/spydercustomize.py       
2021-02-21 17:09:34.000000000 +0100
@@ -27,7 +27,7 @@
 
 from spyder_kernels.comms.frontendcomm import CommError, frontend_request
 from spyder_kernels.customize.namespace_manager import NamespaceManager
-from spyder_kernels.customize.spyderpdb import SpyderPdb
+from spyder_kernels.customize.spyderpdb import SpyderPdb, enter_debugger
 from spyder_kernels.customize.umr import UserModuleReloader
 from spyder_kernels.py3compat import TimeoutError, PY2, _print, encode
 
@@ -374,18 +374,6 @@
         return None
 
 
-def get_debugger(filename):
-    """Get a debugger for a given filename."""
-    debugger = pdb.Pdb()
-    filename = debugger.canonic(filename)
-    debugger._wait_for_mainpyfile = 1
-    debugger.mainpyfile = filename
-    debugger._user_requested_quit = 0
-    if os.name == 'nt':
-        filename = filename.replace('\\', '/')
-    return debugger, filename
-
-
 def count_leading_empty_lines(cell):
     """Count the number of leading empty cells."""
     if PY2:
@@ -597,10 +585,12 @@
         filename = get_current_file_name()
         if filename is None:
             return
-    debugger, filename = get_debugger(filename)
-    debugger.continue_if_has_breakpoints = True
-    debugger.run("runfile(%r, args=%r, wdir=%r, current_namespace=%r)" % (
-        filename, args, wdir, current_namespace))
+
+    enter_debugger(
+        filename, True,
+        "runfile({}" +
+        ", args=%r, wdir=%r, current_namespace=%r)" % (
+            args, wdir, current_namespace))
 
 
 builtins.debugfile = debugfile
@@ -678,11 +668,10 @@
         if filename is None:
             return
 
-    debugger, filename = get_debugger(filename)
-    # The breakpoint might not be in the cell
-    debugger.continue_if_has_breakpoints = False
-    debugger.run("runcell({}, {})".format(
-        repr(cellname), repr(filename)))
+    enter_debugger(
+        filename, False,
+        "runcell({}, ".format(repr(cellname)) +
+        "{})")
 
 
 builtins.debugcell = debugcell
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spyder-kernels-1.10.1/spyder_kernels/customize/spyderpdb.py 
new/spyder-kernels-1.10.2/spyder_kernels/customize/spyderpdb.py
--- old/spyder-kernels-1.10.1/spyder_kernels/customize/spyderpdb.py     
2020-12-18 01:40:05.000000000 +0100
+++ new/spyder-kernels-1.10.2/spyder_kernels/customize/spyderpdb.py     
2021-02-21 17:09:34.000000000 +0100
@@ -6,9 +6,11 @@
 
 """Spyder debugger."""
 
+import ast
 import bdb
-import sys
 import logging
+import os
+import sys
 import traceback
 from collections import namedtuple
 
@@ -144,7 +146,16 @@
                         cmd_in_namespace = False
                 cmd_func = getattr(self, 'do_' + cmd, None)
                 is_pdb_cmd = cmd_func is not None
-                is_assignment = arg and arg[0] == "="
+                # Look for assignment
+                is_assignment = False
+                try:
+                    for node in ast.walk(ast.parse(line)):
+                        if isinstance(node, ast.Assign):
+                            is_assignment = True
+                            break
+                except SyntaxError:
+                    pass
+
                 if is_pdb_cmd:
                     if not cmd_in_namespace and not is_assignment:
                         # This is a pdb command without the '!' prefix.
@@ -512,7 +523,7 @@
             if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
                     or frame.f_lineno <= 0):
                 return
-            self._wait_for_mainpyfile = 0
+            self._wait_for_mainpyfile = False
         super(SpyderPdb, self).user_return(frame, return_value)
 
     def _cmdloop(self):
@@ -700,3 +711,44 @@
         """
         with DebugWrapper(self):
             super(SpyderPdb, self).runcall(*args, **kwds)
+
+
+def enter_debugger(filename, continue_if_has_breakpoints, code_format):
+    """Enter debugger. Code format should be a format that accept filename."""
+    kernel = get_ipython().kernel
+    recursive = kernel.is_debugging()
+    if recursive:
+        parent_debugger = kernel._pdb_obj
+        sys.settrace(None)
+        globals = parent_debugger.curframe.f_globals
+        locals = parent_debugger.curframe_locals
+        # Create child debugger
+        debugger = SpyderPdb(
+            completekey=parent_debugger.completekey,
+            stdin=parent_debugger.stdin, stdout=parent_debugger.stdout)
+        debugger.use_rawinput = parent_debugger.use_rawinput
+        debugger.prompt = "(%s) " % parent_debugger.prompt.strip()
+    else:
+        debugger = SpyderPdb()
+
+    filename = debugger.canonic(filename)
+    debugger._wait_for_mainpyfile = True
+    debugger.mainpyfile = filename
+    debugger.continue_if_has_breakpoints = continue_if_has_breakpoints
+    debugger._user_requested_quit = False
+
+    if os.name == 'nt':
+        filename = filename.replace('\\', '/')
+
+    code = code_format.format(repr(filename))
+
+    if recursive:
+        # Enter recursive debugger
+        sys.call_tracing(debugger.run, (code, globals, locals))
+        # Reset parent debugger
+        sys.settrace(parent_debugger.trace_dispatch)
+        parent_debugger.lastcmd = debugger.lastcmd
+        kernel._register_pdb_session(parent_debugger)
+    else:
+        # The breakpoint might not be in the cell
+        debugger.run(code)

Reply via email to