Karmenzind/fp-server

utils/tools.py 是不是有问题

Closed this issue · 2 comments

函数recuresive_update
old_value为字符串的时候, value为list会报错。value为tuple时,old_value字符串转成list失去了本来的意义了

谢谢反馈。
这个函数写完后没有全面测试,因为代码只用到了一两个条件。
如果要兼容各种情况,确实需要再改一下。
请问是项目运行时报错了吗?

这个函数只是为了合并配置项,名字改成merge_configuration更合适。

至于通用场景的递归更新字典,我刚才简单改了一下,大致是下面这样吧。不考虑集合、序列的合并,直接覆盖,就像字典的update一样。

from copy import deepcopy

def recursive_updated(old, new):
    """
    for general scene

    :old: to be updated
    :new:
    :return: a new dict
    """
    result = deepcopy(old)

    for key, value in new.items():
        if key in result:
            old_value = result[key]
            if type(old_value) != type(value):
                raise TypeError(
                    "[key: %s] old: %r new: %r" % (key, old_value, value)
                )

            if isinstance(value, dict):
                result[key] = recursive_updated(old_value, value)
            # elif isinstance(value, list):
            #     result[key] +=  value
            # elif isinstance(value, set):
            #     result[key] |=  value
            else:
                result[key] = value
        else:
            result[key] = value

    return result