[FIX] tools: align API of groupby on the one of itertools.groupby
The function `stripped_sys_argv` was broken because of `itertools.groupby` being hidden by the local `groupby`. Aligning APIs makes the local one a valid substitution for `itertools.groupby`.
This commit is contained in:
+2
-2
@@ -3025,7 +3025,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
|
||||
record._cache.update(record._convert_to_cache(inverse_vals, update=True))
|
||||
|
||||
# in case several fields use the same inverse method, call it once
|
||||
for fields in groupby(attrgetter('inverse'), inverse_fields):
|
||||
for _inv, fields in groupby(inverse_fields, attrgetter('inverse')):
|
||||
fields[0].determine_inverse(self)
|
||||
|
||||
self.modified(set(inverse_vals) - set(store_vals))
|
||||
@@ -3218,7 +3218,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
|
||||
record._cache.update(record._convert_to_cache(inverse_vals))
|
||||
|
||||
# in case several fields use the same inverse method, call it once
|
||||
for fields in groupby(attrgetter('inverse'), inverse_fields):
|
||||
for _inv, fields in groupby(inverse_fields, attrgetter('inverse')):
|
||||
fields[0].determine_inverse(record)
|
||||
|
||||
record.modified(set(inverse_vals) - set(store_vals))
|
||||
|
||||
+12
-6
@@ -26,7 +26,7 @@ import unicodedata
|
||||
import werkzeug.utils
|
||||
import zipfile
|
||||
from collections import defaultdict, Iterable, Mapping, MutableMapping, MutableSet, OrderedDict
|
||||
from itertools import islice, groupby, repeat
|
||||
from itertools import islice, groupby as itergroupby, repeat
|
||||
from lxml import etree
|
||||
|
||||
from .which import which
|
||||
@@ -869,7 +869,7 @@ def stripped_sys_argv(*strip_args):
|
||||
assert all(config.parser.has_option(s) for s in strip_args)
|
||||
takes_value = dict((s, config.parser.get_option(s).takes_value()) for s in strip_args)
|
||||
|
||||
longs, shorts = list(tuple(y) for _, y in groupby(strip_args, lambda x: x.startswith('--')))
|
||||
longs, shorts = list(tuple(y) for _, y in itergroupby(strip_args, lambda x: x.startswith('--')))
|
||||
longs_eq = tuple(l + '=' for l in longs if takes_value[l])
|
||||
|
||||
args = sys.argv[:]
|
||||
@@ -1062,12 +1062,18 @@ class LastOrderedSet(OrderedSet):
|
||||
OrderedSet.discard(self, elem)
|
||||
OrderedSet.add(self, elem)
|
||||
|
||||
def groupby(key, elems):
|
||||
""" Return a partition of ``elems`` based on ``key(elem)``. """
|
||||
def groupby(iterable, key=None):
|
||||
""" Return a collection of pairs ``(key, elements)`` from ``iterable``. The
|
||||
``key`` is a function computing a key value for each element. This
|
||||
function is similar to ``itertools.groupby``, but aggregates all
|
||||
elements under the same key, not only consecutive elements.
|
||||
"""
|
||||
if key is None:
|
||||
key = lambda arg: arg
|
||||
groups = defaultdict(list)
|
||||
for elem in elems:
|
||||
for elem in iterable:
|
||||
groups[key(elem)].append(elem)
|
||||
return groups.values()
|
||||
return groups.items()
|
||||
|
||||
def unique(it):
|
||||
""" "Uniquifier" for the provided iterable: will output each element of
|
||||
|
||||
Reference in New Issue
Block a user