diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e9fa3a..452bb79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ * Beta support for custom secret providers added to Manager. +## v1.5.1 - 2024-03-08 - env/* type conversion fix + +* Improved env variable to parameter type conversion logic, avoid converting + all numbers to float which caused some formatting issues in things that + weren't being careful enough. + ## v1.5.0 - 2024-02-26 - Checksums, nested expansion, & flexable values * Beta support for Manager.enable_checksum and octodns-sync --checksum Allows a diff --git a/octodns/__init__.py b/octodns/__init__.py index 12c987c..ebfb66e 100644 --- a/octodns/__init__.py +++ b/octodns/__init__.py @@ -1,4 +1,4 @@ 'OctoDNS: DNS as code - Tools for managing DNS across multiple providers' # TODO: remove __VERSION__ w/2.x -__version__ = __VERSION__ = '1.5.0' +__version__ = __VERSION__ = '1.5.1' diff --git a/octodns/manager.py b/octodns/manager.py index 7c84deb..524b397 100644 --- a/octodns/manager.py +++ b/octodns/manager.py @@ -434,6 +434,18 @@ class Manager(object): else: v = handler.fetch(name, source) + if isinstance(v, str): + try: + if '.' in v: + # has a dot, try converting it to a float + v = float(v) + else: + # no dot, try converting it to an int + v = int(v) + except ValueError: + # just leave it as a string + pass + kwargs[k] = v return kwargs diff --git a/tests/test_octodns_manager.py b/tests/test_octodns_manager.py index 04eb68c..53b0ec7 100644 --- a/tests/test_octodns_manager.py +++ b/tests/test_octodns_manager.py @@ -1137,6 +1137,7 @@ class TestManager(TestCase): environ['OCTODNS_TEST_1'] = '42' environ['OCTODNS_TEST_2'] = 'string' + environ['OCTODNS_TEST_3'] = '43.44' # empty self.assertEqual({}, manager._build_kwargs({})) @@ -1206,6 +1207,18 @@ class TestManager(TestCase): ), ) + # types/conversion + self.assertEqual( + {'int': 42, 'string': 'string', 'float': 43.44}, + manager._build_kwargs( + { + 'int': 'env/OCTODNS_TEST_1', + 'string': 'env/OCTODNS_TEST_2', + 'float': 'env/OCTODNS_TEST_3', + } + ), + ) + def test_config_secret_handlers(self): # config doesn't matter here manager = Manager(get_config_filename('simple.yaml'))