##// 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:

r14840:68cef000
r16678:86364d02
Show More
test_embed.py
57 lines | 1.7 KiB | text/x-python | PythonLexer
"""Test embedding of IPython"""
#-----------------------------------------------------------------------------
# Copyright (C) 2013 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import sys
import nose.tools as nt
from IPython.utils.process import process_handler
from IPython.utils.tempdir import NamedFileInTemporaryDirectory
#-----------------------------------------------------------------------------
# Tests
#-----------------------------------------------------------------------------
_sample_embed = b"""
from __future__ import print_function
import IPython
a = 3
b = 14
print(a, '.', b)
IPython.embed()
print('bye!')
"""
_exit = b"exit\r"
def test_ipython_embed():
"""test that `IPython.embed()` works"""
with NamedFileInTemporaryDirectory('file_with_embed.py') as f:
f.write(_sample_embed)
f.flush()
f.close() # otherwise msft won't be able to read the file
# run `python file_with_embed.py`
cmd = [sys.executable, f.name]
out, p = process_handler(cmd, lambda p: (p.communicate(_exit), p))
std = out[0].decode('UTF-8')
nt.assert_equal(p.returncode, 0)
nt.assert_in('3 . 14', std)
if os.name != 'nt':
# TODO: Fix up our different stdout references, see issue gh-14
nt.assert_in('IPython', std)
nt.assert_in('bye!', std)