##// END OF EJS Templates
Restructure code to avoid unnecessary list slicing by using rsplit.
Restructure code to avoid unnecessary list slicing by using rsplit.

File last commit:

r11015:bf28376f
r11018:8ddfcf45
Show More
frontend.py
51 lines | 2.0 KiB | text/x-python | PythonLexer
"""
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
import sys
import types
#-----------------------------------------------------------------------------
# Class declarations
#-----------------------------------------------------------------------------
class ShimModule(types.ModuleType):
def __getattribute__(self, key):
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.
exec 'from IPython import %s' % key
return eval(key)
# Unconditionally insert the shim into sys.modules so that further import calls
# trigger the custom attribute access above
sys.modules['IPython.frontend'] = ShimModule('frontend')