diff options
| author | Olivier Dony <odo@openerp.com> | 2010-03-30 19:26:03 +0200 |
|---|---|---|
| committer | Julien Thewys <jth@openerp.com> | 2010-03-30 19:26:03 +0200 |
| commit | a6a0a06867a3fe1ece9be829f36ea05a8e9b4e8e (patch) | |
| tree | 615d601a78f486b3f5c5bb742b72a8020e265add /bin/tools | |
| parent | f09f4dc4ce27314aac440426524bb399edfecb14 (diff) | |
[ADD] utility methods to split large lists of ids for use in IN clauses
bzr revid: odo@openerp.com-20100330172603-gbv1zjcqmqeabfbt
Diffstat (limited to 'bin/tools')
| -rw-r--r-- | bin/tools/misc.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/bin/tools/misc.py b/bin/tools/misc.py index 284324873de..ff20966857e 100644 --- a/bin/tools/misc.py +++ b/bin/tools/misc.py @@ -32,6 +32,7 @@ import zipfile import release import socket import re +from itertools import islice if sys.version_info[:2] < (2, 4): from threadinglocal import local @@ -1267,6 +1268,18 @@ def detect_server_timezone(): return 'UTC' +def split_every(n, iterable, piece_maker=tuple): + """Splits an iterable into length-n pieces. The last piece will be shorter + if ``n`` does not evenly divide the iterable length. + @param ``piece_maker``: function to build the pieces + from the slices (tuple,list,...) + """ + iterator = iter(iterable) + piece = piece_maker(islice(iterator, n)) + while piece: + yield piece + piece = piece_maker(islice(iterator, n)) + if __name__ == '__main__': import doctest doctest.testmod() |
