Repository: ipython/ipython

Issue:
Adapter V4 error.
Got this (formating mine) on shift-tab with julia kernel.

Formatting mine. Ping @minrk.

```
[C 12:01:53.393 NotebookApp] Malformed message: 
    [
        b'<IDS|MSG>',
        b'c22a438f6bd906866527bcfb8490dcafa6fec3142925eeb4ca480b638f6457d1',
        b'{"msg_id":"02a2b72c-6c8b-4597-8687-00e15cfeedc2",
        "msg_type":"object_info_reply",
        "username":"username",
        "session":"0BF3FB88F34A457FA7F8F7BDF9129569"}',
        b'{"msg_id":"1E1BB82360A44FD881CC0D55D8F82B5C",
        "msg_type":"object_info_request",
        "username":"username",
        "session":"0BF3FB88F34A457FA7F8F7BDF9129569"}',
        b'{}',
        b'{
            "base_class":"Any",
            "type_name":"Function",
            "isalias":false,
            "oname":"print",
            "docstring":"# 19 methods for generic function \\"print\\":\\n
                         print(io::IO,c::Char) at char.jl:52\\n
                         print(io::IO,s::ASCIIString) at ascii.jl:93\\n
                         print(io::IO,s::UTF8String) at utf8.jl:154\\n
                         print(io::IOBuffer,s::SubString{T<:String}) at string.jl:588\\n
                         print(io::IO,s::RopeString) at string.jl:784\\n
                         print(io::IO,s::String) at string.jl:67\\n
                         print(io::IO,s::Symbol) at show.jl:4\\n
                         print(io::IO,n::Unsigned) at show.jl:112\\n
                         print(io::IO,ex::Union(LabelNode,Expr,GotoNode,SymbolNode,LineNumberNode,QuoteNode,TopNode)) at show.jl:224\\n
                         print(io::IO,ip::IPv4) at socket.jl:30\\n
                         print(io::IO,ip::IPv6) at socket.jl:85\\n
                         print{mime}(io::IO,::MIME{mime}) at multimedia.jl:17\\n
                         print(io::IO,x::Float32) at grisu.jl:112\\n
                         print(io::IO,x::Float16) at grisu.jl:113\\n
                         print(io::IO,b::BigFloat) at mpfr.jl:705\\n
                         print(io::IO,v::VersionNumber) at version.jl:42\\n
                         print(io::IO,x) at string.jl:3\\n
                         print(io::IO,xs...) at string.jl:4\\n
                         print(xs...) at string.jl:7",
            "string_form":"print",
            "found":true,"ismagic":false
        }']

    Traceback (most recent call last):
      File "/Users/bussonniermatthias/ipython/IPython/html/base/zmqhandlers.py", line 103, in _on_zmq_reply
        msg = self._reserialize_reply(msg_list)
      File "/Users/bussonniermatthias/ipython/IPython/html/base/zmqhandlers.py", line 86, in _reserialize_reply
        msg = self.session.unserialize(msg_list)
      File "/Users/bussonniermatthias/ipython/IPython/kernel/zmq/session.py", line 847, in unserialize
        return adapt(message)
      File "/Users/bussonniermatthias/ipython/IPython/kernel/adapter.py", line 349, in adapt
        return adapter(msg)
      File "/Users/bussonniermatthias/ipython/IPython/kernel/adapter.py", line 70, in __call__
        return handler(msg)
      File "/Users/bussonniermatthias/ipython/IPython/kernel/adapter.py", line 277, in inspect_reply
        new_content['name'] = content['name']
    KeyError: 'name'
```



Discussion:
I suppose it is `new_content['name'] = content['oname']`


Resolving patch:
diff --git a/IPython/kernel/adapter.py b/IPython/kernel/adapter.py
--- a/IPython/kernel/adapter.py
+++ b/IPython/kernel/adapter.py
@@ -160,7 +160,7 @@ def object_info_request(self, msg):
     
     def object_info_reply(self, msg):
         """inspect_reply can't be easily backward compatible"""
-        msg['content'] = {'found' : False, 'name' : 'unknown'}
+        msg['content'] = {'found' : False, 'oname' : 'unknown'}
         return msg
     
     # iopub channel
@@ -274,7 +274,7 @@ def inspect_reply(self, msg):
         content = msg['content']
         new_content = msg['content'] = {'status' : 'ok'}
         found = new_content['found'] = content['found']
-        new_content['name'] = content['name']
+        new_content['name'] = content['oname']
         new_content['data'] = data = {}
         new_content['metadata'] = {}
         if found:


Test patch:
diff --git a/IPython/kernel/tests/test_adapter.py b/IPython/kernel/tests/test_adapter.py
--- a/IPython/kernel/tests/test_adapter.py
+++ b/IPython/kernel/tests/test_adapter.py
@@ -155,7 +155,7 @@ def test_object_info_request(self):
     
     def test_object_info_reply(self):
         msg = self.msg("object_info_reply", {
-            'name' : 'foo',
+            'oname' : 'foo',
             'found' : True,
             'status' : 'ok',
             'definition' : 'foo(a=5)',
@@ -302,7 +302,7 @@ def test_inspect_reply(self):
         self.assertEqual(v4['header']['msg_type'], 'object_info_reply')
         v4c = v4['content']
         v5c = v5['content']
-        self.assertEqual(sorted(v4c), ['found', 'name'])
+        self.assertEqual(sorted(v4c), ['found', 'oname'])
         self.assertEqual(v4c['found'], False)
     
     # iopub channel