From 52219c4d55c7b80b4a2185887675615c4d427298 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 9 May 2018 19:08:21 +0200 Subject: [PATCH] Add is_sequence util function This is a helper for identifying whether the var is a sequence, but is not of string-like type (optionally). Co-authored-by: Toshio Kuratomi Co-authored-by: Brian Coca Co-authored-by: Abhijeet Kasurde --- .../module_utils/common/collections.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 lib/ansible/module_utils/common/collections.py diff --git a/lib/ansible/module_utils/common/collections.py b/lib/ansible/module_utils/common/collections.py new file mode 100644 index 00000000000..95d12ffb6bc --- /dev/null +++ b/lib/ansible/module_utils/common/collections.py @@ -0,0 +1,29 @@ +# Copyright (c), Sviatoslav Sydorenko 2018 +# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause) +"""Collection of low-level utility functions.""" + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +from ..six import binary_type, text_type +from ._collections_compat import Sequence + + +def is_string(seq): + """Identify whether the input has a string-like type (inclding bytes).""" + return isinstance(seq, (text_type, binary_type)) + + +def is_sequence(seq, include_strings=False): + """Identify whether the input is a sequence. + + Strings and bytes are not sequences here, + unless ``include_string`` is ``True``. + + Non-indexable things are never of a sequence type. + """ + if not include_strings and is_string(seq): + return False + + return isinstance(seq, Sequence)