From fc6738eabe8be47e0026ef84c9c852d8e5e76818 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Tue, 5 Nov 2013 15:24:40 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D0=BA=D0=BE=D0=BD=D1=84?= =?UTF-8?q?=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B9=20=D0=B8=D0=B7?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B0=D0=BD=D0=B4=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/IosSteps.txt | 1 + .../SettingsParser/SettingsLineParser.py | 2 +- .../parser/SettingsParser/SettingsMerger.py | 12 +++---- .../parser/SettingsParser/SettingsParser.py | 8 +++-- scripts/taskRunner.py | 20 ++++++++--- .../CmdArgsOverriderSettingsProvider.py | 33 +++++++++++++++++++ .../FromFileSettingsProvider.py | 0 scripts/utils/SettingsProvider/__init__.py | 1 + 8 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 scripts/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py rename scripts/utils/{ => SettingsProvider}/FromFileSettingsProvider.py (100%) create mode 100644 scripts/utils/SettingsProvider/__init__.py diff --git a/scripts/IosSteps.txt b/scripts/IosSteps.txt index 8ef53bc..89d73cc 100644 --- a/scripts/IosSteps.txt +++ b/scripts/IosSteps.txt @@ -1,4 +1,5 @@ sh echo hello from '{@author}' +sh echo version: '{@version}' restore from backup create backup for 'BuildSample' diff --git a/scripts/parser/SettingsParser/SettingsLineParser.py b/scripts/parser/SettingsParser/SettingsLineParser.py index bef23b6..b3713e1 100644 --- a/scripts/parser/SettingsParser/SettingsLineParser.py +++ b/scripts/parser/SettingsParser/SettingsLineParser.py @@ -31,7 +31,7 @@ class SettingsLineParser(LineParser): propPathRegexp = r"^(?P[\w.]+)" valueRegexp = "'(?P.*)'" - regexpSource = propPathRegexp + self.keywordToken('=') + valueRegexp + regexpSource = propPathRegexp + r'\s*=\s*' + valueRegexp regexp = re.compile(regexpSource, re.UNICODE) match = regexp.match(line) diff --git a/scripts/parser/SettingsParser/SettingsMerger.py b/scripts/parser/SettingsParser/SettingsMerger.py index 755e6ff..73af7dc 100644 --- a/scripts/parser/SettingsParser/SettingsMerger.py +++ b/scripts/parser/SettingsParser/SettingsMerger.py @@ -10,7 +10,7 @@ class SettingsMerger: propName = segments[-1] settingsDict = self.getSettingsDictByPath(globalSettings, propPath) - self.overrideGuard(settingsDict, propName, propPath) + #self.overrideGuard(settingsDict, propName, propPath) settingsDict[propName] = value @@ -26,10 +26,10 @@ class SettingsMerger: return settingsDict - def overrideGuard(self, dictionary, key, path): - if key in dictionary: - pathStr = '.'.join(path) - msg = 'settings with name {0} by path {1} already exists with value {3}'.format(key, dictionary[key], pathStr) - raise Exception(msg) + #def overrideGuard(self, dictionary, key, path): + # if key in dictionary: + # pathStr = '.'.join(path) + # msg = 'settings with name {0} by path {1} already exists with value {3}'.format(key, dictionary[key], pathStr) + # raise Exception(msg) diff --git a/scripts/parser/SettingsParser/SettingsParser.py b/scripts/parser/SettingsParser/SettingsParser.py index 37489dc..1e55f43 100644 --- a/scripts/parser/SettingsParser/SettingsParser.py +++ b/scripts/parser/SettingsParser/SettingsParser.py @@ -3,8 +3,11 @@ from parser.SettingsParser.SettingsMerger import SettingsMerger class SettingsParser: - def __init__(self): - self.settings = {} + def __init__(self, settings=None): + self.settings = settings + + if not self.settings: + self.settings = {} def parse(self, content): assert content is not None @@ -21,6 +24,7 @@ class SettingsParser: self.processLine(stripped) def processLine(self, line): + assert line is not None parser = SettingsLineParser() setting = parser.parseLine(line) diff --git a/scripts/taskRunner.py b/scripts/taskRunner.py index a58f578..048ce40 100644 --- a/scripts/taskRunner.py +++ b/scripts/taskRunner.py @@ -1,12 +1,15 @@ +# -*- coding: utf-8 -*- import os +import argparse from Core.LineConveyor.CommentRemover import CommentRemover from Core.LineConveyor.LineConveyor import LineConveyor from Core.LineConveyor.MacroResolver import MacroResolver from Core.LineConveyor.Stripper import Stripper from commands.ValueProvider import ValueProvider from utils.BuildConfigProvider import BuildConfigProvider -from utils.FromFileSettingsProvider import FromFileSettingsProvider from utils.MacroProcessor import MacroProcessor +from utils.SettingsProvider.CmdArgsOverriderSettingsProvider import CmdArgsOverriderSettingsProvider +from utils.SettingsProvider.FromFileSettingsProvider import FromFileSettingsProvider scriptFilePath = os.path.abspath(__file__) @@ -19,9 +22,11 @@ from Core.StepsRunner import StepsRunner class TaskRunner: - def __init__(self): + def __init__(self, settingsProvider): + assert settingsProvider is not None + + self.settingsProvider = settingsProvider self.configsProvider = BuildConfigProvider() - self.settingsProvider = FromFileSettingsProvider() lineStripper = Stripper() commentRemover = CommentRemover() @@ -56,5 +61,12 @@ class TaskRunner: content = stepsFile.read() return content -runner = TaskRunner() +parser = argparse.ArgumentParser() +overrideArgs = parser.parse_known_args()[1] + +# TODO: перенести в корень комапановки +fromFileSettingsProvider = FromFileSettingsProvider() +settingsProvider = CmdArgsOverriderSettingsProvider(fromFileSettingsProvider, overrideArgs) + +runner = TaskRunner(settingsProvider) runner.run() diff --git a/scripts/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py b/scripts/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py new file mode 100644 index 0000000..533c289 --- /dev/null +++ b/scripts/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py @@ -0,0 +1,33 @@ +import select +from parser.SettingsParser.SettingsParser import SettingsParser + + +class CmdArgsOverriderSettingsProvider: + def __init__(self, settingsProvider, settingLines): + assert settingsProvider is not None + + self.inner = settingsProvider + self.overrideSettings = settingLines + + def fetchSettings(self): + settings = self.inner.fetchSettings() + + if self.overrideSettings: + for s in self.overrideSettings: + line = self.normalizeLine(s) + settingParser = SettingsParser(settings) + settingParser.processLine(line) + + return settings + + + def normalizeLine(self, line): + assert line is not None + assert '=' in line + + index = line.find('=') + path = line[0:index] + value = line[index + 1:] + + normalizedLine = "{0} = '{1}'".format(path, value) + return normalizedLine diff --git a/scripts/utils/FromFileSettingsProvider.py b/scripts/utils/SettingsProvider/FromFileSettingsProvider.py similarity index 100% rename from scripts/utils/FromFileSettingsProvider.py rename to scripts/utils/SettingsProvider/FromFileSettingsProvider.py diff --git a/scripts/utils/SettingsProvider/__init__.py b/scripts/utils/SettingsProvider/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/utils/SettingsProvider/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov'