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'