mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-08-11 00:24:22 -07:00
optimize and import re
This commit is contained in:
parent
f18cb9d8b6
commit
9f02444e55
1 changed files with 12 additions and 17 deletions
|
@ -126,6 +126,7 @@ _value:
|
||||||
type: raw
|
type: raw
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
from ansible.errors import AnsibleFilterError
|
from ansible.errors import AnsibleFilterError
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,18 +169,17 @@ def remove_keys_from_values(data, values=None, recursive=True, matching_paramete
|
||||||
Removes keys from dictionaries or lists of dictionaries
|
Removes keys from dictionaries or lists of dictionaries
|
||||||
if their values match the specified values or regex patterns.
|
if their values match the specified values or regex patterns.
|
||||||
"""
|
"""
|
||||||
default_values = ['', [], {}, None]
|
|
||||||
if values is None:
|
|
||||||
values = default_values
|
|
||||||
elif not isinstance(values, list):
|
|
||||||
values = [values]
|
|
||||||
|
|
||||||
if matching_parameter not in ["equal", "regex"]:
|
if not isinstance(data, (dict, list)):
|
||||||
raise AnsibleFilterError(f"Invalid matching_parameter '{matching_parameter}'. Use 'equal' or 'regex'.")
|
raise AnsibleFilterError("Input must be a dictionary or a list.")
|
||||||
|
|
||||||
|
if matching_parameter not in ("equal", "regex"):
|
||||||
|
raise AnsibleFilterError("matching_parameter must be 'equal' or 'regex'")
|
||||||
|
|
||||||
|
values = values if isinstance(values, list) else [values or '', [], {}, None]
|
||||||
|
|
||||||
regex_patterns = []
|
regex_patterns = []
|
||||||
if matching_parameter == "regex":
|
if matching_parameter == "regex":
|
||||||
# Convert string patterns to compiled regex
|
|
||||||
try:
|
try:
|
||||||
regex_patterns = [re.compile(v) for v in values]
|
regex_patterns = [re.compile(v) for v in values]
|
||||||
except re.error as e:
|
except re.error as e:
|
||||||
|
@ -188,7 +188,7 @@ def remove_keys_from_values(data, values=None, recursive=True, matching_paramete
|
||||||
def should_remove(val):
|
def should_remove(val):
|
||||||
if matching_parameter == "equal":
|
if matching_parameter == "equal":
|
||||||
return val in values
|
return val in values
|
||||||
elif matching_parameter == "regex" and isinstance(val, str):
|
if matching_parameter == "regex" and isinstance(val, str):
|
||||||
return any(p.match(val) for p in regex_patterns)
|
return any(p.match(val) for p in regex_patterns)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -200,15 +200,10 @@ def remove_keys_from_values(data, values=None, recursive=True, matching_paramete
|
||||||
if not should_remove(clean(v) if recursive else v)
|
if not should_remove(clean(v) if recursive else v)
|
||||||
}
|
}
|
||||||
elif isinstance(obj, list):
|
elif isinstance(obj, list):
|
||||||
return [clean(item) if recursive else item for item in obj]
|
return [clean(i) if recursive else i for i in obj]
|
||||||
else:
|
return obj
|
||||||
return obj
|
|
||||||
|
|
||||||
if isinstance(data, (dict, list)):
|
|
||||||
return clean(data)
|
|
||||||
else:
|
|
||||||
raise AnsibleFilterError("Input must be a dictionary or a list of dictionaries.")
|
|
||||||
|
|
||||||
|
return clean(data)
|
||||||
|
|
||||||
class FilterModule(object):
|
class FilterModule(object):
|
||||||
def filters(self):
|
def filters(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue