00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 import ConfigParser, os
00018 from objects.logic.common.exception import exception
00019 from objects.logic.common.logger import logger
00020 from threading import RLock
00021
00022
00023
00024
00025
00026
00027 class configurator():
00028 def __init__(self, configFileName):
00029 self.config = ConfigParser.SafeConfigParser()
00030 self.lck = RLock()
00031
00032 self.configFileName = configFileName
00033
00034
00035
00036 def loadConfig(self):
00037 fileFp = None
00038
00039 self.lck.acquire(1)
00040 try:
00041 fileFp = open(self.configFileName)
00042 self.config.readfp(fileFp)
00043 except Exception, data:
00044 logger.log(__name__ + "There was an error reading: " + self.configFileName)
00045 logger.log(data)
00046
00047 raise Exception, data
00048 finally:
00049 self.lck.release()
00050 if fileFp != None: fileFp.close()
00051
00052
00053
00054
00055
00056
00057
00058
00059 def getConfigValue(self, section, option, default, setIfNotFound):
00060
00061 self.lck.acquire(1)
00062 try:
00063 return self.readFmat(self.config.get(section, option))
00064
00065 except Exception, getError:
00066 errMsg = "Could not retrieve [%s]==>%s: %s" % (section, option, getError)
00067 logger.log(__name__ + errMsg )
00068
00069 if setIfNotFound == True:
00070
00071 fileFp = None
00072
00073 try:
00074 fileFp = open(self.configFileName, 'w')
00075
00076 logger.log(__name__ + ": Writing default value back to configuration file" )
00077
00078 self.setConfigValue(section, option, self.writeFmat(str(default)))
00079
00080
00081
00082 except Exception, setError:
00083 errMsg = ": Could not write default setting back to file: %s" % (setError)
00084 logger.log(__name__ + errMsg )
00085
00086 finally:
00087 if fileFp != None: fileFp.close()
00088
00089 return self.readFmat(default)
00090 finally:
00091 self.lck.release()
00092
00093
00094
00095
00096 def getSection(self, section):
00097 try:
00098 self.lck.acquire(1)
00099 return self.config.items(section)
00100 except ConfigParser.NoSectionError:
00101 logger.log(__name__ + ": There was an error Retrieving ini file section")
00102 logger.log(section)
00103 logger.log(__name__ + ": Section will be added")
00104
00105 try:
00106 self.config.add_section(section)
00107 except Exception:
00108 logger.log(__name__ + ": Holy !@#$%. I can't even add the section. I give up")
00109 finally:
00110 return []
00111
00112
00113 finally:
00114 self.lck.release()
00115
00116
00117
00118
00119
00120
00121 def setConfigValue(self, section, option, value):
00122 try:
00123 self.lck.acquire(1)
00124 fileFp = open(self.configFileName, 'w')
00125
00126 try:
00127 self.config.add_section(section)
00128 except Exception:
00129
00130 pass
00131
00132
00133 self.config.set(section, option, self.writeFmat(str(value)))
00134
00135 self.config.write(fileFp)
00136
00137 except Exception, setError:
00138 errMsg = ": Could not write display setting option to file: %s" % (setError)
00139 raise exception(setError, False)
00140 logger.log(__name__ + errMsg )
00141
00142 finally:
00143 if fileFp != None: fileFp.close()
00144 self.lck.release()
00145
00146
00147
00148
00149
00150
00151
00152 def writeFmat(self, str):
00153 if str == None or str == "" or str == "None":
00154 return "__None__"
00155 else:
00156 return str
00157
00158
00159
00160
00161
00162 def readFmat(self, str):
00163 if str == "__None__":
00164 return "";
00165 else:
00166 return str
00167
00168
00169
00170
00171
00172