4
4
Request types definitions
5
5
'''
6
6
7
+ import sys
7
8
import msgpack
8
9
import hashlib
9
10
@@ -65,6 +66,25 @@ def __init__(self, conn):
65
66
self ._sync = None
66
67
self ._body = ''
67
68
69
+ # Python 2:
70
+ #
71
+ # - encode: str, unicode -> mp_str
72
+ # - decode: mp_str, mp_bin -> str
73
+ #
74
+ # Python 3:
75
+ #
76
+ # - encode: str -> mp_str
77
+ # - encode: bytes -> mp_bin
78
+ # - decode: mp_str -> str
79
+ # - decode: mp_bin -> bytes
80
+ self .msgpack_dumps_kwargs = dict ()
81
+ if sys .version_info .major == 3 :
82
+ # XXX: Should we check msgpack version before use this option?
83
+ self .msgpack_dumps_kwargs .update (use_bin_type = True )
84
+
85
+ def dumps (self , src ):
86
+ return msgpack .dumps (src , ** self .msgpack_dumps_kwargs )
87
+
68
88
def __bytes__ (self ):
69
89
return self .header (len (self ._body )) + self ._body
70
90
@@ -82,11 +102,11 @@ def sync(self):
82
102
83
103
def header (self , length ):
84
104
self ._sync = self .conn .generate_sync ()
85
- header = msgpack .dumps ({IPROTO_CODE : self .request_type ,
86
- IPROTO_SYNC : self ._sync ,
87
- IPROTO_SCHEMA_ID : self .conn .schema_version })
105
+ header = self .dumps ({IPROTO_CODE : self .request_type ,
106
+ IPROTO_SYNC : self ._sync ,
107
+ IPROTO_SCHEMA_ID : self .conn .schema_version })
88
108
89
- return msgpack .dumps (length + len (header )) + header
109
+ return self .dumps (length + len (header )) + header
90
110
91
111
92
112
class RequestInsert (Request ):
@@ -102,8 +122,8 @@ def __init__(self, conn, space_no, values):
102
122
super (RequestInsert , self ).__init__ (conn )
103
123
assert isinstance (values , (tuple , list ))
104
124
105
- request_body = msgpack .dumps ({IPROTO_SPACE_ID : space_no ,
106
- IPROTO_TUPLE : values })
125
+ request_body = self .dumps ({IPROTO_SPACE_ID : space_no ,
126
+ IPROTO_TUPLE : values })
107
127
108
128
self ._body = request_body
109
129
@@ -131,19 +151,19 @@ def sha1(values):
131
151
hash2 = sha1 ((hash1 ,))
132
152
scramble = sha1 ((salt , hash2 ))
133
153
scramble = strxor (hash1 , scramble )
134
- request_body = msgpack .dumps ({IPROTO_USER_NAME : user ,
135
- IPROTO_TUPLE : ("chap-sha1" , scramble )})
154
+ request_body = self .dumps ({IPROTO_USER_NAME : user ,
155
+ IPROTO_TUPLE : ("chap-sha1" , scramble )})
136
156
self ._body = request_body
137
157
138
158
def header (self , length ):
139
159
self ._sync = self .conn .generate_sync ()
140
160
# Set IPROTO_SCHEMA_ID: 0 to avoid SchemaReloadException
141
161
# It is ok to use 0 in auth every time.
142
- header = msgpack .dumps ({IPROTO_CODE : self .request_type ,
143
- IPROTO_SYNC : self ._sync ,
144
- IPROTO_SCHEMA_ID : 0 })
162
+ header = self .dumps ({IPROTO_CODE : self .request_type ,
163
+ IPROTO_SYNC : self ._sync ,
164
+ IPROTO_SCHEMA_ID : 0 })
145
165
146
- return msgpack .dumps (length + len (header )) + header
166
+ return self .dumps (length + len (header )) + header
147
167
148
168
149
169
class RequestReplace (Request ):
@@ -159,8 +179,8 @@ def __init__(self, conn, space_no, values):
159
179
super (RequestReplace , self ).__init__ (conn )
160
180
assert isinstance (values , (tuple , list ))
161
181
162
- request_body = msgpack .dumps ({IPROTO_SPACE_ID : space_no ,
163
- IPROTO_TUPLE : values })
182
+ request_body = self .dumps ({IPROTO_SPACE_ID : space_no ,
183
+ IPROTO_TUPLE : values })
164
184
165
185
self ._body = request_body
166
186
@@ -177,9 +197,9 @@ def __init__(self, conn, space_no, index_no, key):
177
197
'''
178
198
super (RequestDelete , self ).__init__ (conn )
179
199
180
- request_body = msgpack .dumps ({IPROTO_SPACE_ID : space_no ,
181
- IPROTO_INDEX_ID : index_no ,
182
- IPROTO_KEY : key })
200
+ request_body = self .dumps ({IPROTO_SPACE_ID : space_no ,
201
+ IPROTO_INDEX_ID : index_no ,
202
+ IPROTO_KEY : key })
183
203
184
204
self ._body = request_body
185
205
@@ -193,12 +213,12 @@ class RequestSelect(Request):
193
213
# pylint: disable=W0231
194
214
def __init__ (self , conn , space_no , index_no , key , offset , limit , iterator ):
195
215
super (RequestSelect , self ).__init__ (conn )
196
- request_body = msgpack .dumps ({IPROTO_SPACE_ID : space_no ,
197
- IPROTO_INDEX_ID : index_no ,
198
- IPROTO_OFFSET : offset ,
199
- IPROTO_LIMIT : limit ,
200
- IPROTO_ITERATOR : iterator ,
201
- IPROTO_KEY : key })
216
+ request_body = self .dumps ({IPROTO_SPACE_ID : space_no ,
217
+ IPROTO_INDEX_ID : index_no ,
218
+ IPROTO_OFFSET : offset ,
219
+ IPROTO_LIMIT : limit ,
220
+ IPROTO_ITERATOR : iterator ,
221
+ IPROTO_KEY : key })
202
222
203
223
self ._body = request_body
204
224
@@ -214,10 +234,10 @@ class RequestUpdate(Request):
214
234
def __init__ (self , conn , space_no , index_no , key , op_list ):
215
235
super (RequestUpdate , self ).__init__ (conn )
216
236
217
- request_body = msgpack .dumps ({IPROTO_SPACE_ID : space_no ,
218
- IPROTO_INDEX_ID : index_no ,
219
- IPROTO_KEY : key ,
220
- IPROTO_TUPLE : op_list })
237
+ request_body = self .dumps ({IPROTO_SPACE_ID : space_no ,
238
+ IPROTO_INDEX_ID : index_no ,
239
+ IPROTO_KEY : key ,
240
+ IPROTO_TUPLE : op_list })
221
241
222
242
self ._body = request_body
223
243
@@ -235,8 +255,8 @@ def __init__(self, conn, name, args, call_16):
235
255
super (RequestCall , self ).__init__ (conn )
236
256
assert isinstance (args , (list , tuple ))
237
257
238
- request_body = msgpack .dumps ({IPROTO_FUNCTION_NAME : name ,
239
- IPROTO_TUPLE : args })
258
+ request_body = self .dumps ({IPROTO_FUNCTION_NAME : name ,
259
+ IPROTO_TUPLE : args })
240
260
241
261
self ._body = request_body
242
262
@@ -280,10 +300,10 @@ class RequestUpsert(Request):
280
300
def __init__ (self , conn , space_no , index_no , tuple_value , op_list ):
281
301
super (RequestUpsert , self ).__init__ (conn )
282
302
283
- request_body = msgpack .dumps ({IPROTO_SPACE_ID : space_no ,
284
- IPROTO_INDEX_ID : index_no ,
285
- IPROTO_TUPLE : tuple_value ,
286
- IPROTO_OPS : op_list })
303
+ request_body = self .dumps ({IPROTO_SPACE_ID : space_no ,
304
+ IPROTO_INDEX_ID : index_no ,
305
+ IPROTO_TUPLE : tuple_value ,
306
+ IPROTO_OPS : op_list })
287
307
288
308
self ._body = request_body
289
309
@@ -297,7 +317,7 @@ class RequestJoin(Request):
297
317
# pylint: disable=W0231
298
318
def __init__ (self , conn , server_uuid ):
299
319
super (RequestJoin , self ).__init__ (conn )
300
- request_body = msgpack .dumps ({IPROTO_SERVER_UUID : server_uuid })
320
+ request_body = self .dumps ({IPROTO_SERVER_UUID : server_uuid })
301
321
self ._body = request_body
302
322
303
323
@@ -312,7 +332,7 @@ def __init__(self, conn, cluster_uuid, server_uuid, vclock):
312
332
super (RequestSubscribe , self ).__init__ (conn )
313
333
assert isinstance (vclock , dict )
314
334
315
- request_body = msgpack .dumps ({
335
+ request_body = self .dumps ({
316
336
IPROTO_CLUSTER_UUID : cluster_uuid ,
317
337
IPROTO_SERVER_UUID : server_uuid ,
318
338
IPROTO_VCLOCK : vclock
@@ -329,6 +349,6 @@ class RequestOK(Request):
329
349
# pylint: disable=W0231
330
350
def __init__ (self , conn , sync ):
331
351
super (RequestOK , self ).__init__ (conn )
332
- request_body = msgpack .dumps ({IPROTO_CODE : self .request_type ,
333
- IPROTO_SYNC : sync })
352
+ request_body = self .dumps ({IPROTO_CODE : self .request_type ,
353
+ IPROTO_SYNC : sync })
334
354
self ._body = request_body
0 commit comments