ipalib.config: Don't autoconvert values to float

When api.env is loaded, strings that "look like" floats got
auto-converted to floats.
This is wrong, as the conversion to float can lose precision.
Case in point: the api_version (e.g. '2.88') should never be
interpreted as float.

Do not automatically convert to float.

We have two numeric options: startup_timeout and wait_for_dns.
wait_for_dns is already converted to int when used in the code.
Convert startup_timeout to float explicitly when used, so
configuration that specified it with a decimal point continues
to work.

Reviewed-By: Fraser Tweedale <ftweedal@redhat.com>
This commit is contained in:
Petr Viktorin 2014-06-13 12:47:48 +02:00
parent da64c891e9
commit 521df77744
4 changed files with 5 additions and 9 deletions

View File

@ -259,11 +259,6 @@ class Env(object):
value = int(value)
elif key == 'basedn':
value = DN(value)
else:
try:
value = float(value)
except (TypeError, ValueError):
pass
assert type(value) in (unicode, int, float, bool, NoneType, DN)
object.__setattr__(self, key, value)
self.__d[key] = value

View File

@ -1135,6 +1135,7 @@ def wait_for_open_ports(host, ports, timeout=0):
in seconds may be specified to limit the wait. If the timeout is
exceeded, socket.timeout exception is raised.
"""
timeout = float(timeout)
if not isinstance(ports, (tuple, list)):
ports = [ports]
@ -1156,6 +1157,7 @@ def wait_for_open_socket(socket_name, timeout=0):
Wait until the specified socket on the local host is open. Timeout
in seconds may be specified to limit the wait.
"""
timeout = float(timeout)
op_timeout = time.time() + timeout
while True:

View File

@ -152,7 +152,7 @@ class Fedora16CAService(Fedora16Service):
'The httpd proxy is not installed, wait on local port')
use_proxy = False
root_logger.debug('Waiting until the CA is running')
timeout = api.env.startup_timeout
timeout = float(api.env.startup_timeout)
op_timeout = time.time() + timeout
while time.time() < op_timeout:
try:

View File

@ -43,8 +43,7 @@ good_vars = (
('trailing_whitespace', u' value ', u'value'),
('an_int', 42, 42),
('int_repr', ' 42 ', 42),
('a_float', 3.14, 3.14),
('float_repr', ' 3.14 ', 3.14),
('not_a_float', '3.14', u'3.14'),
('true', True, True),
('true_repr', ' True ', True),
('false', False, False),
@ -406,7 +405,7 @@ class test_Env(ClassChecker):
assert o.yes is True
assert o.no is False
assert o.number == 42
assert o.floating == 3.14
assert o.floating == '3.14'
def new(self, in_tree=False):
"""