def settingTreeInnerLoop(settingLine, nodeKey, settingTree,
                         longStringCapturing, quoteType, longStringList,
                         settingInjectionList, lazyLoad, isSameDepth):
    # print(f'settingTreeInnerLoop: nodeKey: {nodeKey}')
    # print(f'    isSameDepth: {isSameDepth}')
    settingKey, settingValue = getAttributeKeyValue(settingLine)
    # print(f'    settingKey: {settingKey}, settingValue: {settingValue}')
    # print(f'    value:{settingLine}')

    if containsSettingInjection(settingValue):
        try:
            settingKey, settingValue, nodeKey, longStringCapturing, quoteType, longStringList = handleSettingInjection(
                settingKey, settingValue, nodeKey, settingTree,
                longStringCapturing, quoteType, longStringList,
                settingInjectionList, lazyLoad, isSameDepth)
        except Exception as exception:
            LogHelper.log(
                settingTreeInnerLoop,
                f'Not possible to handle association of "{nodeKey}{c.DOT}{settingKey}" setting key to "{settingValue}" setting value',
                exception=exception)
            settingInjectionList.append({
                SETTING_KEY: settingKey,
                SETTING_VALUE: settingValue,
                SETTING_NODE_KEY: nodeKey
            })
        return settingKey, settingValue, nodeKey, longStringCapturing, quoteType, longStringList
    else:
        # print(f'    nodeKey: {nodeKey}')
        settingKey, filteredSettingValue, nodeKey, longStringCapturing, quoteType, longStringList = handleLongStringOrSetting(
            settingKey, settingValue, nodeKey, settingTree,
            longStringCapturing, quoteType, longStringList,
            settingInjectionList, isSameDepth)
        # print(f'----------> nodeKey: {nodeKey}')
        return settingKey, filteredSettingValue, nodeKey, longStringCapturing, quoteType, longStringList
def safelyAccessTree(nodeKey, settingTree):
    setting = None
    try:
        setting = accessTree(nodeKey, settingTree)
    except Exception as exception:
        LogHelper.log(
            safelyAccessTree,
            f'Not possible to safely access "{nodeKey}" node key while looping through setting tree. Returning "{setting}" by default',
            exception=exception)
    return setting
def handleSettingInjectionListByCallingHandler(done, stuck,
                                               isSettingInjectionCount,
                                               containsSettingInjectionCount,
                                               settingInjection, settingTree,
                                               settingInjectionList,
                                               fallbackSettingTree, handler):
    try:
        if isSettingInjection(settingInjection[SETTING_VALUE]):
            settingInjection[SETTING_VALUE] = handler(
                settingInjection[SETTING_KEY],
                settingInjection[SETTING_VALUE],
                settingInjection[SETTING_NODE_KEY],
                settingTree,
                fallbackSettingTree=fallbackSettingTree)
            settingInjectionArgs = list(
                settingInjection.values()) + [settingTree]
            updateSettingValue(*settingInjectionArgs, isSettingInjection=True)
            if not containsSettingInjection(settingInjection[SETTING_VALUE]):
                settingInjectionList.remove(settingInjection)
                isSettingInjectionCount += 1
            stuck = False
        elif containsSettingInjection(settingInjection[SETTING_VALUE]):
            settingInjectionListFromSettingValue = getSettingInjectionListFromSettingValue(
                settingInjection[SETTING_VALUE])
            newSettingInjection = settingInjection[SETTING_VALUE]
            for settingValue in settingInjectionListFromSettingValue:
                newSettingValue = handler(
                    settingInjection[SETTING_KEY],
                    settingValue,
                    settingInjection[SETTING_NODE_KEY],
                    settingTree,
                    fallbackSettingTree=fallbackSettingTree)
                if ObjectHelper.isList(newSettingInjection):
                    for index, element in enumerate(newSettingInjection):
                        if settingValue == element:
                            newSettingInjection[index] = newSettingValue
                else:
                    newSettingInjection = newSettingInjection.replace(
                        settingValue, str(newSettingValue))
            settingInjection[SETTING_VALUE] = newSettingInjection
            settingInjectionArgs = list(
                settingInjection.values()) + [settingTree]
            updateSettingValue(*settingInjectionArgs, isSettingInjection=True)
            if not containsSettingInjection(settingInjection[SETTING_VALUE]):
                settingInjectionList.remove(settingInjection)
                containsSettingInjectionCount += 1
            stuck = False
    except Exception as exception:
        LogHelper.log(
            handleSettingInjectionListByCallingHandler,
            f'Ignored exception while handling {StringHelper.prettyPython(settingInjection)} setting injection list',
            exception=exception)
    return done, stuck, isSettingInjectionCount, containsSettingInjectionCount
