Commit 84d5eda2 authored by Mukund Sivaraman's avatar Mukund Sivaraman
Browse files

Merge branch 'trac3239_3'

parents 15884428 782a17ca
......@@ -1554,7 +1554,10 @@ Parameters:
<term>integer</term>
<listitem>
<simpara>
A basic integer; can be set directly with <command>config set</command>, to any integer value.
A basic integer; can be set directly with
<command>config set</command>, to any integer
value. The value must not be quoted, or else, it
will be parsed as a string.
</simpara>
</listitem>
</varlistentry>
......@@ -1562,7 +1565,10 @@ Parameters:
<term>real</term>
<listitem>
<simpara>
A basic floating point number; can be set directly with <command>config set</command>, to any floating point value.
A basic floating point number; can be set
directly with <command>config set</command>, to
any floating point value. The value must not be
quoted, or else, it will be parsed as a string.
</simpara>
</listitem>
</varlistentry>
......@@ -1570,7 +1576,12 @@ Parameters:
<term>boolean</term>
<listitem>
<simpara>
A basic boolean value; can be set directly with <command>config set</command>, to either <command>true</command> or <command>false</command>.
A basic boolean value; can be set directly with
<command>config set</command>, to either
<command>true</command> or
<command>false</command>. The value must not be
quoted, or else, it will be parsed as a
string. Integer values are not allowed.
</simpara>
</listitem>
</varlistentry>
......@@ -1578,7 +1589,9 @@ Parameters:
<term>string</term>
<listitem>
<simpara>
A basic string value; can be set directly with <command>config set,</command> so any string. Double quotation marks are optional.
A basic string value; can be set directly with
<command>config set</command> to any
string. Double quotation marks are optional.
</simpara>
</listitem>
</varlistentry>
......
......@@ -446,8 +446,9 @@ WARNING: The Python readline module isn't available, so some command line
raise CmdMissParamSyntaxError(cmd.module, cmd.command, name)
param_nr += 1
# Convert parameter value according parameter spec file.
# Ignore check for commands belongs to module 'config' or 'execute
# Convert parameter value according to parameter spec
# file. Ignore check for commands belonging to module 'config'
# or 'execute'.
if cmd.module != CONFIG_MODULE_NAME and\
cmd.module != command_sets.EXECUTE_MODULE_NAME:
for param_name in cmd.params:
......
......@@ -53,6 +53,22 @@ def spec_part_is_any(spec_part):
return (type(spec_part) == dict and 'item_type' in spec_part and
spec_part['item_type'] == "any")
def _type_as_string(value):
if type(value) == int:
return 'integer'
elif type(value) == float:
return 'real'
elif type(value) == bool:
return 'boolean'
elif type(value) == str:
return 'string'
elif type(value) == list:
return 'list'
elif type(value) == dict:
return 'map'
else:
return '<unknown>'
def check_type(spec_part, value):
"""Does nothing if the value is of the correct type given the
specification part relevant for the value. Raises an
......@@ -65,27 +81,35 @@ def check_type(spec_part, value):
if data_type == "integer":
if type(value) != int:
raise isc.cc.data.DataTypeError(str(value) + " is not an integer")
raise isc.cc.data.DataTypeError('%s is not an integer (%s was passed)' % \
(str(value), _type_as_string(value)))
if value > sys.maxsize:
raise isc.cc.data.DataTypeError(str(value) + " is too large an integer")
raise isc.cc.data.DataTypeError('%s is too large an integer' % \
(str(value)))
elif data_type == "real":
if type(value) != float:
raise isc.cc.data.DataTypeError(str(value) + " is not a real")
raise isc.cc.data.DataTypeError('%s is not a real (%s was passed)' % \
(str(value), _type_as_string(value)))
if float(value) > sys.float_info.max:
raise isc.cc.data.DataTypeError(str(value) + " is too large a float")
raise isc.cc.data.DataTypeError('%s is too large for a float' % \
(str(value)))
elif data_type == "boolean" and type(value) != bool:
raise isc.cc.data.DataTypeError(str(value) + " is not a boolean")
raise isc.cc.data.DataTypeError('%s is not a boolean (%s was passed)' % \
(str(value), _type_as_string(value)))
elif data_type == "string" and type(value) != str:
raise isc.cc.data.DataTypeError(str(value) + " is not a string")
raise isc.cc.data.DataTypeError('%s is not a string (%s was passed)' % \
(str(value), _type_as_string(value)))
elif data_type == "list":
if type(value) != list:
raise isc.cc.data.DataTypeError(str(value) + " is not a list")
raise isc.cc.data.DataTypeError('%s is not a list (%s was passed)' % \
(str(value), _type_as_string(value)))
else:
for element in value:
check_type(spec_part['list_item_spec'], element)
elif data_type == "map" and type(value) != dict:
# todo: check types of map contents too
raise isc.cc.data.DataTypeError(str(value) + " is not a map")
raise isc.cc.data.DataTypeError('%s is not a map (%s was passed)' % \
(str(value), _type_as_string(value)))
def convert_type(spec_part, value):
"""Convert the given value(type is string) according specification
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment