X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plc_config.py;h=45805b969d4d3a8b65965d2f1d968c7ad1aaffbb;hb=d50314a488d8f6922241fbb6e99c21993f784fa2;hp=c9382d24510e854cc508a8676eff1196320f13e3;hpb=1dad308942acf9c883fc49614dd852624abf8cbc;p=myplc.git diff --git a/plc_config.py b/plc_config.py index c9382d2..45805b9 100644 --- a/plc_config.py +++ b/plc_config.py @@ -11,6 +11,7 @@ # import xml.dom.minidom +from xml.parsers.expat import ExpatError from StringIO import StringIO import time import re @@ -20,6 +21,8 @@ import os import types +class ConfigurationException(Exception): pass + class PLCConfiguration: """ Configuration file store. Optionally instantiate with a file path @@ -187,7 +190,11 @@ class PLCConfiguration: Merge file into configuration store. """ - dom = xml.dom.minidom.parse(file) + try: + dom = xml.dom.minidom.parse(file) + except ExpatError, e: + raise ConfigurationException, e + if type(file) in types.StringTypes: self._files.append(os.path.abspath(file)) @@ -235,6 +242,44 @@ class PLCConfiguration: fileobj.close() + def verify(self, default, read, verify_variables={}): + """ Confirm that the existing configuration is consistent + according to the checks below. + + It looks for filled-in values in the order of, local object (self), + followed by cread (read values), and finally default values. + + Arguments: + + default configuration + site configuration + list of category/variable tuples to validate in these configurations + + Returns: + + dict of values for the category/variables passed in + If an exception is found, ConfigurationException is raised. + + """ + + validated_variables = {} + for category_id, variable_id in verify_variables.iteritems(): + category_id = category_id.lower() + variable_id = variable_id.lower() + variable_value = None + sources = (self, read, default) + for source in sources: + (category_value, variable_value) = source.get(category_id,variable_id) + if variable_value <> None: + entry = validated_variables.get(category_id,[]) + entry.append(variable_value['value']) + validated_variables["%s_%s"%(category_id.upper(),variable_id.upper())]=entry + break + if variable_value == None: + raise ConfigurationException("Cannot find %s_%s)" % \ + (category_id.upper(), + variable_id.upper())) + return validated_variables def get(self, category_id, variable_id): """