##// END OF EJS Templates
Merge pull request #9813 from controversial/master...
Merge pull request #9813 from controversial/master Support running directories with __main__.py files. Closes #9812

File last commit:

r22573:4042f2a0
r22734:c0bff866 merge
Show More
globalipapp.py
151 lines | 5.2 KiB | text/x-python | PythonLexer
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 """Global IPython app to support test running.
We must start our own ipython object and heavily muck with it so that all the
modifications IPython makes to system behavior don't send the doctest machinery
into a fit. This code should be considered a gross hack, but it gets the job
done.
"""
from __future__ import absolute_import
Fernando Perez
Fixed broken coloring on Windows....
r2974 from __future__ import print_function
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423
#-----------------------------------------------------------------------------
Matthias BUSSONNIER
update copyright to 2011/20xx-2011...
r5390 # Copyright (C) 2009-2011 The IPython Development Team
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 #-----------------------------------------------------------------------------
Fernando Perez
Fixed broken coloring on Windows....
r2974 # stdlib
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 import sys
Fernando Perez
Fixed broken coloring on Windows....
r2974 # our own
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 from . import tools
Thomas Kluyver
Disable the pager for the test suite....
r5263 from IPython.core import page
MinRK
Add StreamProxy soft link io.stdout/err to sys.stdout/err...
r3801 from IPython.utils import io
Thomas Kluyver
Fix various problems highlighted by the test suite.
r4759 from IPython.utils import py3compat
Thomas Kluyver
Fix imports of builtins module
r13351 from IPython.utils.py3compat import builtin_mod
Fernando Perez
Fix all remaining imports that used `IPython.frontend`.
r11024 from IPython.terminal.interactiveshell import TerminalInteractiveShell
Fernando Perez
Fixed broken coloring on Windows....
r2974
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 #-----------------------------------------------------------------------------
# Functions
#-----------------------------------------------------------------------------
MinRK
Add StreamProxy soft link io.stdout/err to sys.stdout/err...
r3801 class StreamProxy(io.IOStream):
"""Proxy for sys.stdout/err. This will request the stream *at call time*
allowing for nose's Capture plugin's redirection of sys.stdout/err.
Bernardo B. Marques
remove all trailling spaces
r4872
MinRK
Add StreamProxy soft link io.stdout/err to sys.stdout/err...
r3801 Parameters
----------
name : str
The name of the stream. This will be requested anew at every call
"""
Bernardo B. Marques
remove all trailling spaces
r4872
MinRK
Add StreamProxy soft link io.stdout/err to sys.stdout/err...
r3801 def __init__(self, name):
self.name=name
Bernardo B. Marques
remove all trailling spaces
r4872
MinRK
Add StreamProxy soft link io.stdout/err to sys.stdout/err...
r3801 @property
def stream(self):
return getattr(sys, self.name)
Bernardo B. Marques
remove all trailling spaces
r4872
MinRK
Add StreamProxy soft link io.stdout/err to sys.stdout/err...
r3801 def flush(self):
self.stream.flush()
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423
def get_ipython():
# This will get replaced by the real thing once we start IPython below
Fernando Perez
Lots of work on exception handling, including tests for traceback printing....
r2440 return start_ipython()
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423
Brian Granger
More work addressing review comments for Fernando's branch....
r2499
Fernando Perez
Fixed broken coloring on Windows....
r2974 # A couple of methods to override those in the running IPython to interact
# better with doctest (doctest captures on raw stdout, so we need to direct
# various types of output there otherwise it will miss them).
def xsys(self, cmd):
"""Replace the default system call with a capturing one for doctest.
"""
# We use getoutput, but we need to strip it because pexpect captures
# the trailing newline differently from commands.getoutput
Thomas Kluyver
Expose & document depth parameter to ip.getoutput()
r7400 print(self.getoutput(cmd, split=False, depth=1).rstrip(), end='', file=sys.stdout)
Fernando Perez
Fixed broken coloring on Windows....
r2974 sys.stdout.flush()
def _showtraceback(self, etype, evalue, stb):
"""Print the traceback purely on stdout for doctest to capture it.
"""
print(self.InteractiveTB.stb2text(stb), file=sys.stdout)
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 def start_ipython():
"""Start a global IPython shell, which we need for IPython-specific syntax.
"""
global get_ipython
# This function should only ever run once!
Brian Granger
More work addressing review comments for Fernando's branch....
r2499 if hasattr(start_ipython, 'already_called'):
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 return
start_ipython.already_called = True
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 # Store certain global objects that IPython modifies
_displayhook = sys.displayhook
_excepthook = sys.excepthook
_main = sys.modules.get('__main__')
Fernando Perez
Clean up and document better starting process of global IPython in tests.
r2444 # Create custom argv and namespaces for our IPython to be test-friendly
Brian Granger
More work addressing review comments for Fernando's branch....
r2499 config = tools.default_config()
Matthias Bussonnier
Use SIMPLE_PROMPT while testing....
r22573 config.TerminalInteractiveShell.simple_prompt = True
Brian Granger
More work addressing review comments for Fernando's branch....
r2499
Fernando Perez
Clean up and document better starting process of global IPython in tests.
r2444 # Create and initialize our test-friendly IPython instance.
Bernardo B. Marques
remove all trailling spaces
r4872 shell = TerminalInteractiveShell.instance(config=config,
Fernando Perez
Fixed broken coloring on Windows....
r2974 )
Fernando Perez
Clean up and document better starting process of global IPython in tests.
r2444
# A few more tweaks needed for playing nicely with doctests...
Bernardo B. Marques
remove all trailling spaces
r4872
MinRK
add test history db to shell.tempfiles for cleanup...
r4602 # remove history file
shell.tempfiles.append(config.HistoryManager.hist_file)
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Clean up and document better starting process of global IPython in tests.
r2444 # These traps are normally only active for interactive use, set them
# permanently since we'll be mocking interactive sessions.
Fernando Perez
Speedup builtin_trap enter/exit by reducing object creation....
r2957 shell.builtin_trap.activate()
Fernando Perez
Changed %hist to default to NOT printing numbers, added -p and -o options....
r2441
Fernando Perez
Clean up and document better starting process of global IPython in tests.
r2444 # Modify the IPython system call with one that uses getoutput, so that we
# can capture subcommands and print them to Python's stdout, otherwise the
# doctest machinery would miss them.
Thomas Kluyver
Fix various problems highlighted by the test suite.
r4759 shell.system = py3compat.MethodType(xsys, shell)
Thomas Kluyver
Use user_ns as global namespace if it is passed without user_module, and add test for pickling interactively defined objects....
r5456
Thomas Kluyver
Fix various problems highlighted by the test suite.
r4759 shell._showtraceback = py3compat.MethodType(_showtraceback, shell)
Fernando Perez
Clean up and document better starting process of global IPython in tests.
r2444
# IPython is ready, now clean up some global state...
Bernardo B. Marques
remove all trailling spaces
r4872
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 # Deactivate the various python system hooks added by ipython for
# interactive convenience so we don't confuse the doctest system
sys.modules['__main__'] = _main
sys.displayhook = _displayhook
sys.excepthook = _excepthook
# So that ipython magics and aliases can be doctested (they work by making
Fernando Perez
Lots of work on exception handling, including tests for traceback printing....
r2440 # a call into a global _ip object). Also make the top-level get_ipython
Fernando Perez
Clean up and document better starting process of global IPython in tests.
r2444 # now return this without recursively calling here again.
Brian Granger
More work addressing review comments for Fernando's branch....
r2499 _ip = shell
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423 get_ipython = _ip.get_ipython
Thomas Kluyver
Repair various failures in the test suite.
r4734 builtin_mod._ip = _ip
builtin_mod.get_ipython = get_ipython
Bernardo B. Marques
remove all trailling spaces
r4872
MinRK
Add StreamProxy soft link io.stdout/err to sys.stdout/err...
r3801 # To avoid extra IPython messages during testing, suppress io.stdout/stderr
io.stdout = StreamProxy('stdout')
io.stderr = StreamProxy('stderr')
Thomas Kluyver
Disable the pager for the test suite....
r5263
# Override paging, so we don't require user interaction during the tests.
def nopage(strng, start=0, screen_lines=0, pager_cmd=None):
Matthias Bussonnier
Fix test mimebundle paging...
r22464 if isinstance(strng, dict):
strng = strng.get('text/plain', '')
Thomas Kluyver
Disable the pager for the test suite....
r5263 print(strng)
Thomas Kluyver
Replace pager_page() instead of page() for test suite...
r19436 page.orig_page = page.pager_page
page.pager_page = nopage
Fernando Perez
Add file I forgot! Thanks to J. Hunter for report.
r2423
Fernando Perez
Lots of work on exception handling, including tests for traceback printing....
r2440 return _ip