def _process_includes(raw, filepath, error_name): if not raw: return [] source_dir = os.path.dirname(filepath) included_files = [] replace_value = None if hasattr(raw, 'items'): for key, value in raw.items(): if key == 'include#': include_path = os.path.expanduser( os.path.join(source_dir, value)) included_files.append(include_path) replace_value, includes = _load_file(include_path, error_name) included_files.extend(includes) elif hasattr(value, 'items') or isiterable(value): includes = _process_includes(value, filepath, error_name) included_files.extend(includes) elif isiterable(raw): for element in raw: if hasattr(element, 'items') or isiterable(element): includes = _process_includes(element, filepath, error_name) included_files.extend(includes) if replace_value is not None: del raw['include#'] for key, value in replace_value.items(): raw[key] = merge_config_values(value, raw.get(key, None)) return included_files
def _process_includes(raw, filepath, error_name): if not raw: return [] source_dir = os.path.dirname(filepath) included_files = [] replace_value = None if hasattr(raw, 'items'): for key, value in raw.items(): if key == 'include#': include_path = os.path.expanduser(os.path.join(source_dir, value)) included_files.append(include_path) replace_value, includes = _load_file(include_path, error_name) included_files.extend(includes) elif hasattr(value, 'items') or isiterable(value): includes = _process_includes(value, filepath, error_name) included_files.extend(includes) elif isiterable(raw): for element in raw: if hasattr(element, 'items') or isiterable(element): includes = _process_includes(element, filepath, error_name) included_files.extend(includes) if replace_value is not None: del raw['include#'] for key, value in replace_value.items(): raw[key] = merge_config_values(value, raw.get(key, None)) return included_files
def update_metadata(self, key, *args): if not args: del self.metadata[key] return if key not in self.metadata: return self.add_metadata(key, *args) if hasattr(self.metadata[key], 'items'): if len(args) == 2: self.metadata[key][args[0]] = args[1] elif len(args) > 2: # assume list of key-value pairs for k, v in args: self.metadata[key][k] = v elif hasattr(args[0], 'items'): for k, v in args[0].items(): self.metadata[key][k] = v else: raise ValueError('Invalid value for key "{}": {}'.format(key, args)) elif isiterable(self.metadata[key]): self.metadata[key].extend(args) else: # scalar if len(args) > 1: raise ValueError('Invalid value for key "{}": {}'.format(key, args)) self.metadata[key] = args[0]
def list_of_strs(value): """ Value must be iterable. All elements will be converted to strings. """ if not isiterable(value): raise ValueError(value) return list(map(str, value))
def list_of_ints(value): """ Value must be iterable. All elements will be converted to ``int``\ s. """ if not isiterable(value): raise ValueError(value) return list(map(int, value))
def try_convert_to_numeric(v): try: if isiterable(v): return list(map(numeric, v)) else: return numeric(v) except ValueError: return v
def list_of_numbers(value): """ Value must be iterable. All elements will be converted to numbers (either ``ints`` or ``float``\ s depending on the elements). """ if not isiterable(value): raise ValueError(value) return list(map(numeric, value))
def load_objects(d): pairs = [] for k, v in d.items(): if hasattr(v, 'items'): pairs.append((k, load_objects(v))) elif isiterable(v): pairs.append((k, [try_parse_object(i) for i in v])) else: pairs.append((k, try_parse_object(v))) return OrderedDict(pairs)
def __init__(self, value=None): if isiterable(value): super(arguments, self).__init__(list(map(str, value))) elif isinstance(value, str): posix = os.name != 'nt' super(arguments, self).__init__(shlex.split(value, posix=posix)) elif value is None: super(arguments, self).__init__() else: super(arguments, self).__init__([str(value)])
def _set(self, attr, vals): if vals is None: vals = [] elif isiterable(vals): if hasattr(vals, 'values'): vals = list(vals.values()) else: msg = '{} must be iterable; got "{}"' raise ValueError(msg.format(attr, vals)) setattr(self, attr, vals)
def is_pod(obj): if type(obj) not in POD_TYPES: # pylint: disable=unidiomatic-typecheck return False if hasattr(obj, 'items'): for k, v in obj.items(): if not (is_pod(k) and is_pod(v)): return False elif isiterable(obj): for v in obj: if not is_pod(v): return False return True
def list_of_bools(value, interpret_strings=True): """ Value must be iterable. All elements will be converted to ``bool``\ s. .. note:: By default, ``boolean()`` conversion function will be used, which means that strings like ``"0"`` or ``"false"`` will be interpreted as ``False``. If this is undesirable, set ``interpret_strings`` to ``False``. """ if not isiterable(value): raise ValueError(value) if interpret_strings: return list(map(boolean, value)) else: return list(map(bool, value))
def __init__(self, value): # pylint: disable=non-parent-init-called,super-init-not-called if isiterable(value): list_type.__init__(self, value) else: list_type.__init__(self, [value])
def disable(to_disable): if isiterable(to_disable): for inst in to_disable: _disable_instrument(inst) else: _disable_instrument(to_disable)
def enable(to_enable): if isiterable(to_enable): for inst in to_enable: _enable_instrument(inst) else: _enable_instrument(to_enable)
def disable(self, to_disable): if isiterable(to_disable): for inst in to_disable: self._disable_output_processor(inst) else: self._disable_output_processor(to_disable)