Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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