Esempio n. 1
0
class TaskRunner:
	def __init__(self, settingsProvider, fileContentProvider, buildConfigProvider, linePreprocessor, defaults):
		assert settingsProvider is not None
		assert fileContentProvider is not None
		assert buildConfigProvider is not None
		assert linePreprocessor is not None
		assert defaults is not None

		self.settingsProvider = settingsProvider
		self.fileContentProvider = fileContentProvider
		self.configsProvider = buildConfigProvider
		self.linePreprocessor = linePreprocessor
		self.defaults = defaults

		macroProcessor = MacroProcessor()
		self.valueProvider = ValueProvider()
		macroResolver = MacroResolver(macroProcessor, self.valueProvider)

		includeProcessor = IncludeProcessor()
		textInclude = TextInclude(includeProcessor, self.fileContentProvider)

		# последовательность важна!
		# Сначала резолвим макросы, потом делаем включение файлов
		# Это позволяет использовать макросы в include выражениях
		self.textPreprocessor = TextConveyorPreprocessor()
		self.textPreprocessor.addProcessor(macroResolver)
		self.textPreprocessor.addProcessor(textInclude)


	def run(self):
		rawSettings = self.settingsProvider.fetchSettings()
		buildReadyConfigs = self.configsProvider.getConfigs(rawSettings)

		for bc in buildReadyConfigs:
			self.valueProvider.setConfig(bc)
			self.runConfig(bc)

	def runConfig(self, config):
		content = self.getStepsContent(config)

		stepsRunner = StepsRunner(config, self.linePreprocessor, self.valueProvider)
		stepsRunner.run(content)

	def getStepsContent(self, config):
		pathToSteps = config.get('steps', self.defaults['steps'])

		content = self.fileContentProvider.fetchContent(pathToSteps)
		content = self.textPreprocessor.processText(content, self.textPreprocessor)

		return content
Esempio n. 2
0
	def __init__(self, settingsProvider, fileContentProvider, buildConfigProvider, linePreprocessor, defaults):
		assert settingsProvider is not None
		assert fileContentProvider is not None
		assert buildConfigProvider is not None
		assert linePreprocessor is not None
		assert defaults is not None

		self.settingsProvider = settingsProvider
		self.fileContentProvider = fileContentProvider
		self.configsProvider = buildConfigProvider
		self.linePreprocessor = linePreprocessor
		self.defaults = defaults

		macroProcessor = MacroProcessor()
		self.valueProvider = ValueProvider()
		macroResolver = MacroResolver(macroProcessor, self.valueProvider)

		includeProcessor = IncludeProcessor()
		textInclude = TextInclude(includeProcessor, self.fileContentProvider)

		# последовательность важна!
		# Сначала резолвим макросы, потом делаем включение файлов
		# Это позволяет использовать макросы в include выражениях
		self.textPreprocessor = TextConveyorPreprocessor()
		self.textPreprocessor.addProcessor(macroResolver)
		self.textPreprocessor.addProcessor(textInclude)
Esempio n. 3
0
		'settings': 'settings.txt',
		'builder_path': scriptDir,
		'steps': os.path.join(scriptDir, 'steps.txt')
	}

	parser = argparse.ArgumentParser()
	parser.add_argument('--settings', required=False)
	allArgs = parser.parse_known_args()

	knownArgs = allArgs[0]
	overrideArgs = allArgs[1]

	# компоную препроцессор для индивидуальной обработки строк (удаление комментариев и ведущих пробельных символов)
	lineStripper = Stripper()
	commentRemover = CommentRemover()
	linePreprocessor = TextConveyorPreprocessor()
	linePreprocessor.addProcessor(commentRemover)
	linePreprocessor.addProcessor(lineStripper)

	# TODO:  перенести в корень комапановки
	settingsPath = knownArgs.settings or defaults['settings']
	fromFileSettingsProvider = FromFileSettingsProvider(settingsPath, linePreprocessor)
	overrideWithCmdSetProvider = CmdArgsOverriderSettingsProvider(fromFileSettingsProvider, overrideArgs, linePreprocessor)

	fContentProvider = FileContentProvider()

	buildConfigProvider = BuildConfigProvider()
	predefineBuildConfigProvider = PredefinedMacrosBuildConfigProvider(buildConfigProvider)
	predefineBuildConfigProvider.addPredefineMacro('builder_path', defaults['builder_path'])

	resolvedBuildConfigProvider = ResolvedBuildConfigProvider(predefineBuildConfigProvider)