Skip to content
Snippets Groups Projects
Commit 091ab9d4 authored by Vladislav Shpilevoy's avatar Vladislav Shpilevoy Committed by Kirill Yukhin
Browse files

app: fix error messages for not specified parameters in argparse

Argparse module stores unspecified parameter values as boolean
true. It led to a problem, that a command line '--value' with
'value' defined as a number or a string, showed a strange error
message:

    Expected number/string, got "true"

Even though a user didn't pass any value. Now it shows 'nothing'
instead of '"true"'. That is clearer.

Follow up #4076

(cherry picked from commit c214d086)
parent 77ba8a4d
No related branches found
No related tags found
No related merge requests found
......@@ -20,14 +20,21 @@ local function result_set_add(t_out, key, val)
end
end
local function err_bad_parameter_value(name, got, expected)
if type(got) ~= 'string' then
got = 'nothing'
else
got = string.format('"%s"', got)
end
error(string.format('Bad value for parameter "%s". Expected %s, got %s',
name, expected, got))
end
local function convert_parameter_simple(name, convert_from, convert_to)
if convert_to == 'number' then
local converted = tonumber(convert_from)
if converted == nil then
error(
('Bad value for parameter %s. expected type %s, got "%s"')
:format(name, convert_to, convert_from)
)
return err_bad_parameter_value(name, convert_from, convert_to)
end
return converted
elseif convert_to == 'boolean' then
......@@ -41,20 +48,14 @@ local function convert_parameter_simple(name, convert_from, convert_to)
if convert_from == '1' or convert_from == 'true' then
return true
end
error(
('Bad input for parameter "%s". Expected boolean, got "%s"')
:format(name, convert_from)
)
return err_bad_parameter_value(name, convert_from, convert_to)
elseif convert_to == 'string' then
if type(convert_from) ~= 'string' then
error(
('Bad input for parameter "%s". Expected string, got "%s"')
:format(name, convert_from)
)
return err_bad_parameter_value(name, convert_from, convert_to)
end
else
error(
('Bad convertion format "%s" provided for %s')
('Bad conversion format "%s" provided for %s')
:format(convert_to, name)
)
end
......
......@@ -137,12 +137,12 @@ argparse({'--verh=42'}, {'verh'})
...
argparse({'--verh=42'}, {{'verh', 'boolean'}})
---
- error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "verh". Expected
- error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "verh". Expected
boolean, got "42"'
...
argparse({'--verh=42'}, {{'verh', 'boolean+'}})
---
- error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "verh". Expected
- error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "verh". Expected
boolean, got "42"'
...
argparse({'--verh=42'}, {'niz'})
......
......@@ -48,10 +48,36 @@ args = {'--flag1', 'abc'}
| ...
argparse(args, params)
| ---
| - error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "flag1". Expected
| - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "flag1". Expected
| boolean, got "abc"'
| ...
--
-- When parameter value was omitted, it was replaced internally
-- with boolean true, and sometimes was showed in error messages.
-- Now it is 'nothing'.
--
params = {}
| ---
| ...
params[1] = {'value', 'number'}
| ---
| ...
argparse({'--value'}, params)
| ---
| - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "value". Expected
| number, got nothing'
| ...
params[1][2] = 'string'
| ---
| ...
argparse({'--value'}, params)
| ---
| - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "value". Expected
| string, got nothing'
| ...
test_run:cmd("clear filter")
| ---
| - true
......
......@@ -17,4 +17,16 @@ argparse(args, params)
args = {'--flag1', 'abc'}
argparse(args, params)
--
-- When parameter value was omitted, it was replaced internally
-- with boolean true, and sometimes was showed in error messages.
-- Now it is 'nothing'.
--
params = {}
params[1] = {'value', 'number'}
argparse({'--value'}, params)
params[1][2] = 'string'
argparse({'--value'}, params)
test_run:cmd("clear filter")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment