Skip to content

Commit 1b5dc29

Browse files
authored
Merge pull request #123 from mikeywaites/feature/memoize
Change tracking when marshalling many mappers
2 parents 4d3c16d + 60ecd46 commit 1b5dc29

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.0-rc6
1+
1.0.0-rc7

kim/mapper.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,7 @@ def __init__(self, mapper, **mapper_params):
733733

734734
self.mapper = mapper
735735
self.mapper_params = mapper_params
736+
self._changes = []
736737

737738
def get_mapper(self, data=None, obj=None):
738739
"""return a new instance of the provided mapper.
@@ -776,6 +777,14 @@ def marshal(self, data, role='__default__'):
776777

777778
output = [] # TODO should this be user defined?
778779
for datum in data:
779-
output.append(self.get_mapper(data=datum).marshal(role=role))
780+
mapper = self.get_mapper(data=datum)
781+
output.append(mapper.marshal(role=role))
782+
self._changes.append(mapper.get_changes())
780783

781784
return output
785+
786+
def get_changes(self):
787+
"""return the list of changes from each mapper
788+
"""
789+
790+
return self._changes

tests/test_mapper.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,30 @@ class MapperBase(Mapper):
527527
assert (res2.name, res2.id) == ('bob', 2)
528528

529529

530+
def test_mapper_marshal_many_mapper_changes():
531+
532+
class MapperBase(Mapper):
533+
534+
__type__ = TestType
535+
536+
id = Integer()
537+
name = String()
538+
539+
data = [{'name': 'mike', 'id': 1}, {'name': 'bob', 'id': 2}]
540+
541+
mapper = MapperBase.many()
542+
mapper.marshal(data)
543+
544+
assert mapper.get_changes() == [
545+
{
546+
'id': {'old_value': None, 'new_value': 1},
547+
'name': {'old_value': None, 'new_value': 'mike'}},
548+
{
549+
'id': {'old_value': None, 'new_value': 2},
550+
'name': {'old_value': None, 'new_value': 'bob'}},
551+
]
552+
553+
530554
def test_mapper_marshal_many_with_role():
531555

532556
class MapperBase(Mapper):

0 commit comments

Comments
 (0)