#!/usr/bin/env python # $Id$ # projectxml.py - module to read and parse project.xml ''' SYNOPSIS: parses and writes project.xml USAGE: from Boinc import projectxml project = projectxml.ProjectFile().read() project.commit_all() ''' import sys import boinc_project_path from boincxml import * from add_util import * default_project_file = None class ProjectFile(XMLConfig): ''' embodies project.xml ''' default_filename = boinc_project_path.project_xml_filename def __init__(self, *args, **kwargs): XMLConfig.__init__(self, *args, **kwargs) global default_project_file default_project_file = self def _get_elements(self): self.xml_boinc = get_element(self.xml, 'boinc', optional=False) self.add_objects_and_args = [] for node in self.xml_boinc.childNodes: add_object = add_objects.get(node.nodeName) if not add_object: raise SystemExit("Error in %s: No such object '%s' to add." %(self.filename,node.nodeName)) self.add_objects_and_args.append((add_object, get_elements_as_dict(node))) def _set_elements(self): assert(0) # TODO (maybe) def commit_all(self): '''Commits all new data to the BOINC project database.''' for add_object, untranslated_args_dict in self.add_objects_and_args: try: do_add_object(add_object, untranslated_args_dict, skip_old=True) except AddObjectException, e: raise SystemExit('Error in %s: %s' %(self.filename,e)) default_xml = '' def default_project(): '''If any project file has been read, return it. Else open the default one and return it.''' if not default_project_file: ProjectFile().read() assert(default_project_file) return default_project_file