tutil: add function "chunks" - electrum - Electrum Bitcoin wallet
 (HTM) git clone https://git.parazyd.org/electrum
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
       ---
 (DIR) commit 30ffb3d4dca5a0f42473d8e2bd065049d5943e50
 (DIR) parent 1ebfcc0f364ecb806c0ce736a76de8a3256748fd
 (HTM) Author: SomberNight <somber.night@protonmail.com>
       Date:   Sun, 26 May 2019 04:10:32 +0200
       
       util: add function "chunks"
       
       ttaken from ElectrumX
       https://github.com/kyuupichan/electrumx/blob/67111a3c4c812d0550fdba013ac886ad824689df/electrumx/lib/util.py#L149
       
       Diffstat:
         M electrum/tests/test_util.py         |       8 +++++++-
         M electrum/util.py                    |       8 ++++++++
       
       2 files changed, 15 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/electrum/tests/test_util.py b/electrum/tests/test_util.py
       t@@ -1,7 +1,7 @@
        from decimal import Decimal
        
        from electrum.util import (format_satoshis, format_fee_satoshis, parse_URI,
       -                           is_hash256_str)
       +                           is_hash256_str, chunks)
        
        from . import SequentialTestCase
        
       t@@ -104,3 +104,9 @@ class TestUtil(SequentialTestCase):
                self.assertFalse(is_hash256_str('qweqwe'))
                self.assertFalse(is_hash256_str(None))
                self.assertFalse(is_hash256_str(7))
       +
       +    def test_chunks(self):
       +        self.assertEqual([[1, 2], [3, 4], [5]],
       +                         list(chunks([1, 2, 3, 4, 5], 2)))
       +        with self.assertRaises(ValueError):
       +            list(chunks([1, 2, 3], 0))
 (DIR) diff --git a/electrum/util.py b/electrum/util.py
       t@@ -520,6 +520,14 @@ def is_non_negative_integer(val) -> bool:
            return False
        
        
       +def chunks(items, size: int):
       +    """Break up items, an iterable, into chunks of length size."""
       +    if size < 1:
       +        raise ValueError(f"size must be positive, not {repr(size)}")
       +    for i in range(0, len(items), size):
       +        yield items[i: i + size]
       +
       +
        def format_satoshis_plain(x, decimal_point = 8):
            """Display a satoshi amount scaled.  Always uses a '.' as a decimal
            point and has no thousands separator"""