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()
Beispiel #2
0
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)
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
# ============ 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()