def merge_data(old, new): """Extend the values of the new doc with extra values from the old.""" if is_sequence(old) or is_sequence(new): new = ensure_list(new) new.extend(ensure_list(old)) return unique_list(new) if is_mapping(old) or is_mapping(new): old = old if is_mapping(old) else {} new = new if is_mapping(new) else {} keys = set(new.keys()) keys.update(old.keys()) combined = {} for key in keys: value = merge_data(old.get(key), new.get(key)) if value is not None: combined[key] = value return combined return new or old
def merge_docs(old, new): """Exend the values of the new doc with extra values from the old.""" old = clean_dict(old) new = dict(clean_dict(new)) for k, v in old.items(): if k == 'created_at': new[k] = v elif k in new: if is_sequence(v): v = new[k] + v new[k] = unique_list(v) elif isinstance(v, dict): new[k] = merge_docs(v, new[k]) else: new[k] = v return new