From e3e4f7595d62739cfcc0c1796e27ea061bf5cfff Mon Sep 17 00:00:00 2001 From: Harm Geerts Date: Fri, 14 Oct 2022 16:55:05 +0200 Subject: [PATCH] Fix #209 ansible.utils filters should raise AnsibleFilterError (#210) * Fix #209 ansible.utils filters should raise AnsibleFilterError Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- changelogs/fragments/209.yaml | 3 +++ plugins/filter/ipaddr.py | 6 +++--- plugins/filter/ipv4.py | 6 +++--- plugins/filter/ipv6.py | 6 +++--- plugins/filter/ipwrap.py | 6 +++--- tests/unit/plugins/filter/test_ipaddr.py | 11 +++++++++++ tests/unit/plugins/filter/test_ipv4.py | 14 ++++++++++++++ tests/unit/plugins/filter/test_ipv6.py | 14 ++++++++++++++ tests/unit/plugins/filter/test_ipwrap.py | 14 ++++++++++++++ 9 files changed, 68 insertions(+), 12 deletions(-) create mode 100644 changelogs/fragments/209.yaml diff --git a/changelogs/fragments/209.yaml b/changelogs/fragments/209.yaml new file mode 100644 index 0000000..9f1d7c7 --- /dev/null +++ b/changelogs/fragments/209.yaml @@ -0,0 +1,3 @@ +--- +bugfixes: + - Fix filters to only raise AnsibleFilterError exceptions (https://github.com/ansible-collections/ansible.utils/issues/209). diff --git a/plugins/filter/ipaddr.py b/plugins/filter/ipaddr.py index eca588f..9c7fb81 100644 --- a/plugins/filter/ipaddr.py +++ b/plugins/filter/ipaddr.py @@ -10,7 +10,7 @@ from __future__ import absolute_import, division, print_function from functools import partial -from ansible.errors import AnsibleError, AnsibleFilterError +from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( AnsibleArgSpecValidator, @@ -261,7 +261,7 @@ def _ipaddr(*args, **kwargs): elif isinstance(data["value"], list): pass else: - raise AnsibleError( + raise AnsibleFilterError( "Unrecognized type <{0}> for ipaddr filter <{1}>".format( type(data["value"]), "value", @@ -269,7 +269,7 @@ def _ipaddr(*args, **kwargs): ) except (TypeError, ValueError): - raise AnsibleError( + raise AnsibleFilterError( "Unrecognized type <{0}> for ipaddr filter <{1}>".format(type(data["value"]), "value"), ) diff --git a/plugins/filter/ipv4.py b/plugins/filter/ipv4.py index abebffa..3443eea 100644 --- a/plugins/filter/ipv4.py +++ b/plugins/filter/ipv4.py @@ -10,7 +10,7 @@ from __future__ import absolute_import, division, print_function from functools import partial -from ansible.errors import AnsibleError, AnsibleFilterError +from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( AnsibleArgSpecValidator, @@ -139,7 +139,7 @@ def _ipv4(*args, **kwargs): elif isinstance(data["value"], list): pass else: - raise AnsibleError( + raise AnsibleFilterError( "Unrecognized type <{0}> for ipv4 filter <{1}>".format( type(data["value"]), "value", @@ -147,7 +147,7 @@ def _ipv4(*args, **kwargs): ) except (TypeError, ValueError): - raise AnsibleError( + raise AnsibleFilterError( "Unrecognized type <{0}> for ipv4 filter <{1}>".format(type(data["value"]), "value"), ) aav = AnsibleArgSpecValidator(data=data, schema=DOCUMENTATION, name="ipv4") diff --git a/plugins/filter/ipv6.py b/plugins/filter/ipv6.py index a273a62..4fad108 100644 --- a/plugins/filter/ipv6.py +++ b/plugins/filter/ipv6.py @@ -10,7 +10,7 @@ from __future__ import absolute_import, division, print_function from functools import partial -from ansible.errors import AnsibleError, AnsibleFilterError +from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( AnsibleArgSpecValidator, @@ -157,7 +157,7 @@ def _ipv6(*args, **kwargs): elif isinstance(data["value"], list): pass else: - raise AnsibleError( + raise AnsibleFilterError( "Unrecognized type <{0}> for ipv6 filter <{1}>".format( type(data["value"]), "value", @@ -165,7 +165,7 @@ def _ipv6(*args, **kwargs): ) except (TypeError, ValueError): - raise AnsibleError( + raise AnsibleFilterError( "Unrecognized type <{0}> for ipv6 filter <{1}>".format(type(data["value"]), "value"), ) aav = AnsibleArgSpecValidator(data=data, schema=DOCUMENTATION, name="ipv6") diff --git a/plugins/filter/ipwrap.py b/plugins/filter/ipwrap.py index 278739c..8b9b7ea 100644 --- a/plugins/filter/ipwrap.py +++ b/plugins/filter/ipwrap.py @@ -12,7 +12,7 @@ import types from functools import partial -from ansible.errors import AnsibleError, AnsibleFilterError +from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( AnsibleArgSpecValidator, @@ -160,7 +160,7 @@ def _ipwrap(*args, **kwargs): elif isinstance(data["value"], bool): pass else: - raise AnsibleError( + raise AnsibleFilterError( "Unrecognized type <{0}> for ipwrap filter <{1}>".format( type(data["value"]), "value", @@ -168,7 +168,7 @@ def _ipwrap(*args, **kwargs): ) except (TypeError, ValueError): - raise AnsibleError( + raise AnsibleFilterError( "Unrecognized type <{0}> for ipwrap filter <{1}>".format(type(data["value"]), "value"), ) aav = AnsibleArgSpecValidator(data=data, schema=DOCUMENTATION, name="ipwrap") diff --git a/tests/unit/plugins/filter/test_ipaddr.py b/tests/unit/plugins/filter/test_ipaddr.py index 72783c1..afdf194 100644 --- a/tests/unit/plugins/filter/test_ipaddr.py +++ b/tests/unit/plugins/filter/test_ipaddr.py @@ -16,9 +16,11 @@ import unittest import pytest from ansible.errors import AnsibleFilterError +from ansible.template import AnsibleUndefined from ansible_collections.ansible.utils.plugins.filter.cidr_merge import cidr_merge from ansible_collections.ansible.utils.plugins.filter.ip4_hex import ip4_hex +from ansible_collections.ansible.utils.plugins.filter.ipaddr import _ipaddr from ansible_collections.ansible.utils.plugins.filter.ipmath import ipmath from ansible_collections.ansible.utils.plugins.filter.ipsubnet import ipsubnet from ansible_collections.ansible.utils.plugins.filter.network_in_network import network_in_network @@ -57,6 +59,15 @@ class TestIpFilter(unittest.TestCase): self.assertEqual(cidr_merge(subnets), ["1.12.1.1/32", "1.12.1.255/32"]) self.assertEqual(cidr_merge(subnets, "span"), "1.12.1.0/24") + def test_ipaddr_undefined_value(self): + """Check ipaddr filter undefined value""" + args = ["", AnsibleUndefined(name="my_ip"), ""] + with pytest.raises( + AnsibleFilterError, + match="Unrecognized type <> for ipaddr filter ", + ): + _ipaddr(*args) + def test_ipaddr_empty_query(self): self.assertEqual(ipaddr("192.0.2.230"), "192.0.2.230") self.assertEqual(ipaddr("192.0.2.230/30"), "192.0.2.230/30") diff --git a/tests/unit/plugins/filter/test_ipv4.py b/tests/unit/plugins/filter/test_ipv4.py index 1cf1f79..ecd57a4 100644 --- a/tests/unit/plugins/filter/test_ipv4.py +++ b/tests/unit/plugins/filter/test_ipv4.py @@ -14,6 +14,11 @@ __metaclass__ = type import unittest +import pytest + +from ansible.errors import AnsibleFilterError +from ansible.template import AnsibleUndefined + from ansible_collections.ansible.utils.plugins.filter.ipv4 import _ipv4 @@ -40,6 +45,15 @@ class TestIp4(unittest.TestCase): def setUp(self): pass + def test_ipv4_undefined_value(self): + """Check ipv4 filter undefined value""" + args = ["", AnsibleUndefined(name="my_ip"), ""] + with pytest.raises( + AnsibleFilterError, + match="Unrecognized type <> for ipv4 filter ", + ): + _ipv4(*args) + def test_ipv4_filter_empty_query(self): """Check ipv4 filter empty query""" args = ["", VALID_DATA, ""] diff --git a/tests/unit/plugins/filter/test_ipv6.py b/tests/unit/plugins/filter/test_ipv6.py index 21ccbdc..4f730f9 100644 --- a/tests/unit/plugins/filter/test_ipv6.py +++ b/tests/unit/plugins/filter/test_ipv6.py @@ -14,6 +14,11 @@ __metaclass__ = type import unittest +import pytest + +from ansible.errors import AnsibleFilterError +from ansible.template import AnsibleUndefined + from ansible_collections.ansible.utils.plugins.filter.ipv6 import _ipv6 @@ -43,6 +48,15 @@ class TestIp6(unittest.TestCase): def setUp(self): pass + def test_ipv6_undefined_value(self): + """Check ipv6 filter undefined value""" + args = ["", AnsibleUndefined(name="my_ip"), ""] + with pytest.raises( + AnsibleFilterError, + match="Unrecognized type <> for ipv6 filter ", + ): + _ipv6(*args) + def test_ipv6_filter_empty_query(self): """Check ipv6 filter empty query""" args = ["", VALID_DATA, ""] diff --git a/tests/unit/plugins/filter/test_ipwrap.py b/tests/unit/plugins/filter/test_ipwrap.py index eac716f..fd31d57 100644 --- a/tests/unit/plugins/filter/test_ipwrap.py +++ b/tests/unit/plugins/filter/test_ipwrap.py @@ -14,6 +14,11 @@ __metaclass__ = type import unittest +import pytest + +from ansible.errors import AnsibleFilterError +from ansible.template import AnsibleUndefined + from ansible_collections.ansible.utils.plugins.filter.ipwrap import _ipwrap @@ -45,6 +50,15 @@ class TestIpWrap(unittest.TestCase): def setUp(self): pass + def test_ipwrap_undefined_value(self): + """Check ipwrap filter undefined value""" + args = ["", AnsibleUndefined(name="my_ip"), ""] + with pytest.raises( + AnsibleFilterError, + match="Unrecognized type <> for ipwrap filter ", + ): + _ipwrap(*args) + def test_valid_data_list(self): """Check passing valid argspec(list)""" args = ["", VALID_DATA, ""]