Начал реализацию SettingsParser
This commit is contained in:
parent
2b6436e9f4
commit
3e8b59bbf4
|
|
@ -8,7 +8,7 @@ class TestPathParser(unittest.TestCase):
|
|||
|
||||
def test_parseValidInput(self):
|
||||
propertyPath = '123.abc.some_name'
|
||||
segments = self.parser.parsePath(propertyPath)
|
||||
segments = self.parser.parse(propertyPath)
|
||||
|
||||
self.assertEqual(3, len(segments))
|
||||
self.assertEqual('123', segments[0])
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
import unittest
|
||||
from parser.SettingsParser.SettingsParser import SettingsParser
|
||||
|
||||
|
||||
|
||||
class TestSettingsParser(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.parser = SettingsParser()
|
||||
|
||||
def test_getSettingsDictByPath(self):
|
||||
|
||||
len0 = len(self.parser.settings)
|
||||
self.assertEqual(0, len0)
|
||||
|
||||
self.parser.getSettingsDictByPath(['one'])
|
||||
len1 = len(self.parser.settings)
|
||||
self.assertEqual(1, len1)
|
||||
|
||||
self.parser.getSettingsDictByPath(['one', 'two'])
|
||||
len1 = len(self.parser.settings)
|
||||
self.assertEqual(1, len1)
|
||||
|
||||
self.parser.getSettingsDictByPath(['another', 'two'])
|
||||
len2 = len(self.parser.settings)
|
||||
self.assertEqual(2, len2)
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
class PathParser:
|
||||
def parsePath(self, line):
|
||||
def parse(self, line):
|
||||
assert line is not None
|
||||
|
||||
pathSegments = line.split('.')
|
||||
|
|
|
|||
|
|
@ -1,14 +1,26 @@
|
|||
from parser.LineParser import LineParser
|
||||
import re
|
||||
from parser.SettingsParser.PathParser import PathParser
|
||||
|
||||
|
||||
class SettingsLineParser(LineParser):
|
||||
def parseLine(self, line):
|
||||
assert line is not None
|
||||
|
||||
pathAndValue = self.splitToPathAndValue(line)
|
||||
propertyPath = pathAndValue[0]
|
||||
value = [1]
|
||||
|
||||
path = pathAndValue[0]
|
||||
value = pathAndValue[1]
|
||||
|
||||
pathParser = PathParser()
|
||||
pathSegments = pathParser.parse(path)
|
||||
|
||||
result = {
|
||||
'segments' : pathSegments,
|
||||
'value' : value
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
def splitToPathAndValue(self, line):
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,49 @@
|
|||
from parser.SettingsParser.SettingsLineParser import SettingsLineParser
|
||||
|
||||
|
||||
class SettingsParser:
|
||||
def __init__(self, content):
|
||||
def __init__(self):
|
||||
self.settings = {}
|
||||
|
||||
def parse(self, content):
|
||||
assert content is not None
|
||||
pass
|
||||
|
||||
lines = content.splitlines()
|
||||
for line in lines:
|
||||
self.processLine(line)
|
||||
|
||||
def processLine(self, line):
|
||||
|
||||
parser = SettingsLineParser()
|
||||
result = parser.parseLine(line)
|
||||
|
||||
def mergeSetting(self, setting):
|
||||
value = setting['value']
|
||||
segments = setting['segments']
|
||||
|
||||
propPath = segments[0:-1]
|
||||
propName = segments[-1]
|
||||
|
||||
settingsDict = self.getSettingsDictByPath(propPath)
|
||||
self.overrideGuard(settingsDict, propName, propPath)
|
||||
|
||||
settingsDict[propName] = value
|
||||
|
||||
def getSettingsDictByPath(self, pathToSettingsDict):
|
||||
|
||||
settingsDict = self.settings
|
||||
for segment in pathToSettingsDict:
|
||||
|
||||
if segment not in settingsDict:
|
||||
settingsDict[segment] = {}
|
||||
|
||||
settingsDict = settingsDict[segment]
|
||||
|
||||
return settingsDict
|
||||
|
||||
def overrideGuard(self, dict, key, path):
|
||||
if key in dict:
|
||||
pathStr = '.'.joun(path)
|
||||
msg = 'settings with name {0} by path {1} already exists with value {3}'.format(key, dict[key], pathStr)
|
||||
raise Exception(msg)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue