##// END OF EJS Templates
Backport PR #5782: Silence exception thrown by completer when dir() does not return a list...
Backport PR #5782: Silence exception thrown by completer when dir() does not return a list ```python In [1]: import SOAPpy In [2]: s = SOAPpy.SOAPProxy('http://abc.com', namespace='xyz') In [3]: s.Traceback (most recent call last): File "IPython/core/completer.py", line 1043, in complete self.matches.extend(matcher(text)) File "IPython/core/completer.py", line 725, in python_matches matches = self.attr_matches(text) File "IPython/core/completer.py", line 403, in attr_matches words = dir2(obj) File "IPython/utils/dir2.py", line 63, in dir2 words = set(dir(obj)) TypeError: __dir__() must return a list, not instance If you suspect this is an IPython bug, please report it at: https://github.com/ipython/ipython/issues or send an email to the mailing list at ipython-dev@scipy.org You can print a more detailed traceback right now with "%tb", or use "%debug" to interactively debug it. Extra-detailed tracebacks for bug-reporting purposes can be enabled via: %config Application.verbose_crash=True File "<ipython-input-3-fbb1f01da851>", line 1 s. ^ SyntaxError: invalid syntax In [4]: dir(s) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-4-9d6ad02bd404> in <module>() ----> 1 dir(s) TypeError: __dir__() must return a list, not instance In [5]: s.__dir__() Out[5]: <SOAPpy.Client.__Method at 150204780> In [6]: ```

File last commit:

r12647:0e0e6a8e
r16678:86364d02
Show More
test_cythonmagic.py
70 lines | 1.6 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
"""Tests for the Cython magics extension."""
import os
import nose.tools as nt
from IPython.testing import decorators as dec
from IPython.utils import py3compat
code = py3compat.str_to_unicode("""def f(x):
return 2*x
""")
try:
import Cython
except:
__test__ = False
ip = get_ipython()
def setup():
ip.extension_manager.load_extension('cythonmagic')
def test_cython_inline():
ip.ex('a=10; b=20')
result = ip.run_cell_magic('cython_inline','','return a+b')
nt.assert_equal(result, 30)
@dec.skip_win32
def test_cython_pyximport():
module_name = '_test_cython_pyximport'
ip.run_cell_magic('cython_pyximport', module_name, code)
ip.ex('g = f(10)')
nt.assert_equal(ip.user_ns['g'], 20.0)
ip.run_cell_magic('cython_pyximport', module_name, code)
ip.ex('h = f(-10)')
nt.assert_equal(ip.user_ns['h'], -20.0)
try:
os.remove(module_name+'.pyx')
except OSError:
pass
def test_cython():
ip.run_cell_magic('cython', '', code)
ip.ex('g = f(10)')
nt.assert_equal(ip.user_ns['g'], 20.0)
def test_cython_name():
# The Cython module named 'mymodule' defines the function f.
ip.run_cell_magic('cython', '--name=mymodule', code)
# This module can now be imported in the interactive namespace.
ip.ex('import mymodule; g = mymodule.f(10)')
nt.assert_equal(ip.user_ns['g'], 20.0)
@dec.skip_win32
def test_extlibs():
code = py3compat.str_to_unicode("""
from libc.math cimport sin
x = sin(0.0)
""")
ip.user_ns['x'] = 1
ip.run_cell_magic('cython', '-l m', code)
nt.assert_equal(ip.user_ns['x'], 0)