предварительная обработка строк в файле настроек такая же как в файле шагов – обработка комментариев и удаление ведущих пробельных символов

This commit is contained in:
rzaitov 2013-11-13 16:26:37 +04:00
parent 6354c67bc3
commit ee6442ecd0
4 changed files with 33 additions and 19 deletions

View File

@ -8,12 +8,12 @@ class TestCommentRemover(unittest.TestCase):
def test_startsWithComment(self):
line = '# this line is comment'
newLine = self.commentRemover.processText(line, self.commentRemover)
newLine = self.commentRemover.processText(line, None)
self.assertEqual('', newLine)
def test_containsComment(self):
line = 'this line contains # a comment'
newLine = self.commentRemover.processText(line, self.commentRemover)
newLine = self.commentRemover.processText(line, None)
self.assertEqual('this line contains ', newLine)

View File

@ -3,7 +3,10 @@ from parsers.SettingsParser.SettingsMerger import SettingsMerger
class SettingsParser:
def __init__(self, settings=None):
def __init__(self, compositeLineProcessor, settings=None):
assert compositeLineProcessor is not None
self.compositeLineProcessor = compositeLineProcessor
self.settings = settings
if not self.settings:
@ -14,14 +17,14 @@ class SettingsParser:
lines = content.splitlines()
for line in lines:
stripped = line.strip(' \t\n\r')
processedLine = self.compositeLineProcessor.processText(line, None)
if len(stripped) == 0:
continue
if stripped.startswith("#"):
if len(processedLine) == 0:
continue
else:
self.processLine(processedLine)
self.processLine(stripped)
self.processLine(processedLine)
def processLine(self, line):
assert line is not None

View File

@ -26,17 +26,17 @@ scriptDir = os.path.dirname(scriptFilePath)
class TaskRunner:
def __init__(self, settingsProvider, fileContentProvider, buildConfigProvider):
def __init__(self, settingsProvider, fileContentProvider, buildConfigProvider, linePreprocessor):
assert settingsProvider is not None
assert fileContentProvider is not None
assert buildConfigProvider is not None
assert linePreprocessor is not None
self.settingsProvider = settingsProvider
self.fileContentProvider = fileContentProvider
self.configsProvider = buildConfigProvider
self.linePreprocessor = linePreprocessor
lineStripper = Stripper()
commentRemover = CommentRemover()
macroProcessor = MacroProcessor()
self.valueProvider = ValueProvider()
@ -52,9 +52,6 @@ class TaskRunner:
self.textPreprocessor.addProcessor(macroResolver)
self.textPreprocessor.addProcessor(textInclude)
self.linePreprocessor = TextConveyorPreprocessor()
self.linePreprocessor.addProcessor(commentRemover)
self.linePreprocessor.addProcessor(lineStripper)
def run(self):
rawSettings = self.settingsProvider.fetchSettings()
@ -83,8 +80,16 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser()
overrideArgs = parser.parse_known_args()[1]
# компоную препроцессор для индивидуальной обработки строк (удаление комментариев и ведущих пробельных символов)
lineStripper = Stripper()
commentRemover = CommentRemover()
linePreprocessor = TextConveyorPreprocessor()
linePreprocessor.addProcessor(commentRemover)
linePreprocessor.addProcessor(lineStripper)
# TODO: перенести в корень комапановки
fromFileSettingsProvider = FromFileSettingsProvider()
settingsPath = 'scripts/settings.txt'
fromFileSettingsProvider = FromFileSettingsProvider(settingsPath, linePreprocessor)
overrideWithCmdSetProvider = CmdArgsOverriderSettingsProvider(fromFileSettingsProvider, overrideArgs)
fContentProvider = FileContentProvider()
@ -96,5 +101,5 @@ if __name__ == "__main__":
resolvedBuildConfigProvider = ResolvedBuildConfigProvider(predefineBuildConfigProvider)
runner = TaskRunner(overrideWithCmdSetProvider, fContentProvider, resolvedBuildConfigProvider)
runner = TaskRunner(overrideWithCmdSetProvider, fContentProvider, resolvedBuildConfigProvider, linePreprocessor)
runner.run()

View File

@ -3,14 +3,20 @@ from parsers.SettingsParser.SettingsParser import SettingsParser
class FromFileSettingsProvider(SettingsProviderBase):
def __init__(self):
def __init__(self, pathToSettings, compositeLineProcessor):
SettingsProviderBase.__init__(self)
assert pathToSettings is not None
assert compositeLineProcessor is not None
self.pathToSettings = pathToSettings
self.compositeLineProcessor = compositeLineProcessor
def fetchSettings(self):
settingsFile = open('scripts/settings.txt')
settingsFile = open(self.pathToSettings)
content = settingsFile.read()
parser = SettingsParser()
parser = SettingsParser(self.compositeLineProcessor)
parser.parse(content)
return parser.settings