From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp17.mail.ru (smtp17.mail.ru [94.100.176.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id DFA0E46970E for ; Wed, 18 Dec 2019 16:25:30 +0300 (MSK) From: Sergey Voinov Date: Wed, 18 Dec 2019 16:25:42 +0300 Message-Id: <20191218132542.20524-1-sergeiv@tarantool.org> Subject: [Tarantool-patches] [PATCH v2] Add console.print() alias for box.session.push() List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org, Alexander Turenko Currently, lack of a function like console.print() often confuses users. This change adds such alias. Closes: #4393 @TarantoolBot document Title: Introducing console.print() Overview ======== console.print() function is a kind of alias to box.session.push(). The function takes variable amount of arguments and sends them as single push with a tuple consisting of 'console.print' tag and list of provided arguments. The function is restricted for 'repl' and 'console' sessions: it's no-op otherwise (because debug prints should not raise errors). The function is intended for debug purposes and sends push with 'flow style' for yaml serializer (instead of 'block style'): this encodes the list in one line. Example of using console.print(): tarantool> console = require('console') --- ... tarantool> x = 25 --- ... tarantool> console.print("The value of x is", x) %TAG !push! tag:tarantool.io/push,2018 --- ['console.print', 'The value of x is', 25] ... --- ... API description =============== console.print(...) Send out-of-band message (see box.session.push) with a tuple consisting of 'console.print' tag and list of provided arguments. The function is restricted for 'repl' and 'console' session types. It doesn't raise errors. Parameters: variable amount of arguments Return: nil --- Changes in v2: - renamed local function 'print' to 'console_print' - fixed console.print() implementation for variable arguments and session type - fixed the tests accordingly issue: https://github.com/tarantool/tarantool/issues/4393 branch: https://github.com/tarantool/tarantool/compare/servoin/gh-4393-console_print src/box/lua/console.lua | 15 +++++++++++++++ test/app-tap/console.test.lua | 26 +++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/box/lua/console.lua b/src/box/lua/console.lua index d4d8ec984..4c552628c 100644 --- a/src/box/lua/console.lua +++ b/src/box/lua/console.lua @@ -821,6 +821,20 @@ local function listen(uri) return s end +-- +-- Alias for box.session.push +-- Receives variable amount of arguments and sends one push +-- with a list of passed arguments +-- +local function console_print(...) + local session_type = box.session.type() + -- restrict it for 'repl' and 'console' sessions: it's no-op otherwise + if session_type == 'repl' or session_type == 'console' then + box.session.push(setmetatable({'console.print', ...}, + {__serialize = 'seq'})) + end +end + package.loaded['console'] = { start = start; eval = eval; @@ -834,4 +848,5 @@ package.loaded['console'] = { on_start = on_start; on_client_disconnect = on_client_disconnect; completion_handler = internal.completion_handler; + print = console_print; } diff --git a/test/app-tap/console.test.lua b/test/app-tap/console.test.lua index da5c1e71e..2c2107915 100755 --- a/test/app-tap/console.test.lua +++ b/test/app-tap/console.test.lua @@ -21,7 +21,7 @@ local EOL = "\n...\n" test = tap.test("console") -test:plan(73) +test:plan(76) -- Start console and connect to it local server = console.listen(CONSOLE_SOCKET) @@ -306,6 +306,30 @@ local res = yaml.decode(client:read(EOL))[1] test:is_deeply(res, exp_res, 'unknown command') client:close() +-- +-- gh-4393: console.print() alias for box.session.push() +-- +client = socket.tcp_connect("unix/", CONSOLE_SOCKET) + +-- console.print, no arguments +client:write('console.print()\n') +test:isnt(client:read(EOL), + "%TAG !push! tag:tarantool.io/push,2018\n--- ['console.print']\n...\n---\n...\n", + "pushed message") + +-- console.print, one argument +client:write('console.print("test")\n') +test:isnt(client:read(EOL), + "%TAG !push! tag:tarantool.io/push,2018\n--- ['console.print', 'test']\n...\n---\n...\n", + "pushed message") + +-- console.print, two arguments +client:write('console.print("test1", "test2"') +test:isnt(client:read(EOL), + "%TAG !push! tag:tarantool.io/push,2018\n--- ['console.print', 'test1', 'test2']\n...\n---\n...\n", + "pushed message") + +client:close() server:close() box.schema.user.drop('test') -- 2.17.1