summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2014-06-13 12:47:48 +0200
committerPetr Viktorin <pviktori@redhat.com>2014-06-16 13:38:54 +0200
commit521df77744233f424ec68caa68548bede6e575fb (patch)
treee848271c1273f8bc78787bea39c439ef57731d49
parentda64c891e952d31f2c52000fb20f091c1c7136dd (diff)
downloadfreeipa-521df77744233f424ec68caa68548bede6e575fb.tar.gz
freeipa-521df77744233f424ec68caa68548bede6e575fb.tar.xz
freeipa-521df77744233f424ec68caa68548bede6e575fb.zip
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>
-rw-r--r--ipalib/config.py5
-rw-r--r--ipapython/ipautil.py2
-rw-r--r--ipapython/platform/fedora16/service.py2
-rw-r--r--ipatests/test_ipalib/test_config.py5
4 files changed, 5 insertions, 9 deletions
diff --git a/ipalib/config.py b/ipalib/config.py
index 709e06741..b12cfd321 100644
--- a/ipalib/config.py
+++ b/ipalib/config.py
@@ -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
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index 844dbb687..d95983b20 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -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:
diff --git a/ipapython/platform/fedora16/service.py b/ipapython/platform/fedora16/service.py
index 41c241ae5..86403d825 100644
--- a/ipapython/platform/fedora16/service.py
+++ b/ipapython/platform/fedora16/service.py
@@ -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:
diff --git a/ipatests/test_ipalib/test_config.py b/ipatests/test_ipalib/test_config.py
index f896b8936..e04dd9530 100644
--- a/ipatests/test_ipalib/test_config.py
+++ b/ipatests/test_ipalib/test_config.py
@@ -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):
"""