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