def _is_similar_args_in_base()

in src/aaz_dev/command/controller/cfg_reader.py [0:0]


    def _is_similar_args_in_base(cls, arg1, arg2):
        if isinstance(arg1, CMDArrayArgBase) and isinstance(arg2, CMDArrayArgBase):
            return cls._is_similar_args_in_base(arg1.item, arg2.item)
        elif isinstance(arg1, CMDObjectArgBase) and isinstance(arg2, CMDObjectArgBase):
            # verify args
            if (not arg1.args) != (not arg2.args):
                return False
            if arg1.args:
                if len(arg1.args) != len(arg2.args):
                    return False
                for sub_arg1 in arg1.args:
                    find_match = False
                    for sub_arg2 in arg2.args:
                        if cls.is_similar_args(sub_arg1, sub_arg2):
                            find_match = True
                            break
                    if not find_match:
                        return False

            # verify additional props
            if (arg1.additional_props is not None) != (arg2.additional_props is not None):
                return False
            if arg1.additional_props:
                if (arg1.additional_props.item is not None) != (arg2.additional_props.item is not None):
                    return False
                if arg1.additional_props.item:
                    if not cls._is_similar_args_in_base(arg1.additional_props.item, arg2.additional_props.item):
                        return False
        elif arg1.type != arg2.type:
            # handle cls argument
            if arg1.type.startswith("@") and arg1.type == getattr(arg2, 'cls', None):
                return True
            if arg2.type.startswith("@") and arg2.type == getattr(arg1, 'cls', None):
                return True
            return False
        return True