33
44import sys
55import msgpack
6+ import yaml
67
78from tarantool .const import (
89 IPROTO_CODE ,
@@ -41,7 +42,7 @@ def __init__(self, conn, response):
4142 # created in the __new__(). But let it be.
4243 super (Response , self ).__init__ ()
4344
44- unpacker = msgpack .Unpacker (use_list = False )
45+ unpacker = msgpack .Unpacker (use_list = True )
4546 unpacker .feed (response )
4647 header = unpacker .unpack ()
4748
@@ -57,12 +58,18 @@ def __init__(self, conn, response):
5758 if code == REQUEST_TYPE_OK :
5859 self ._return_code = 0 ;
5960 self ._completion_status = 0
60- self .extend (body .get (IPROTO_DATA , []))
61+ self ._data = body .get (IPROTO_DATA , None )
62+ # Backward-compatibility
63+ if isinstance (self ._data , (list , tuple )):
64+ self .extend (self ._data )
65+ else :
66+ self .append (self ._data )
6167 else :
6268 # Separate return_code and completion_code
6369 self ._return_message = body .get (IPROTO_ERROR , "" )
6470 self ._return_code = code & (REQUEST_TYPE_ERROR - 1 )
6571 self ._completion_status = 2
72+ self ._data = None
6673 if self .conn .error :
6774 raise DatabaseError (self ._return_code , self ._return_message )
6875
@@ -105,6 +112,17 @@ def return_code(self):
105112 '''
106113 return self ._return_code
107114
115+ @property
116+ def data (self ):
117+ '''\
118+ :type: object
119+
120+ Required field in the server response.
121+ Contains list of tuples of SELECT, REPLACE and DELETE requests
122+ and arbitrary data for CALL.
123+ '''
124+ return self ._data
125+
108126 @property
109127 def strerror (self ):
110128 '''\
@@ -131,13 +149,11 @@ def __str__(self):
131149
132150 :rtype: str or None
133151 '''
134- errstr = "---\n - error:\n errcode: {errname}\n errmsg: {errstr}\n ..."
135152 if self .completion_status :
136- return errstr .format (errname = self .strerror ,
137- errstr = self .return_message )
138- table = ""
139- if len (self ):
140- table = "\n " + "\n " .join (["- " + str (list (k )) for k in self ])
141- return "---{0}\n ..." .format (table )
153+ return yaml .dump ({ 'error' : {
154+ 'code' : self .strerror [0 ],
155+ 'reason' : self .return_message
156+ }})
157+ return yaml .dump (self ._data )
142158
143159 __repr__ = __str__
0 commit comments