реализовал подстановку значений из конфига

This commit is contained in:
rzaitov 2013-11-05 13:00:37 +04:00
parent fedf7b6241
commit 10594d0b9b
9 changed files with 76 additions and 22 deletions

View File

@ -0,0 +1,20 @@
class MacroResolver:
def __init__(self, macroProcessor, valueProvider):
assert macroProcessor is not None
assert valueProvider is not None
self.macroProcessor = macroProcessor
self.valueProvider = valueProvider
def processLine(self, line):
assert line is not None
symbols = self.macroProcessor.getSymbols(line)
for sym in symbols:
macro = self.macroProcessor.getMacroByName(sym)
value = self.valueProvider.getValueFor(sym)
line = line.replace(macro, value)
return line

View File

@ -8,17 +8,16 @@ from CommandBuilders.PatchInfoplistCommandBuilder import PatchInfoplistCommandBu
from CommandBuilders.RemoveProjectCommandBuilder import RemoveProjectCommandBuilder
from CommandBuilders.RestoreBackupCommandBuilder import RestoreBackupCommandBuilder
from CommandBuilders.ShCommandBuilder import ShCommandBuilder
from commands.ValueProvider import ValueProvider
class StepsRunner:
def __init__(self, config, compositeLineProcessor):
def __init__(self, config, compositeLineProcessor, valueProvider):
assert config is not None
assert compositeLineProcessor is not None
assert valueProvider is not None
self.lineConveyor = compositeLineProcessor
self.valueProvider = ValueProvider(config)
self.valueProvider = valueProvider
self.shCommandBuilder = ShCommandBuilder()
self.removeProjectBuilder = RemoveProjectCommandBuilder()

View File

@ -1,22 +1,22 @@
sh echo hello from '{@author}'
restore from backup
create backup for 'BuildSample'
inside 'BuildSample/BuildSample.sln' remove NotCompileApp project
inside 'BuildSample/BuildSample/CoolApp.csproj' set OutputPath to 'Output'
inside 'BuildSample/BuildSample/Info.plist' set CFBundleVersion to '1.2.3'
inside 'BuildSample/BuildSample/Info.plist' set CFBundleVersion to '{@version}'
inside 'BuildSample/BuildSample/Info.plist' set CFBundleDisplayName to 'CoolApp'
copy 'BuildSample/BuildSample/Profiles/8F606DAE-F9C9-4A19-8EFF-34B990D76C28.mobileprovision' to '~/Library/MobileDevice/Provisioning Profiles/BuildScript.mobileprovision'
clean 'BuildSample/BuildSample.sln' for 'Release|iPhone'
build 'BuildSample/BuildSample.sln' for 'Release|iPhone'
clean 'BuildSample/BuildSample.sln' for '{@sln_config}'
build 'BuildSample/BuildSample.sln' for '{@sln_config}'
create dirs 'Output/Appstore/Artifacts'
copy 'BuildSample/BuildSample/Output/BuildSample-1.2.3.ipa' to 'Output/Appstore/Artifacts'
copy 'BuildSample/BuildSample/Output/BuildSample-{@version}.ipa' to 'Output/Appstore/Artifacts'
sh cp -a BuildSample/BuildSample/Output/ Output/Appstore/
restore from backup
delete backup
sh echo hello from Rustam
delete backup

View File

@ -0,0 +1,23 @@
import unittest
from Core.LineConveyor.MacroResolver import MacroResolver
from commands.ValueProvider import ValueProvider
from utils.MacroProcessor import MacroProcessor
class TestMacroResolver(unittest.TestCase):
def setUp(self):
config = {
'key1': 'hello world',
'some_name': 'another name',
'version': '1.2.3'
}
macroProcessor = MacroProcessor()
valueProvider = ValueProvider(config)
self.macroResolver = MacroResolver(macroProcessor, valueProvider)
def test_resolveLine(self):
line = '{@key1} bla {@some_name} version: {@version}'
newLine = self.macroResolver.processLine(line)
self.assertEqual('hello world bla another name version: 1.2.3', newLine)

View File

@ -1,10 +1,10 @@
import unittest
from utils.Macro import Macro
from utils.MacroProcessor import MacroProcessor
class TestMacro(unittest.TestCase):
def setUp(self):
self.macroParser = Macro()
self.macroParser = MacroProcessor()
def test_parseMacros(self):
line = 'hello {@this} is {@my_macro} and {@macro_with_numbers123}'
@ -19,10 +19,10 @@ class TestMacro(unittest.TestCase):
line = '{@macro_name}'
name = self.macroParser.getMacroName(line)
self.assertEqual('macro_name', name)
self.assertEqual('@macro_name', name)
def test_getMacro(self):
line = 'some_name'
line = '@some_name'
macro = self.macroParser.getMacroByName(line)
self.assertEqual('{@some_name}', macro)

View File

@ -1,7 +1,6 @@
class ValueProvider:
def __init__(self, config):
def setConfig(self, config):
assert config is not None
self.__config = config
def getValueFor(self, link):

View File

@ -12,6 +12,8 @@ ios.steps = 'scripts/IosSteps.txt'
ios.appstore.build_ready = 'true'
ios.appstore.app_name = 'CoolApp'
ios.appstore.sln_config = 'Release|iPhone'
ios.appstore.author = 'Rustam'
ios.appstore.version = '7.7.7'
#ios.staging.build_ready = 'true'
ios.staging.app_name = 'CoolApp staging'

View File

@ -1,9 +1,12 @@
import os
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
scriptFilePath = os.path.abspath(__file__)
@ -22,21 +25,28 @@ class TaskRunner:
lineStripper = Stripper()
commentRemover = CommentRemover()
macroProcessor = MacroProcessor()
self.valueProvider = ValueProvider()
macroResolver = MacroResolver(macroProcessor, self.valueProvider)
self.lineConveyor = LineConveyor()
self.lineConveyor.addProcessor(lineStripper)
self.lineConveyor.addProcessor(commentRemover)
self.lineConveyor.addProcessor(macroResolver)
def run(self):
settings = self.settingsProvider.fetchSettings()
buildReadyConfigs = self.configsProvider.getConfigs(settings)
for bc in buildReadyConfigs:
self.valueProvider.setConfig(bc)
self.runConfig(bc)
def runConfig(self, config):
content = self.getStepsContent(config)
stepsRunner = StepsRunner(config, self.lineConveyor)
stepsRunner = StepsRunner(config, self.lineConveyor, self.valueProvider)
stepsRunner.run(content)
def getStepsContent(self, config):

View File

@ -1,24 +1,25 @@
import re
class Macro:
class MacroProcessor:
def __init__(self):
pass
def getMacroByName(self, macroName):
assert macroName is not None
assert macroName.startswith('@')
return '{@' + macroName + '}'
return '{' + macroName + '}'
def getMacroName(self, macro):
assert macro.startswith('{@')
assert macro.endswith('}')
return macro[2:-1]
return macro[1:-1]
def getSymbols(self, line):
assert line is not None
symRegexp = r"{@(?P<symbol>[\w]+)}"
symRegexp = r"{(?P<symbol>@[\w]+)}"
regexp = re.compile(symRegexp)
result = regexp.findall(line)