[Freeipa-devel] [PATCHES] 0581-0582 ipalib.config: Only convert numeric values to float
Fraser Tweedale
ftweedal at redhat.com
Mon Jun 16 05:04:57 UTC 2014
On Fri, Jun 13, 2014 at 02:12:41PM +0200, Petr Viktorin wrote:
> First patch: minor fix in env loading
>
> Second patch:
>
> When api.env is loaded, strings that "look like" floats get auto-converted
> to floats. This is wrong, as the conversion can lose precision, which
> matters for the new api_version.
>
> Here's a patch that disables this conversion, and fixes places that the
> disabling might break.
>
> --
> Petr³
Changes look fine, apply fine, and ipalib tests pass. ACK to both.
Fraser
> From 47b6db3e91a16b6598c655edf17d1533b5e3dcc8 Mon Sep 17 00:00:00 2001
> From: Petr Viktorin <pviktori at redhat.com>
> Date: Fri, 13 Jun 2014 12:40:32 +0200
> Subject: [PATCH] ipalib.config: Only convert basedn to DN
>
> The current code would convert values to DN if the key was
> a substring of 'basedn', e.g. 'base' or 'sed'.
>
> Only convert if we're actually dealing with 'basedn'.
> ---
> ipalib/config.py | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/ipalib/config.py b/ipalib/config.py
> index f86c0a5ea3885d2bf89712f91b0c0705dceedd32..709e067416046b2c5174554043be87fa27042bf9 100644
> --- a/ipalib/config.py
> +++ b/ipalib/config.py
> @@ -257,7 +257,7 @@ def __setitem__(self, key, value):
> value = m[value]
> elif value.isdigit():
> value = int(value)
> - elif key in ('basedn'):
> + elif key == 'basedn':
> value = DN(value)
> else:
> try:
> --
> 1.9.0
>
> From bb3d1e766140b0ed1cbf37562080070cf46cab1e Mon Sep 17 00:00:00 2001
> From: Petr Viktorin <pviktori at redhat.com>
> Date: Fri, 13 Jun 2014 12:47:48 +0200
> Subject: [PATCH] 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.
> ---
> ipalib/config.py | 5 -----
> ipapython/ipautil.py | 2 ++
> ipapython/platform/fedora16/service.py | 2 +-
> ipatests/test_ipalib/test_config.py | 5 ++---
> 4 files changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/ipalib/config.py b/ipalib/config.py
> index 709e067416046b2c5174554043be87fa27042bf9..b12cfd32184edf964353fda9304dbb5149eb525f 100644
> --- a/ipalib/config.py
> +++ b/ipalib/config.py
> @@ -259,11 +259,6 @@ def __setitem__(self, key, value):
> 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 844dbb68792c483552149be7ae442a1e40eb9626..d95983b208f47ff42dfc254248e2f4f03d372bff 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 41c241ae5c31df56544b5b2bebd71c5ef109dd6e..86403d82583ed1e70044ce788d7ead7a5f3544a1 100644
> --- a/ipapython/platform/fedora16/service.py
> +++ b/ipapython/platform/fedora16/service.py
> @@ -152,7 +152,7 @@ def __wait_until_running(self):
> '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 f896b893601c3ce85213cac39338095d7ac946f7..e04dd953074342f09b0ca4ca6dbea37eb37aaf48 100644
> --- a/ipatests/test_ipalib/test_config.py
> +++ b/ipatests/test_ipalib/test_config.py
> @@ -43,8 +43,7 @@
> ('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 @@ def test_merge_from_file(self):
> 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):
> """
> --
> 1.9.0
>
> _______________________________________________
> Freeipa-devel mailing list
> Freeipa-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/freeipa-devel
More information about the Freeipa-devel
mailing list