You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Sources/pyOpenRPA/Utils/Dictionary.py

44 lines
2.2 KiB

# Tool to merge complex dictionaries
def Merge(in1Dict, in2Dict):
"""
Сливать словарь in2Dict в in1Dict. В случае конфликта вывести исключение
:param in1Dict: Исходный словарь. В него будет производится запись. Ссылка на него будет активна
:param in2Dict: Изменяющий словарь. Новые данные, которые будут скопированы в in1Dict
:return: Обновленный словарь in1Dict
"""
lPathList=None
if lPathList is None: lPathList = []
for lKeyStr in in2Dict:
if lKeyStr in in1Dict:
if isinstance(in1Dict[lKeyStr], dict) and isinstance(in2Dict[lKeyStr], dict):
Merge(in1Dict[lKeyStr], in2Dict[lKeyStr])
elif in1Dict[lKeyStr] == in2Dict[lKeyStr]:
pass # same leaf value
else:
raise Exception('Conflict at %s' % '.'.join(lPathList + [str(lKeyStr)]))
else:
in1Dict[lKeyStr] = in2Dict[lKeyStr]
return in1Dict
# Tool to merge complex dictionaries - no exceptions, just overwrite dict 2 in dict 1
def MergeNoException(in1Dict, in2Dict):
"""
Сливать словарь in2Dict в in1Dict. В случае конфликта перезаписать на значение из in2Dict
:param in1Dict: Исходный словарь. В него будет производится запись. Ссылка на него будет активна
:param in2Dict: Изменяющий словарь. Новые данные, которые будут скопированы в in1Dict
:return: Обновленный словарь in1Dict
"""
lPathList=None
if lPathList is None: lPathList = []
for lKeyStr in in2Dict:
if lKeyStr in in1Dict:
if isinstance(in1Dict[lKeyStr], dict) and isinstance(in2Dict[lKeyStr], dict):
MergeNoException(in1Dict[lKeyStr], in2Dict[lKeyStr])
else:
in1Dict[lKeyStr] = in2Dict[lKeyStr]
else:
in1Dict[lKeyStr] = in2Dict[lKeyStr]
return in1Dict