Реализовал класс который предоставляет ссылки на готове к сборке конфигурации

This commit is contained in:
rzaitov 2013-10-31 19:18:08 +04:00
parent 5dc42a9245
commit 88647c5d52
8 changed files with 82 additions and 31 deletions

View File

@ -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

View File

@ -0,0 +1 @@
__author__ = 'rzaitov'

12
scripts/buildRunner.py Normal file
View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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'

View File

@ -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

View File

@ -0,0 +1 @@
__author__ = 'rzaitov'