maestro-server/discovery-api

View on GitHub
app/services/merger.py

Summary

Maintainability
A
2 hrs
Test Coverage
F
19%
from pydash.objects import get, merge_with, omit
from .merge.merge_rules import MergeRules


class MergeAPI(object):

    def __init__(self, content=None, key_comparer='name'):
        self.content = content
        self.inserted = []
        self.key = key_comparer
        self.omit = ['roles', 'owner']

    def merge(self, insert):
        if not isinstance(self.content, list) or len(self.content) <= 0:
            return insert

        santinize = []
        for item in self.content:
            dc_id = get(item, self.key)
            check_content = str(get(item, 'checksum'))
            active = get(item, 'active', False)  # bugfix - if is false, update to true

            for key, find in enumerate(insert):

                if self.assign(find, dc_id):
                    check_insert = str(get(insert[key], 'checksum'))

                    if (active is False) or (check_insert != check_content):
                        created = omit(insert[key], self.omit)
                        merged = merge_with(item, created, MergeRules().merger_with)
                        santinize.append(merged)

                    if len(insert) <= 1:
                        insert = []
                    if len(insert) > 1:
                        del insert[key]
                    break

        return santinize + insert

    def assign(self, data, dc_id):
        return get(data, self.key) == dc_id