Package TestON :: Package bin :: Module updatedriver
[hide private]
[frames] | no frames]

Source Code for Module TestON.bin.updatedriver

  1  import inspect 
  2  import sys 
  3  import os 
  4  import re 
  5  from core import xmldict 
  6  ''' 
  7  @author: Raghav Kashyap (raghavkashyap@paxterrasolutions.com) 
  8   
  9      TestON is free software: you can redistribute it and/or modify 
 10      it under the terms of the GNU General Public License as published by 
 11      the Free Software Foundation, either version 2 of the License, or 
 12      (at your option) any later version. 
 13   
 14      TestON is distributed in the hope that it will be useful, 
 15      but WITHOUT ANY WARRANTY; without even the implied warranty of 
 16      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 17      GNU General Public License for more details. 
 18   
 19      You should have received a copy of the GNU General Public License 
 20      along with TestON.  If not, see <http://www.gnu.org/licenses/>. 
 21   
 22   
 23  ''' 
 24   
 25   
26 -class UpdateDriver:
27 - def __init__(self):
28 self.default = '' 29 self.configFile = "/home/openflow/TestON/config/ofadriver.cfg" 30 self.methodDict = {} 31 self.fileDict = {}
32 33
34 - def getmethods(self,modulePath,Class) :
35 ''' 36 This will get the list of methods in given module or class. 37 It accepts the module path and class name. If there is no 38 class name then it has be mentioned as None. 39 ''' 40 methodList = [] 41 moduleList = modulePath.split("/") 42 newModule = ".".join([moduleList[len(moduleList) - 2],moduleList[len(moduleList) - 1]]) 43 print "Message : Method list is being obatined , Please wait ..." 44 try : 45 if Class : 46 Module = __import__(moduleList[len(moduleList) - 1], globals(), locals(), [Class], -1) 47 ClassList = [x.__name__ for x in Module.__dict__.values() if inspect.isclass(x)] 48 self.ClassList = ClassList 49 Class = vars(Module)[Class] 50 methodList = [x.__name__ for x in Class.__dict__.values() if inspect.isfunction(x)] 51 else : 52 Module = __import__(moduleList[len(moduleList) - 1], globals(), locals(),[moduleList[len(moduleList) - 2]], -1) 53 methodList = [x.__name__ for x in Module.__dict__.values() if inspect.isfunction(x)] 54 ClassList = [x.__name__ for x in Module.__dict__.values() if inspect.isclass(x)] 55 self.ClassList = ClassList 56 except : 57 print "Error : " +str(sys.exc_info()[1]) 58 59 60 self.method = methodList 61 return self.method
62
63 - def echo(self) :
64 print "Echoing !!!!!!"
65
66 - def getargs(self,moduleName,className,method) :
67 ''' 68 This will return the list of arguments in a method of python module of class. 69 It accepts method list as an argument. 70 ''' 71 print "Message : Argument list is being obtained for each method" 72 methodArgsDict = {} 73 if className == None: 74 moduleList = moduleName.split(".") 75 for index,name in enumerate(method) : 76 Module = __import__(moduleList[len(moduleList) -1], globals(), locals(), [moduleList[len(moduleList) -2]], -1) 77 try : 78 names = vars(Module)[name] 79 except KeyError: 80 print "Message : method '" + name + "'does not exists,Continued with including it. " 81 return False 82 argumentList = inspect.getargspec(names) #inspect.getargvalues(name) 83 methodArgsDict[name] = argumentList[0] 84 else : 85 moduleList = moduleName.split(".") 86 for index,name in enumerate(method) : 87 Module = __import__(moduleList[len(moduleList) - 1], globals(), locals(), [className], -1) 88 Class = getattr(Module, className) 89 try : 90 names = vars(Class)[name] 91 except KeyError : 92 print "Message : method '" + name + "'does not exists,Continued with include it." 93 return False 94 95 argumentList = inspect.getargspec(names) #inspect.getargvalues(name) 96 methodArgsDict[name] = argumentList[0] 97 98 return methodArgsDict
99
100 - def configparser(self,fileName):
101 ''' 102 It will parse the config file (ofa.cfg) and return as dictionary 103 ''' 104 105 matchFileName = re.match(r'(.*)\.cfg', fileName, re.M | re.I) 106 if matchFileName: 107 self.configFile = fileName 108 try : 109 xml = open(fileName).read() 110 self.configDict = xmldict.xml_to_dict(xml) 111 return self.configDict 112 except : 113 print "Error : Config file " + self.configFile + " not defined properly or file path error"
114 115
116 - def getList(self):
117 ''' 118 This method will maintain the hash with module->class->methodList or 119 module -> methodList .It will return the same Hash. 120 ''' 121 classList = [] 122 try : 123 moduleList = self.configDict['config-driver']['importTypes'][self.driver]['modules'].keys() 124 except KeyError,e: 125 print "Error : Module Does not Exists" 126 print e 127 return False 128 129 for index,value in enumerate(moduleList): 130 modulePath = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['path'] 131 moduleName = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['name'] 132 133 try : 134 pathList = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['set-path'].split(",") 135 sys.path.extend(pathList) 136 except KeyError : 137 print "Error : No System Path is given " 138 pass 139 try : 140 Class = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['classes'] 141 except : 142 Class = None 143 if Class == None : 144 methodList = self.getmethods(modulePath,None) 145 self.methodDict[moduleName] = methodList 146 self.method_ignoreList(value,None) 147 self.getMethodArgsHash(moduleName,value,None) 148 else : 149 classList = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['classes'].keys() 150 for indx,className in enumerate(classList): 151 if className == 'ignore-list' : 152 pass 153 else : 154 methodList = self.getmethods(modulePath,className) 155 self.methodDict[moduleName] = {className : methodList} 156 self.method_ignoreList(value,className) 157 self.class_ignoreList(value) 158 self.getMethodArgsHash(moduleName,value,className)
159
160 - def class_ignoreList(self,module) :
161 ''' 162 It removes the ignored classes for each module mention in ofadriver.cfg 163 ''' 164 class_ignoreList = [] 165 if self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['classes'] == None : 166 pass 167 else : 168 try : 169 class_ignoreList = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['classes']['ignore-list']).split(",") 170 except KeyError : 171 print "Message : No Class Ignore List present" 172 return True 173 moduleName = self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['name'] 174 try : 175 for index,className in enumerate(class_ignoreList): 176 if className in self.methodDict[moduleName].keys(): 177 del self.methodDict[moduleName][className] 178 except AttributeError: 179 pass 180 return self.methodDict
181
182 - def method_ignoreList(self,module,className):
183 ''' 184 It removes the ignored methods of each module or class mentioned in ofadriver.cfg. 185 ''' 186 method_ignoreList = [] 187 188 try : 189 if className == None : 190 try : 191 method_ignoreList = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['methods']['ignore-list']).split(",") 192 except TypeError : 193 pass 194 else : 195 try : 196 method_ignoreList = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['classes'][className]['methods']['ignore-list']).split(",") 197 except TypeError : 198 pass 199 except KeyError : 200 print "Message : No Ignore-List Exists , proceeding for looking add method" 201 self.add_method(module,className) 202 return True 203 204 moduleName = self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['name'] 205 #import pprint 206 #pprint.pprint(self.methodDict[moduleName]) 207 for index, method in enumerate(method_ignoreList) : 208 if className == None : 209 try : 210 self.methodDict[moduleName].remove(method) 211 #pprint.pprint(self.methodDict) 212 except ValueError: 213 print "Message : Method " + method + "Does not exist in module " + moduleName + ", Continue to rest execution" 214 pass 215 216 else : 217 if method in self.methodDict[moduleName][className] : 218 self.methodDict[moduleName][className].remove(method) 219 self.add_method(module,className) 220 return self.methodDict
221
222 - def add_method(self,module,className) :
223 ''' 224 This will add the methods(mentioned in ofadriver.cfg file) into method list if it doesnot exists in list. 225 ''' 226 method_List = [] 227 try : 228 if className == None : 229 try : 230 method_List = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['methods']['add-list']).split(",") 231 except TypeError : 232 pass 233 else : 234 try : 235 method_List = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['classes'][className]['methods']['add-list']).split(",") 236 except TypeError : 237 pass 238 239 except KeyError : 240 print "Message : No Add-List Exists , Proceeding with all available methods" 241 return True 242 moduleName = self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['name'] 243 for index, method in enumerate(method_List) : 244 if className == None : 245 self.methodDict[moduleName] = [] 246 self.methodDict[moduleName].append(method) 247 else : 248 self.methodDict[moduleName][className] = [] 249 self.methodDict[moduleName][className].append(method)
250
251 - def getMethodArgsHash(self,moduleName,module,className):
252 ''' 253 This will maintain a Hash of class->method->argumentsList 254 ''' 255 modulePath = self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['path'] 256 moduleList = modulePath.split("/") 257 newModule = ".".join([moduleList[len(moduleList) - 2],moduleList[len(moduleList) - 1]]) 258 if className == None : 259 methodArgs = self.getargs(newModule,None,self.methodDict[moduleName]) 260 self.fileDict[moduleName] = methodArgs 261 else : 262 methodArgs = self.getargs(newModule,className,self.methodDict[moduleName][className]) 263 self.fileDict[className] = methodArgs 264 return self.fileDict
265
266 - def appendDriver(self,fileName):
267 ''' 268 This will append the given driver file with methods along with arguments. 269 ''' 270 matchFileName = re.match(r'(.*)\.py', fileName, re.M | re.I) 271 272 if matchFileName: 273 fileHandle = None 274 try : 275 print "Message : Writing Driver file at " + fileName 276 fileHandle = open(fileName,"a") 277 content = '' 278 279 for index, key in enumerate(self.fileDict.keys()): 280 try : 281 for ind, method in enumerate(self.fileDict[key].keys()): 282 if not method == "__init__" : 283 args = '' 284 args = ",".join(self.fileDict[key][method]) 285 content = content + "\n" + " " * 4 + "def " + method + "(self," + args + ") :" 286 content = content + "\n" + " " * 8 + "return " + key + "." + method + "(" + args + ")\n" 287 except AttributeError : 288 pass 289 fileHandle.write(content) 290 fileHandle.close() 291 return content 292 293 except : 294 print "Error : Driver file " + fileName + "does not exists" 295 else : 296 print "Error : File name " + fileName + "is not python module" 297 return False
298 299
300 - def writeDriver(self, driver) :
301 ''' 302 This will accept the List of driver name and write those drivers if no driver name is specified 303 then it will write all of the driver specified in the ofadriver.cfg. 304 ''' 305 self.printHeader(driver) 306 drivers = [] 307 commaMatch = re.search(",", driver, flags=0) 308 if commaMatch: 309 drivers = driver.split(",") 310 else : 311 drivers.append(driver) 312 self.driverList = [] 313 if len(drivers) == 0: 314 for index, driverName in enumerate(self.configDict['config-driver']['importTypes'].keys()): 315 self.driver = driverName 316 result = self.getList() 317 if result : 318 self.getDriverPath() 319 self.appendDriver(self.driverPath + self.driver + ".py") 320 self.driverList.append(self.driverPath + self.driver + ".py") 321 else : 322 return False 323 else : 324 for index, driverName in enumerate(drivers) : 325 326 self.driver = driverName 327 result = self.getList() 328 if result : 329 self.getDriverPath() 330 self.appendDriver(self.driverPath + self.driver + ".py") 331 self.driverList.append(self.driverPath + self.driver + ".py") 332 else : 333 return False 334 335 print "=" * 90 336 print " " * 30 + "Output Driver File :" 337 print ",\n".join(self.driverList) 338 print "=" * 90 339 return True
340 341 342
343 - def getDriverPath(self):
344 ''' 345 It will set the driver path and returns it.If driver path is not specified then it will take 346 default path (/lib/updatedriver/). 347 ''' 348 self.driverPath = '' 349 try : 350 self.driverPath = self.configDict['config-driver']['importTypes'][self.driver]['driver-path'] 351 352 except KeyError: 353 location = os.path.abspath( os.path.dirname( __file__ ) ) 354 path = re.sub( "(bin)$", "", location ) 355 self.driverPath = path + "/lib/updatedriver/" 356 return self.driverPath
357 358
359 - def printHeader(self,driver):
360 content = '' 361 362 print " " * 10 +"=" * 90 + "\n" 363 content = content + " " * 30 + "*-- Welcome to Updated Driver --*\n" 364 content = content + "\n" + " " * 10 + " " * 10 + "Config File : " + "/home/openflow/TestON/config/ofadriver.py" 365 content = content + "\n" + " " * 10 + " " * 10 + "Drivers Name : " + driver 366 print content 367 print " " * 10 + "=" * 90
368