def safelyGetSettingInjectionValue(settingKey,
                                   settingValue,
                                   nodeKey,
                                   settingTree,
                                   fallbackSettingTree=None):
    exception = None
    newSettingValue = None
    try:
        newSettingValue = getSettingInjectionValue(settingKey, settingValue,
                                                   nodeKey, settingTree)
    except Exception as e:
        exception = e
        LogHelper.log(
            safelyGetSettingInjectionValue,
            f'Not possible to load "{settingKey}" setting key from setting tree. Now trying to load it from fallback setting tree',
            exception=exception)
    if ObjectHelper.isNone(newSettingValue) and ObjectHelper.isNotNone(
            fallbackSettingTree):
        return getSettingInjectionValue(settingKey, settingValue, nodeKey,
                                        fallbackSettingTree)
    if ObjectHelper.isNotNone(exception):
        raise exception
    return newSettingValue
Esempio n. 5
0
def equals(expected,
           toAssert,
           ignoreKeyList=None,
           ignoreCharactereList=None,
           visitedIdInstances=None,
           muteLogs=True):
    if isNone(expected) or isNone(toAssert):
        return expected is None and toAssert is None
    if isNativeClass(type(expected)):
        return expected == toAssert
    if isNone(visitedIdInstances):
        visitedIdInstances = []
    if isDictionary(expected) and isDictionary(toAssert):
        innerIgnoreCharactereList = [c.SPACE]
        if isNotNone(ignoreCharactereList):
            innerIgnoreCharactereList += ignoreCharactereList
        filteredResponse = StringHelper.filterJson(
            str(sortIt(filterIgnoreKeyList(expected, ignoreKeyList))),
            extraCharacterList=innerIgnoreCharactereList)
        filteredExpectedResponse = StringHelper.filterJson(
            str(sortIt(filterIgnoreKeyList(toAssert, ignoreKeyList))),
            extraCharacterList=innerIgnoreCharactereList)
        return filteredResponse == filteredExpectedResponse
    elif isCollection(expected) and isCollection(toAssert):
        areEquals = True
        try:
            for a, b in zip(expected, toAssert):
                areEquals = equals(a,
                                   b,
                                   ignoreKeyList=ignoreKeyList,
                                   ignoreCharactereList=ignoreCharactereList,
                                   visitedIdInstances=visitedIdInstances,
                                   muteLogs=muteLogs)
                if not areEquals:
                    break
            return areEquals
        except Exception as exception:
            areEquals = False
            LogHelper.log(
                equals,
                f'Different arguments in {expected} and {toAssert}. Returning "{areEquals}" by default',
                exception=exception)
    else:
        if isNotNone(toAssert) and id(toAssert) not in visitedIdInstances:
            areEquals = True
            try:
                if not muteLogs:
                    LogHelper.prettyPython(equals,
                                           f'expected',
                                           expected,
                                           logLevel=LogHelper.DEBUG,
                                           condition=not muteLogs)
                    LogHelper.prettyPython(equals,
                                           f'toAssert',
                                           toAssert,
                                           logLevel=LogHelper.DEBUG,
                                           condition=not muteLogs)
                areEquals = True and ObjectHelperHelper.leftEqual(
                    expected, toAssert, visitedIdInstances,
                    muteLogs=muteLogs) and ObjectHelperHelper.leftEqual(
                        toAssert,
                        expected,
                        visitedIdInstances,
                        muteLogs=muteLogs)
            except Exception as exception:
                areEquals = False
                LogHelper.log(
                    equals,
                    f'Different arguments in {expected} and {toAssert}. Returning "{areEquals}" by default',
                    exception=exception)
            visitedIdInstances.append(id(toAssert))
            return areEquals
        else:
            return True