'Take potentially-updated data and apply it to a set of Model
objects.
The objects are not written back to the database, so the changes
are temporary.'

def apply_data(self, objs, old_data, new_data):

    if (len(old_data) != len(new_data)):
        self._log.warning(u'number    of    objects    changed    from    {}    to    {}', len(old_data), len(new_data))
    obj_by_id = {o.id: o for o in objs}
    ignore_fields = self.config['ignore_fields'].as_str_seq()
    for (old_dict, new_dict) in zip(old_data, new_data):
        forbidden = False
        for key in ignore_fields:
            if (old_dict.get(key) != new_dict.get(key)):
                self._log.warning(u'ignoring    object    whose    {}    changed', key)
                forbidden = True
                break
        if forbidden:
            continue
        id_ = int(old_dict['id'])
        apply_(obj_by_id[id_], new_dict)
