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

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): def test_startsWithComment(self):
line = '# this line is comment' line = '# this line is comment'
newLine = self.commentRemover.processText(line, self.commentRemover) newLine = self.commentRemover.processText(line, None)
self.assertEqual('', newLine) self.assertEqual('', newLine)
def test_containsComment(self): def test_containsComment(self):
line = 'this line contains # a comment' 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) self.assertEqual('this line contains ', newLine)

View File

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

View File

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

View File

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