Mercurial > lcfOS
view python/ppci/recipe.py @ 377:9667d78ba79e
Switched to xml for project description
author | Windel Bouwman |
---|---|
date | Fri, 11 Apr 2014 15:47:50 +0200 |
parents | 577ed7fb3fe4 |
children |
line wrap: on
line source
#!/usr/bin/python3 import os import xml.dom.minidom from .tasks import Project, Target class RecipeLoader: """ Loads a recipe into a runner from a dictionary or file """ def load_file(self, recipe_file): """ Loads a build configuration from file """ recipe_dir = os.path.abspath(os.path.dirname(recipe_file)) dom = xml.dom.minidom.parse(recipe_file) project = self.load_project(dom) project.set_property('basedir', recipe_dir) return project def load_project(self, elem): elem = elem.getElementsByTagName("project")[0] name = elem.getAttribute('name') project = Project(name) if elem.hasAttribute('default'): project.default = elem.getAttribute('default') else: project.default = None for pe in elem.getElementsByTagName("property"): name = pe.getAttribute('name') value = pe.getAttribute('value') project.set_property(name, value) for te in elem.getElementsByTagName("target"): name = te.getAttribute('name') target = Target(name, project) if te.hasAttribute('depends'): dependencies = te.getAttribute('depends').split(',') for dep in dependencies: target.add_dependency(dep) # print(name) project.add_target(target) for cn in te.childNodes: # print(cn, type(cn)) if type(cn) is xml.dom.minidom.Element: task_name = cn.tagName task_props = {} for i in range(cn.attributes.length): atr = cn.attributes.item(i) #print(atr, atr.name, atr.value) task_props[atr.name] = atr.value target.add_task((task_name, task_props)) return project