From 88647c5d52bbf9f4f50edf3dc2b40f0660f4e285 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 19:18:08 +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=BA=D0=BB=D0=B0=D1=81=D1=81=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B9=20=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D1=81?= =?UTF-8?q?=D1=81=D1=8B=D0=BB=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D0=B3=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=B5=20=D0=BA=20=D1=81=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FromFileSettingsProvider.py | 13 +++++++ scripts/SettingsProvider/__init__.py | 1 + scripts/buildRunner.py | 12 +++++++ .../parser/SettingsParser/SettingsMerger.py | 32 +++++++++++++++++ .../parser/SettingsParser/SettingsParser.py | 35 +++---------------- scripts/settings.txt | 3 ++ scripts/utils/configs/BuildConfigProvider.py | 16 +++++++++ scripts/utils/configs/__init__.py | 1 + 8 files changed, 82 insertions(+), 31 deletions(-) create mode 100644 scripts/SettingsProvider/FromFileSettingsProvider.py create mode 100644 scripts/SettingsProvider/__init__.py create mode 100644 scripts/buildRunner.py create mode 100644 scripts/parser/SettingsParser/SettingsMerger.py create mode 100644 scripts/utils/configs/BuildConfigProvider.py create mode 100644 scripts/utils/configs/__init__.py diff --git a/scripts/SettingsProvider/FromFileSettingsProvider.py b/scripts/SettingsProvider/FromFileSettingsProvider.py new file mode 100644 index 0000000..7ed0f66 --- /dev/null +++ b/scripts/SettingsProvider/FromFileSettingsProvider.py @@ -0,0 +1,13 @@ +import os +from parser.SettingsParser.SettingsParser import SettingsParser + + +class FromFileSettingsProvider: + def fetchSettings(self): + settingsFile = open('settings.txt') + content = settingsFile.read() + + parser = SettingsParser() + parser.parse(content) + + return parser.settings diff --git a/scripts/SettingsProvider/__init__.py b/scripts/SettingsProvider/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/SettingsProvider/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/buildRunner.py b/scripts/buildRunner.py new file mode 100644 index 0000000..8bd6b3a --- /dev/null +++ b/scripts/buildRunner.py @@ -0,0 +1,12 @@ +from SettingsProvider.FromFileSettingsProvider import FromFileSettingsProvider +from utils.configs.BuildConfigProvider import BuildConfigProvider + +settingsProvider = FromFileSettingsProvider() +settings = settingsProvider.fetchSettings() + +buildReadyConfigs = [] +configsProvider = BuildConfigProvider() +configsProvider.getBuildReadyConfigs(settings, buildReadyConfigs) + +for bc in buildReadyConfigs: + print bc diff --git a/scripts/parser/SettingsParser/SettingsMerger.py b/scripts/parser/SettingsParser/SettingsMerger.py new file mode 100644 index 0000000..366f971 --- /dev/null +++ b/scripts/parser/SettingsParser/SettingsMerger.py @@ -0,0 +1,32 @@ +class SettingsMerger: + def merge(self, globalSettings, settingDescription): + value = settingDescription['value'] + segments = settingDescription['segments'] + + propPath = segments[0:-1] + propName = segments[-1] + + settingsDict = self.getSettingsDictByPath(globalSettings, propPath) + self.overrideGuard(settingsDict, propName, propPath) + + settingsDict[propName] = value + + def getSettingsDictByPath(self, globalSettings, pathToSettingsDict): + + settingsDict = globalSettings + 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) + + diff --git a/scripts/parser/SettingsParser/SettingsParser.py b/scripts/parser/SettingsParser/SettingsParser.py index 0561236..37489dc 100644 --- a/scripts/parser/SettingsParser/SettingsParser.py +++ b/scripts/parser/SettingsParser/SettingsParser.py @@ -1,4 +1,5 @@ from parser.SettingsParser.SettingsLineParser import SettingsLineParser +from parser.SettingsParser.SettingsMerger import SettingsMerger class SettingsParser: @@ -11,7 +12,6 @@ class SettingsParser: lines = content.splitlines() for line in lines: stripped = line.strip(' \t\n\r') - print (line, stripped) if len(stripped) == 0: continue @@ -27,33 +27,6 @@ class SettingsParser: self.mergeSetting(setting) - 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) - + def mergeSetting(self, settingDescription): + merger = SettingsMerger() + merger.merge(self.settings, settingDescription) \ No newline at end of file diff --git a/scripts/settings.txt b/scripts/settings.txt index e2d253a..039a364 100644 --- a/scripts/settings.txt +++ b/scripts/settings.txt @@ -9,5 +9,8 @@ ios.steps = 'IosSteps.txt' android.steps = 'AndroidSteps.txt' # config settings +ios.appstore.build_ready = 'true' ios.appstore.app_name = 'CoolApp' + +ios.staging.build_ready = 'true' ios.staging.app_name = 'CoolApp staging' diff --git a/scripts/utils/configs/BuildConfigProvider.py b/scripts/utils/configs/BuildConfigProvider.py new file mode 100644 index 0000000..16f20c8 --- /dev/null +++ b/scripts/utils/configs/BuildConfigProvider.py @@ -0,0 +1,16 @@ +class BuildConfigProvider: + def getBuildReadyConfigs(self, settingsDict, buildReadyList): + assert settingsDict is not None + assert buildReadyList is not None + + for key in settingsDict: + value = settingsDict[key] + + if type(value) is dict: + self.getBuildReadyConfigs(value, buildReadyList) + + elif key == 'build_ready' and value == 'true': + buildReadyList.append(settingsDict) + break + + diff --git a/scripts/utils/configs/__init__.py b/scripts/utils/configs/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/utils/configs/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov'