def handleSettingInjectionList(settingInjectionList,
                               settingTree,
                               fallbackSettingTree=None):
    if ObjectHelper.isNotEmptyCollection(
            settingInjectionList) and ObjectHelper.isNotNone(settingTree):
        try:
            done, stuck = handleSettingInjectionListLoop(
                False,
                False,
                settingTree,
                settingInjectionList,
                fallbackSettingTree,
                getSettingInjectionValueIgnoringFallbackSettingTree,
                verifyer=verifyDefaultSettingInjectionListHandler)
        except Exception as exception:
            LogHelper.error(
                handleSettingInjectionList,
                'Not possible to load setting injections properly', exception)
            raise exception
예제 #2
0
def getSettingTree(settingFilePath,
                   settingTree=None,
                   fallbackSettingFilePath=None,
                   fallbackSettingTree=None,
                   lazyLoad=False,
                   keepDepthInLongString=False,
                   depthStep=c.TAB_UNITS,
                   encoding=c.ENCODING):
    settingInjectionList = []
    fallbackSettingInjectionList = []
    if ObjectHelper.isNotNone(fallbackSettingFilePath):
        innerFallbackSettingTree, fallbackSettingInjectionList = getSettingTree(
            fallbackSettingFilePath,
            lazyLoad=True,
            keepDepthInLongString=keepDepthInLongString,
            depthStep=depthStep,
            encoding=encoding)
    else:
        innerFallbackSettingTree = {}
    with open(settingFilePath, c.READ, encoding=encoding) as settingsFile:
        allSettingLines = settingsFile.readlines()
    longStringCapturing = False
    quoteType = None
    longStringList = None
    depth = 0
    nodeRefference = 0
    nodeKey = c.NOTHING
    if settingTree is None:
        settingTree = {}
    for line, settingLine in enumerate(allSettingLines):
        if SettingHelperHelper.lineAproved(settingLine):
            if longStringCapturing:
                # print('lineAproved')
                if not currentDepth:
                    currentDepth = 0
                longStringList.append(depthStep * c.SPACE +
                                      settingLine if keepDepthInLongString else
                                      settingLine[depth:])
                if quoteType in str(settingLine):
                    longStringList[-1] = c.NOTHING.join(
                        longStringList[-1].split(quoteType))[:-1] + quoteType
                    settingValue = c.NOTHING.join(longStringList)
                    nodeKey = SettingHelperHelper.updateSettingTreeAndReturnNodeKey(
                        settingKey, settingValue, nodeKey, settingTree, False)
                    longStringCapturing = False
                    quoteType = None
                    longStringList = None
            else:
                currentDepth = SettingHelperHelper.getDepth(settingLine)
                isSameDepth = SettingHelperHelper.nextValidLineIsAtTheSameDepthOrLess(
                    currentDepth, line, allSettingLines)
                # print(f'isSameDepth: {isSameDepth}')
                if currentDepth == depth:
                    # print('currentDepth == depth')
                    settingKey, settingValue, nodeKey, longStringCapturing, quoteType, longStringList = SettingHelperHelper.settingTreeInnerLoop(
                        settingLine, nodeKey, settingTree, longStringCapturing,
                        quoteType, longStringList, settingInjectionList,
                        lazyLoad, isSameDepth)
                elif currentDepth > depth:
                    # print('currentDepth > depth')
                    currentNodeRefference = currentDepth // (currentDepth -
                                                             depth)
                    if currentNodeRefference - nodeRefference == 1:
                        settingKey, settingValue, nodeKey, longStringCapturing, quoteType, longStringList = SettingHelperHelper.settingTreeInnerLoop(
                            settingLine, nodeKey, settingTree,
                            longStringCapturing, quoteType, longStringList,
                            settingInjectionList, lazyLoad, isSameDepth)
                        nodeRefference = currentNodeRefference
                        depth = currentDepth
                elif currentDepth < depth:
                    # print('currentDepth < depth')
                    nodeRefference = currentDepth // depthStep  ###- if line.split(':')[0] == currentDepth + c.TAB_UNITS * ' ' +
                    depth = currentDepth
                    # print()
                    # print()
                    # print()
                    # print(str(line))
                    # print(str(nodeKey))
                    # print(str(settingLine))
                    splitedNodeKey = nodeKey.split(c.DOT)[:nodeRefference]
                    splitedNodeKeyLength = len(splitedNodeKey)
                    if splitedNodeKeyLength == 0:
                        nodeKey = c.NOTHING
                    elif splitedNodeKeyLength == 1:
                        nodeKey = splitedNodeKey[0]
                    else:
                        nodeKey = c.DOT.join(splitedNodeKey)
                    settingKey, settingValue, nodeKey, longStringCapturing, quoteType, longStringList = SettingHelperHelper.settingTreeInnerLoop(
                        settingLine, nodeKey, settingTree, longStringCapturing,
                        quoteType, longStringList, settingInjectionList,
                        lazyLoad, isSameDepth)
                    # if ObjectHelper.isNotNone(settingValue) and ObjectHelper.isNotEmpty(settingValue) :
                    depth = currentDepth
    if lazyLoad:
        return settingTree, settingInjectionList
    elif (ObjectHelper.isNotEmptyCollection(innerFallbackSettingTree)
          and ObjectHelper.isNotNone(fallbackSettingFilePath)):
        for fallbackSettingInjection in fallbackSettingInjectionList.copy():
            for settingInjection in settingInjectionList.copy():
                if (fallbackSettingInjection[SettingHelperHelper.SETTING_KEY]
                        == settingInjection[SettingHelperHelper.SETTING_KEY]
                        and fallbackSettingInjection[
                            SettingHelperHelper.SETTING_NODE_KEY]
                        == settingInjection[
                            SettingHelperHelper.SETTING_NODE_KEY]):
                    fallbackSettingInjectionList.remove(
                        fallbackSettingInjection)
        settingInjectionList += fallbackSettingInjectionList
        updateSettingTree(settingTree, innerFallbackSettingTree)
        SettingHelperHelper.handleSettingInjectionList(
            settingInjectionList,
            settingTree,
            fallbackSettingTree=innerFallbackSettingTree)
    SettingHelperHelper.handleSettingInjectionList(
        settingInjectionList,
        settingTree,
        fallbackSettingTree=fallbackSettingTree)
    updateSettingTree(settingTree, fallbackSettingTree)
    return settingTree