fixup! Add MapFields transformation

This commit is contained in:
Kryštof Pilnáček
2018-10-29 13:52:20 +01:00
parent 721bdb4318
commit f93f6bb62e
2 changed files with 13 additions and 5 deletions

View File

@ -334,13 +334,19 @@ def MapFields(function, key=True):
def _MapFields(bag):
try:
factory = type(bag)._make
except AttributeError as e:
raise UnrecoverableAttributeError('This transformation works only on objects with named'
' fields (namedtuple, BagType, ...).') from e
except AttributeError:
factory = type(bag)
if callable(key):
try:
fields = bag._fields
except AttributeError as e:
raise UnrecoverableAttributeError(
'This transformation works only on objects with named'
' fields (namedtuple, BagType, ...).') from e
return factory(
function(value) if key(key_) else value for key_, value in zip(bag._fields, bag)
function(value) if key(key_) else value for key_, value in zip(fields, bag)
)
elif key:
return factory(function(value) for value in bag)