old_contents: """
  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')
  
new_contents: """
  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
  
  # Stdlib
  import sys
  import types
  
  m = """\
  *** WARNING*** : The top-level `frontend` package has been deprecated.
  All its subpackages have been moved to the top `IPython` level."""
  
  print(m, file=sys.stderr)
  
  # FIXME: turn this into a Warning once we've fixed all our own imports.
  #raise DeprecationWarning(m)
  
  #-----------------------------------------------------------------------------
  # Class declarations
  #-----------------------------------------------------------------------------
  
  class ShimModule(types.ModuleType):
  
      def __getattribute__(self, key):
          # Use the equivalent of import_item(name), see below
          name = 'IPython.' + key
  
          # NOTE: the code below is copied *verbatim* from
          # importstring.import_item. For some very strange reason that makes no
          # sense to me, if we call it *as a function*, it doesn't work.  This
          # has something to do with the deep bowels of the import machinery and
          # I couldn't find a way to make the code work as a standard function
          # call.  But at least since it's an unmodified copy of import_item,
          # which is used extensively and has a test suite, we can be reasonably
          # confident this is OK.  If anyone finds how to call the function, all
          # the below could be replaced simply with:
          #
          # from IPython.utils.importstring import import_item
          # return import_item('IPython.' + key)
          
          parts = name.rsplit('.', 1)
          if len(parts) == 2:
              # called with 'foo.bar....'
              package, obj = parts
              module = __import__(package, fromlist=[obj])
              try:
                  pak = module.__dict__[obj]
              except KeyError:
                  raise ImportError('No module named %s' % obj)
              return pak
          else:
              # called with un-dotted string
              return __import__(parts[0])
  
  
  # Unconditionally insert the shim into sys.modules so that further import calls
  # trigger the custom attribute access above
  
  sys.modules['IPython.frontend'] = ShimModule('frontend')
  
subject: Replace exec/eval with proper __import__.