diff options
author | Richard van der Hoff <richard@matrix.org> | 2020-01-14 11:58:02 +0000 |
---|---|---|
committer | Richard van der Hoff <richard@matrix.org> | 2020-01-16 22:25:32 +0000 |
commit | 14d8f342d5cae86d93d9ba2b411d486690ff54f5 (patch) | |
tree | 6d4caaa8fbba62339110e0f7ba2585bc8abca061 /synapse/util/iterutils.py | |
parent | Add StateMap type alias (#6715) (diff) | |
download | synapse-14d8f342d5cae86d93d9ba2b411d486690ff54f5.tar.xz |
move batch_iter to a separate module
Diffstat (limited to '')
-rw-r--r-- | synapse/util/iterutils.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/synapse/util/iterutils.py b/synapse/util/iterutils.py new file mode 100644 index 0000000000..c10016fbc5 --- /dev/null +++ b/synapse/util/iterutils.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Copyright 2014-2016 OpenMarket Ltd +# Copyright 2020 The Matrix.org Foundation C.I.C. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from itertools import islice +from typing import Iterable, Iterator, Sequence, Tuple, TypeVar + +T = TypeVar("T") + + +def batch_iter(iterable: Iterable[T], size: int) -> Iterator[Tuple[T]]: + """batch an iterable up into tuples with a maximum size + + Args: + iterable (iterable): the iterable to slice + size (int): the maximum batch size + + Returns: + an iterator over the chunks + """ + # make sure we can deal with iterables like lists too + sourceiter = iter(iterable) + # call islice until it returns an empty tuple + return iter(lambda: tuple(islice(sourceiter, size)), ()) |