diff options
Diffstat (limited to 'swiftclient/utils.py')
-rw-r--r-- | swiftclient/utils.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/swiftclient/utils.py b/swiftclient/utils.py index 2b208b9..9e43237 100644 --- a/swiftclient/utils.py +++ b/swiftclient/utils.py @@ -403,3 +403,25 @@ def normalize_manifest_path(path): if path.startswith('/'): return path[1:] return path + + +class JSONableIterable(list): + def __init__(self, iterable): + self._iterable = iter(iterable) + try: + self._peeked = next(self._iterable) + self._has_items = True + except StopIteration: + self._peeked = None + self._has_items = False + + def __bool__(self): + return self._has_items + + __nonzero__ = __bool__ + + def __iter__(self): + if self._has_items: + yield self._peeked + for item in self._iterable: + yield item |