maestro-server/discovery-api

View on GitHub
app/services/merge/merge_rules.py

Summary

Maintainability
A
35 mins
Test Coverage
A
100%
from .rules_dict import MergeRulesDict
from .rules_list import MergeRulesList
from .rules_list_storage import MergeRulesListStorage


class MergeRules(object):

    def __init__(self, rlist=MergeRulesList, rdict=MergeRulesDict, rcustom={'storage': MergeRulesListStorage}):
        self._ruler_list_default = rlist
        self._ruler_dict_default = rdict
        self._ruler_list_bag = rcustom

    def applyListRuler(self, key):
        return self._ruler_list_bag.get(key, self._ruler_list_default)

    def merger_with(self, obj_value, src_value, key, obj, source):
        if isinstance(obj_value, list) and isinstance(src_value, list):
            if len(obj_value) > 0 and len(src_value) > 0:
                Ruler = self.applyListRuler(key)
                return Ruler().list_merge(obj_value, src_value)

        if isinstance(obj_value, dict) and isinstance(src_value, dict):
            return self._ruler_dict_default().dict_merge(obj_value, src_value)