boinc/py/Boinc/projectxml.py

58 lines
1.8 KiB
Python

#!/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 = '<boinc></boinc>'
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