def generateList(packages=[]): """ Return a dictionary of all configurables, {package: {configurable: True/False/None} } input a list of packages to restrict the packages examined True: exists in Configurables and is instantiated OK False: exists in Configurables but fails to instantiate None: Exists in confDB but not in Configurables? """ from GaudiKernel.ConfigurableDb import cfgDb, loadConfigurableDb import Configurables #package : conf : Pass/Fail (True/False) retdict={} loadConfigurableDb() for name,conf in cfgDb.iteritems(): mypack=conf['package'] if len(packages) and mypack not in packages: continue if mypack not in retdict: retdict[mypack]={} retdict[mypack][name]=None if hasattr(Configurables, name): try: aConf=getattr(Configurables,name) if callable(aConf): aConf() else: raise TypeError(name+" is not callable, Configurables."+name+" evaluates as type "+str(type(aConf))) retdict[mypack][name]=True except Exception,e: import sys, traceback retdict[mypack][name]=False print >> sys.stderr, 'ERROR, cannot import/instantiate configurable', name, '\n-------\n', e.__class__, '\n-------' traceback.print_exc()
def test_bad(): ''' test the failure when loading malformed data ''' mlh = MockLoggingHandler() logging.getLogger('ConfigurableDb').addHandler(mlh) with fixLibPath([join(data_root, 'bad')]): from GaudiKernel.ConfigurableDb import loadConfigurableDb loadConfigurableDb() warnings = mlh.messages['warning'] assert filter(re_comp(r'Could not load.*bad.confdb').match, warnings) assert filter(re_comp(r'Reason: invalid line format').match, warnings)
def test_regular(): ''' test loading of .confdb files ''' mlh = MockLoggingHandler() logging.getLogger('ConfigurableDb').addHandler(mlh) with fixLibPath([join(data_root, 'regular', n) for n in ['dir1', 'dir2']]): from GaudiKernel.ConfigurableDb import loadConfigurableDb, cfgDb loadConfigurableDb() for c in [t + n for t in ['Alg', 'Svc'] for n in ['1a', '1b', '2']]: assert c in cfgDb, 'missing entry for ' + c
def test_merged(): ''' test priority of *_merged.confdb files over *.confdb ''' mlh = MockLoggingHandler() logging.getLogger('ConfigurableDb').addHandler(mlh) with fixLibPath([join(data_root, 'merged', n) for n in ['dir1', 'dir2']]): from GaudiKernel.ConfigurableDb import loadConfigurableDb, cfgDb loadConfigurableDb() for c in [t + n for t in ['Alg', 'Svc'] for n in ['M', '2']]: assert c in cfgDb, 'missing entry for ' + c for c in ['Alg1', 'Svc1']: assert c not in cfgDb, 'unwanted entry for ' + c
def _fillConfDict(): nFiles = loadConfigurableDb() log = logging.getLogger( 'PropertyProxy' ) log.debug( "Read module info for %d configurables from %d genConfDb files", len(cfgDb), nFiles ) if len(cfgDb.duplicates()) > 0: log.warning( "Found %d duplicates among the %d genConfDb files :", len(cfgDb.duplicates()), nFiles ) log.warning( "--------------------------------------------------" ) log.warning( " -%s: %s - %s", "<component name>", "<module>", "[ <duplicates> ]" ) log.warning( "--------------------------------------------------" ) dups = cfgDb.duplicates() for cfgName in dups.keys(): log.warning( " -%s: %s - %s", cfgName, cfgDb[cfgName]['module'], str([ d['module'] for d in dups[cfgName]]) ) pass del dups log.warning( "Fix your cmt/requirements file !!" ) pass else: log.debug( "No duplicates have been found: that's good !" ) pass return
# ============ Auto-generated testing python file ====== from Gaudi.Configuration import * import Configurables from GaudiKernel.ConfigurableDb import cfgDb, loadConfigurableDb import sys, traceback ##### load all configurables of this package ##### loadConfigurableDb() for name,conf in cfgDb.iteritems(): if conf['package']=='HltL0Conf': if hasattr(Configurables,name): try: aConf=getattr(Configurables,name) aConf() except Exception, e: print >> sys.stderr, 'ERROR, cannot import/instantiate configurable', name, '\n-------\n', e.__class__, '\n-------' traceback.print_exc()
props = sorted(comp._properties.keys()) prop_list = [] for prop_name in props: prop = comp._properties[prop_name] try: default = str(prop.getDefault()) except AttributeError: default = "unknown" doc = prop.__doc__ if doc == None: doc = '' prop_list.append({'name': prop_name, 'value': default, 'doc': doc}) info.append({ 'name' : key, 'pkg' : item['package'], # 'prop' : prop_list, }) print 'dumping', key f = open('configurables/'+key+'.json', 'w') f.write(json.dumps(prop_list)) f.close() # from pprint import pprint # pprint(info) f = open('configurables.json', 'w') f.write(json.dumps(info)) f.close() if __name__ == '__main__': from GaudiKernel.ConfigurableDb import loadConfigurableDb, getConfigurable loadConfigurableDb() dump()