from collections.abc import Iterable def str_coercible(cls): def __str__(self): return self.__unicode__() cls.__str__ = __str__ return cls def is_sequence(value): return isinstance(value, Iterable) and not isinstance(value, str) def starts_with(iterable, prefix): """ Returns whether or not given iterable starts with given prefix. """ return list(iterable)[0 : len(prefix)] == list(prefix)