##// END OF EJS Templates
Add proper warnings on use of the backwards compatibility shim.
Add proper warnings on use of the backwards compatibility shim.

File last commit:

r11015:bf28376f
r11015:bf28376f
Show More
frontend.py
51 lines | 2.0 KiB | text/x-python | PythonLexer
Fernando Perez
Add proper warnings on use of the backwards compatibility shim.
r11015 """
Shim to maintain backwards compatibility with old frontend imports.
We have moved all contents of the old `frontend` subpackage into top-level
subpackages (`html`, `qt` and `terminal`). This will let code that was making
`from IPython.frontend...` calls continue working, though a warning will be
printed.
"""
#-----------------------------------------------------------------------------
# Copyright (c) 2013, IPython Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
from __future__ import print_function
Fernando Perez
Add shim module to allow flattening of namespace.
r11008 import sys
import types
Fernando Perez
Add proper warnings on use of the backwards compatibility shim.
r11015 #-----------------------------------------------------------------------------
# Class declarations
#-----------------------------------------------------------------------------
Fernando Perez
Add shim module to allow flattening of namespace.
r11008
class ShimModule(types.ModuleType):
def __getattribute__(self, key):
Fernando Perez
Add proper warnings on use of the backwards compatibility shim.
r11015 m = ("*** WARNING*** : The top-level `frontend` module has been deprecated.\n"
"Please import %s directly from the `IPython` level." % key)
# FIXME: I don't understand why, but if the print statement below is
# redirected to stderr, this shim module stops working. It seems the
# Python import machinery has problem with redirected prints happening
# during the import process. If we can't figure out a solution, we may
# need to leave it to print to default stdout.
print(m)
# FIXME: this seems to work fine, but we should replace it with an
# __import__ call instead of using exec/eval.
Fernando Perez
Add shim module to allow flattening of namespace.
r11008 exec 'from IPython import %s' % key
return eval(key)
Fernando Perez
Add proper warnings on use of the backwards compatibility shim.
r11015
# Unconditionally insert the shim into sys.modules so that further import calls
# trigger the custom attribute access above
Fernando Perez
Add shim module to allow flattening of namespace.
r11008 sys.modules['IPython.frontend'] = ShimModule('frontend')