Skip to content

Commit 6c2f495

Browse files
committed
Implement call of 1.7 and make it the main one
closes gh-82
1 parent bdf48e0 commit 6c2f495

File tree

4 files changed

+47
-17
lines changed

4 files changed

+47
-17
lines changed

tarantool/connection.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ def __init__(self, host, port,
8888
reconnect_max_attempts=RECONNECT_MAX_ATTEMPTS,
8989
reconnect_delay=RECONNECT_DELAY,
9090
connect_now=True,
91-
encoding=ENCODING_DEFAULT):
91+
encoding=ENCODING_DEFAULT,
92+
call_16=False):
9293
'''
9394
Initialize a connection to the server.
9495
@@ -121,6 +122,7 @@ def __init__(self, host, port,
121122
self.connected = False
122123
self.error = True
123124
self.encoding = encoding
125+
self.call_16 = call_16
124126
if connect_now:
125127
self.connect()
126128

@@ -344,7 +346,7 @@ def call(self, func_name, *args):
344346
if len(args) == 1 and isinstance(args[0], (list, tuple)):
345347
args = args[0]
346348

347-
request = RequestCall(self, func_name, args)
349+
request = RequestCall(self, func_name, args, self.call_16)
348350
response = self._send_request(request)
349351
return response
350352

tarantool/const.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@
3939
REQUEST_TYPE_REPLACE = 3
4040
REQUEST_TYPE_UPDATE = 4
4141
REQUEST_TYPE_DELETE = 5
42-
REQUEST_TYPE_CALL = 6
42+
REQUEST_TYPE_CALL16 = 6
4343
REQUEST_TYPE_AUTHENTICATE = 7
4444
REQUEST_TYPE_EVAL = 8
4545
REQUEST_TYPE_UPSERT = 9
46+
REQUEST_TYPE_CALL = 10
4647
REQUEST_TYPE_PING = 64
4748
REQUEST_TYPE_JOIN = 65
4849
REQUEST_TYPE_SUBSCRIBE = 66

tarantool/request.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
REQUEST_TYPE_DELETE,
3636
REQUEST_TYPE_UPDATE,
3737
REQUEST_TYPE_UPSERT,
38+
REQUEST_TYPE_CALL16,
3839
REQUEST_TYPE_CALL,
3940
REQUEST_TYPE_EVAL,
4041
REQUEST_TYPE_AUTHENTICATE,
@@ -218,7 +219,9 @@ class RequestCall(Request):
218219
request_type = REQUEST_TYPE_CALL
219220

220221
# pylint: disable=W0231
221-
def __init__(self, conn, name, args):
222+
def __init__(self, conn, name, args, call_16):
223+
if call_16:
224+
self.request_type = REQUEST_TYPE_CALL16
222225
super(RequestCall, self).__init__(conn)
223226
assert isinstance(args, (list, tuple))
224227

tests/suites/test_dml.py

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# -*- coding: utf-8 -*-
22

3-
import six
43
import yaml
54
import unittest
65
import tarantool
@@ -154,29 +153,54 @@ def test_06_update(self):
154153
self.assertSequenceEqual(self.con.update('space_1', (2,), [('#', 2, 2)]),
155154
[[2, 2, 'tuplalal_3']])
156155

157-
def test_07_call(self):
158-
self.assertSequenceEqual(self.con.call('json.decode', '[123, 234, 345]'), [[123, 234, 345]])
159-
self.assertSequenceEqual(self.con.call('json.decode', ['[123, 234, 345]']), [[123, 234, 345]])
160-
self.assertSequenceEqual(self.con.call('json.decode', ('[123, 234, 345]',)), [[123, 234, 345]])
156+
def test_07_call_16(self):
157+
con = tarantool.Connection('localhost', self.srv.args['primary'], call_16 = True)
158+
con.authenticate('test', 'test')
159+
self.assertSequenceEqual(con.call('json.decode', '[123, 234, 345]'), [[123, 234, 345]])
160+
self.assertSequenceEqual(con.call('json.decode', ['[123, 234, 345]']), [[123, 234, 345]])
161+
self.assertSequenceEqual(con.call('json.decode', ('[123, 234, 345]',)), [[123, 234, 345]])
161162
with self.assertRaisesRegexp(tarantool.DatabaseError, '(32, .*)'):
162-
self.con.call('json.decode')
163+
con.call('json.decode')
163164
with self.assertRaisesRegexp(tarantool.DatabaseError, '(32, .*)'):
164-
self.con.call('json.decode', '{[1, 2]: "world"}')
165-
ans = self.con.call('fiber.time')
165+
con.call('json.decode', '{[1, 2]: "world"}')
166+
ans = con.call('fiber.time')
166167
self.assertEqual(len(ans), 1)
167168
self.assertEqual(len(ans[0]), 1)
168169
self.assertIsInstance(ans[0][0], float)
169-
ans = self.con.call('fiber.time64')
170+
ans = con.call('fiber.time64')
170171
self.assertEqual(len(ans), 1)
171172
self.assertEqual(len(ans[0]), 1)
172-
self.assertIsInstance(ans[0][0], six.integer_types)
173-
ans = self.con.call('uuid.str')
173+
self.assertIsInstance(ans[0][0], tarantool.utils.integer_types)
174+
ans = con.call('uuid.str')
174175
self.assertEqual(len(ans), 1)
175176
self.assertEqual(len(ans[0]), 1)
176177
self.assertIsInstance(ans[0][0], str)
177178

178-
self.assertSequenceEqual(self.con.call('box.tuple.new', [1, 2, 3, 'fld_1']), [[1, 2, 3, 'fld_1']])
179-
self.assertSequenceEqual(self.con.call('box.tuple.new', 'fld_1'), [['fld_1']])
179+
self.assertSequenceEqual(con.call('box.tuple.new', [1, 2, 3, 'fld_1']), [[1, 2, 3, 'fld_1']])
180+
self.assertSequenceEqual(con.call('box.tuple.new', 'fld_1'), [['fld_1']])
181+
182+
def test_07_call_17(self):
183+
con = tarantool.Connection('localhost', self.srv.args['primary'])
184+
con.authenticate('test', 'test')
185+
self.assertSequenceEqual(con.call('json.decode', '[123, 234, 345]'), [[123, 234, 345]])
186+
self.assertSequenceEqual(con.call('json.decode', ['[123, 234, 345]']), [[123, 234, 345]])
187+
self.assertSequenceEqual(con.call('json.decode', ('[123, 234, 345]',)), [[123, 234, 345]])
188+
with self.assertRaisesRegexp(tarantool.DatabaseError, '(32, .*)'):
189+
con.call('json.decode')
190+
with self.assertRaisesRegexp(tarantool.DatabaseError, '(32, .*)'):
191+
con.call('json.decode', '{[1, 2]: "world"}')
192+
ans = con.call('fiber.time')
193+
self.assertEqual(len(ans), 1)
194+
self.assertIsInstance(ans[0], float)
195+
ans = con.call('fiber.time64')
196+
self.assertEqual(len(ans), 1)
197+
self.assertIsInstance(ans[0], tarantool.utils.integer_types)
198+
ans = con.call('uuid.str')
199+
self.assertEqual(len(ans), 1)
200+
self.assertIsInstance(ans[0], str)
201+
202+
self.assertSequenceEqual(con.call('box.tuple.new', [1, 2, 3, 'fld_1']), [[1, 2, 3, 'fld_1']])
203+
self.assertSequenceEqual(con.call('box.tuple.new', 'fld_1'), [['fld_1']])
180204

181205
def test_08_eval(self):
182206
self.assertSequenceEqual(self.con.eval('return json.decode(...)',

0 commit comments

Comments
 (0)