##// END OF EJS Templates
note notebook move in frontend.py docstring
MinRK -
Show More
@@ -1,78 +1,79 b''
1 1 """
2 2 Shim to maintain backwards compatibility with old frontend imports.
3 3
4 4 We have moved all contents of the old `frontend` subpackage into top-level
5 subpackages (`html`, `qt` and `terminal`).
5 subpackages (`html`, `qt` and `terminal`), and flattened the notebook into
6 just `IPython.html`, formerly `IPython.frontend.html.notebook`.
6 7
7 8 This will let code that was making `from IPython.frontend...` calls continue
8 9 working, though a warning will be printed.
9 10 """
10 11
11 12 #-----------------------------------------------------------------------------
12 13 # Copyright (c) 2013, IPython Development Team.
13 14 #
14 15 # Distributed under the terms of the Modified BSD License.
15 16 #
16 17 # The full license is in the file COPYING.txt, distributed with this software.
17 18 #-----------------------------------------------------------------------------
18 19
19 20 #-----------------------------------------------------------------------------
20 21 # Imports
21 22 #-----------------------------------------------------------------------------
22 23 from __future__ import print_function
23 24
24 25 # Stdlib
25 26 import sys
26 27 import types
27 28 from warnings import warn
28 29
29 30 warn("The top-level `frontend` package has been deprecated. "
30 31 "All its subpackages have been moved to the top `IPython` level.")
31 32
32 33 #-----------------------------------------------------------------------------
33 34 # Class declarations
34 35 #-----------------------------------------------------------------------------
35 36
36 37 class ShimModule(types.ModuleType):
37 38
38 39 def __init__(self, *args, **kwargs):
39 40 self._mirror = kwargs.pop("mirror")
40 41 super(ShimModule, self).__init__(*args, **kwargs)
41 42
42 43 def __getattr__(self, key):
43 44 # Use the equivalent of import_item(name), see below
44 45 name = "%s.%s" % (self._mirror, key)
45 46
46 47 # NOTE: the code below is copied *verbatim* from
47 48 # importstring.import_item. For some very strange reason that makes no
48 49 # sense to me, if we call it *as a function*, it doesn't work. This
49 50 # has something to do with the deep bowels of the import machinery and
50 51 # I couldn't find a way to make the code work as a standard function
51 52 # call. But at least since it's an unmodified copy of import_item,
52 53 # which is used extensively and has a test suite, we can be reasonably
53 54 # confident this is OK. If anyone finds how to call the function, all
54 55 # the below could be replaced simply with:
55 56 #
56 57 # from IPython.utils.importstring import import_item
57 58 # return import_item('MIRROR.' + key)
58 59
59 60 parts = name.rsplit('.', 1)
60 61 if len(parts) == 2:
61 62 # called with 'foo.bar....'
62 63 package, obj = parts
63 64 module = __import__(package, fromlist=[obj])
64 65 try:
65 66 pak = module.__dict__[obj]
66 67 except KeyError:
67 68 raise ImportError('No module named %s' % obj)
68 69 return pak
69 70 else:
70 71 # called with un-dotted string
71 72 return __import__(parts[0])
72 73
73 74
74 75 # Unconditionally insert the shim into sys.modules so that further import calls
75 76 # trigger the custom attribute access above
76 77
77 78 sys.modules['IPython.frontend.html.notebook'] = ShimModule('notebook', mirror='IPython.html')
78 79 sys.modules['IPython.frontend'] = ShimModule('frontend', mirror='IPython')
General Comments 0
You need to be logged in to leave comments. Login now