| # Gaudi Framework, version v21r9 |

Home |  | Generated: 3 May 2010

# ConfigurableDb Namespace Reference

## Classes
class | _CfgDb
class | _Singleton
## Functions
def | loadConfigurableDb
| Helper function to load all ConfigurableDb files holding informations.
def | getConfigurable
## Variables
list | __all__ = [ 'CfgDb', 'cfgDb', 'loadConfigurableDb', 'getConfigurable' ]
tuple | _transtable = string.maketrans('<>&*,: ().', '__rp__s___')
tuple | log = logging.getLogger( 'ConfigurableDb' )
tuple | CfgDb = _Singleton()
tuple | cfgDb = CfgDb()
| default name for CfgDb instance

## Function Documentation

def ConfigurableDb::getConfigurable | ( |  | className,
|  |  | requester = `''`,
|  |  | assumeCxxClass = `True` |
| ) |  |  |

Definition at line 142 of file ConfigurableDb.py.

    00142                                                                    :
    00143     confClass=className
    00144     if assumeCxxClass:
    00145         # assume className is C++: --> translate to python
    00146         confClass = string.translate( confClass, _transtable )
    00147     # see if I have it in my dictionary
    00148     confClassInfo = cfgDb.get(confClass)
    00149     if not confClassInfo:
    00150         confClassInfo = cfgDb.get(confClass)
    00151     # get the python module
    00152     confMod = confClassInfo and confClassInfo.get('module')
    00153     if not confMod:
    00154         log.warning( "%s: Class %s not in database", requester, className )
    00155         return None
    00156     # load the module
    00157     try:
    00158         mod = __import__(confMod,globals(),locals(),confClass)
    00159     except ImportError:
    00160         log.warning( "%s: Module %s not found (needed for configurable %s)",
    00161                      requester, confMod, className )
    00162         return None
    00163     # get the class
    00164     try:
    00165         confClass = getattr(mod,confClass)
    00166     except AttributeError:
    00167         log.warning( "%s: Configurable %s not found in module %s",
    00168                      requester, confClass, confMod )
    00169         return None
    00170     # Got it!
    00171     log.debug( "%s: Found configurable %s in module %s",
    00172                requester, confClass, confMod )
    00173
    00174     return confClass
        return confClass

def ConfigurableDb::loadConfigurableDb | ( |  | ) |

Helper function to load all ConfigurableDb files holding informations.

    Helper function to load all ConfigurableDb files (modules) holding
    informations about Configurables

Definition at line 92 of file ConfigurableDb.py.

    00092                         :
    00093     """Helper function to load all ConfigurableDb files (modules) holding
    00094     informations about Configurables
    00095     """
    00096     import os
    00097     import sys
    00098     from zipfile import is_zipfile, ZipFile
    00099     from glob import glob
    00100     from os.path import join as path_join
    00101     log.debug( "importing confDb packages..." )
    00102     nFiles = 0 # counter of imported files
    00103     for path in sys.path:
    00104         log.debug( "walking in [%s]..." % path )
    00105         if not os.path.exists(path):
    00106             continue
    00107         # speed-up: <project>_merged_confDb.py files are installed as :
    00108         # "/some/path/InstallArea/python/<project>_merged_confDb.py
    00109         # so why bother wandering in other directories ?
    00110         if path.endswith(path_join("InstallArea","python")):
    00111             # turn filename syntax into module syntax: remove path+extension and replace / with . (dot)
    00112             confDbModules = [ os.path.splitext( f[len(path)+1:] )[0].replace(os.sep,'.')
    00113                               for f in glob(path_join(path, "*_merged_confDb.py"))
    00114                               if os.path.isfile(f) ]
    00115         elif path.endswith(path_join("InstallArea","python.zip")) and is_zipfile(path):
    00116             # turn filename syntax into module syntax: remove path+extension and replace / with . (dot)
    00117             confDbModules = [ os.path.splitext(f)[0].replace('/','.')
    00118                              for f in ZipFile(path).namelist()
    00119                              if f.endswith("_merged_confDb.py") or f.endswith("_merged_confDb.pyc") ]
    00120         else:
    00121             continue
    00122         for confDbModule in confDbModules:
    00123             nFiles += 1
    00124             log.debug( "\t-importing [%s]..." % confDbModule )
    00125             try:
    00126                 mod = __import__( confDbModule )
    00127             except ImportError, err:
    00128                 log.warning( "Could not import module [%s] !", confDbModule )
    00129                 log.warning( "Reason: %s", err )
    00130                 pass
    00131             else:
    00132                 # don't need to keep the module
    00133                 del mod
    00134             pass
    00135         pass # loop over sys.path
    00136     log.debug( "importing confDb packages... [DONE]" )
    00137     nPkgs = len( set([k['package'] for k in cfgDb.values()]) )
    00138     log.debug( "imported %i confDb packages" % nPkgs )
    00139     return nFiles
    00140
    00141
    def getConfigurable( className, requester='', assumeCxxClass=True ):

## Variable Documentation

list ConfigurableDb::__all__ = [ 'CfgDb', 'cfgDb', 'loadConfigurableDb', 'getConfigurable' ]

Definition at line 10 of file ConfigurableDb.py.

tuple ConfigurableDb::_transtable = string.maketrans('<>&*,: ().', '__rp__s___')

Definition at line 13 of file ConfigurableDb.py.

tuple ConfigurableDb::cfgDb = CfgDb()

default name for CfgDb instance

Definition at line 89 of file ConfigurableDb.py.

tuple ConfigurableDb::CfgDb = _Singleton()

Definition at line 82 of file ConfigurableDb.py.

tuple ConfigurableDb::log = logging.getLogger( 'ConfigurableDb' )

Definition at line 16 of file ConfigurableDb.py.