From 0dce5dae26eed4c7de0e59d455fc7550a3f211b4 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Sun, 25 May 2014 13:10:33 -0400 Subject: [PATCH] set theory v2, now can handle non hashable items like dicts --- lib/ansible/runner/filter_plugins/core.py | 31 +++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/ansible/runner/filter_plugins/core.py b/lib/ansible/runner/filter_plugins/core.py index 293ebc4ae3..57dd9debeb 100644 --- a/lib/ansible/runner/filter_plugins/core.py +++ b/lib/ansible/runner/filter_plugins/core.py @@ -140,19 +140,40 @@ def regex_replace(value='', pattern='', replacement='', ignorecase=False): return _re.sub(replacement, value) def unique(a): - return set(a) + try: + c = set(a) + except TypeError, e: + c = [] + c = filter(lambda x: x not in c, a) + return c def intersect(a, b): - return set(a).intersection(b) + try: + c = set(a) & set(b) + except TypeError, e: + c = filter(lambda x: x in b, a) + return c def difference(a, b): - return set(a).difference(b) + try: + c = set(a) - set(b) + except TypeError, e: + c = filter(lambda x: x not in b, a) + return c def symmetric_difference(a, b): - return set(a).symmetric_difference(b) + try: + c = set(a) ^ set(b) + except TypeError, e: + c = filter(lambda x: x not in intersect(a,b), union(a,b)) + return c def union(a, b): - return set(a).union(b) + try: + c = set(a) | set(b) + except TypeError, e: + c = a + b + return c def version_compare(value, version, operator='eq', strict=False): ''' Perform a version comparison on a value '''