|
Gaudi Framework, version v22r2 |
| Home | Generated: Tue May 10 2011 |
Classes | |
| class | Error |
| class | PropertyReference |
| Allow references to options as in old style. More... | |
| class | Configurable |
| class | DummyDescriptor |
| if isinstance(v,Configurable) and not v.isPublic(): rep += v.__str__( indent + 1 ) + os.linesep elif isinstance(v,GaudiHandleArray): for vi in v: if isinstance(vi,Configurable) and not vi.isPublic(): rep += vi.__str__( indent + 1 ) + os.linesep More... | |
| class | ConfigurableGeneric |
| class | ConfigurableAlgorithm |
| class | ConfigurableService |
| class | ConfigurableAlgTool |
| class | ConfigurableAuditor |
| class | ConfigurableUser |
Functions | |
| def | expandvars |
| def | appendPostConfigAction |
| def | removePostConfigAction |
| def | applyConfigurableUsers |
| def | getNeededConfigurables |
| def | purge |
Variables | |
| list | __all__ |
| data --------------------------------------------------------------------- | |
| tuple | log = logging.getLogger( 'Configurable' ) |
| list | postConfigActions = [] |
| _appliedConfigurableUsers_ = False | |
| def Configurable::appendPostConfigAction | ( | function ) |
Add a new callable ('function') to the list of post-configuration actions.
If the callable is already in the list, it is moved to the end of the list.
The list is directly accessible as 'GaudiKernel.Configurable.postConfigActions'.
Definition at line 1309 of file Configurable.py.
01310 : 01311 """ 01312 Add a new callable ('function') to the list of post-configuration actions. 01313 If the callable is already in the list, it is moved to the end of the list. 01314 The list is directly accessible as 'GaudiKernel.Configurable.postConfigActions'. 01315 """ 01316 try: 01317 postConfigActions.remove(function) 01318 except: 01319 pass postConfigActions.append(function)
| def Configurable::applyConfigurableUsers | ( | ) |
Call the apply method of all the ConfigurableUser instances respecting the dependencies. First the C.U.s that are not used by anybody, then the used ones, when they are not used anymore.
Definition at line 1328 of file Configurable.py.
01329 : 01330 """ 01331 Call the apply method of all the ConfigurableUser instances respecting the 01332 dependencies. First the C.U.s that are not used by anybody, then the used 01333 ones, when they are not used anymore. 01334 """ 01335 # Avoid double calls 01336 global _appliedConfigurableUsers_, postConfigActions 01337 if _appliedConfigurableUsers_: 01338 return 01339 _appliedConfigurableUsers_ = True 01340 01341 confUsers = [ c 01342 for c in Configurable.allConfigurables.values() 01343 if hasattr(c,"__apply_configuration__") ] 01344 applied = True # needed to detect dependency loops 01345 while applied and confUsers: 01346 newConfUsers = [] # list of conf users that cannot be applied yet 01347 applied = False 01348 for c in confUsers: 01349 if hasattr(c,"__users__") and c.__users__: 01350 newConfUsers.append(c) # cannot use this one yet 01351 else: # it does not have users or the list is empty 01352 applied = True 01353 # the ConfigurableUser is enabled if it doesn't have an _enabled 01354 # property or its value is True 01355 enabled = (not hasattr(c, "_enabled")) or c._enabled 01356 if enabled: 01357 log.info("applying configuration of %s", c.name()) 01358 c.__apply_configuration__() 01359 log.info(c) 01360 else: 01361 log.info("skipping configuration of %s", c.name()) 01362 if hasattr(c, "__detach_used__"): 01363 # tells the used configurables that they are not needed anymore 01364 c.__detach_used__() 01365 confUsers = newConfUsers # list of C.U.s still to go 01366 if confUsers: 01367 # this means that some C.U.s could not be applied because of a dependency loop 01368 raise Error("Detected loop in the ConfigurableUser " 01369 " dependencies: %r" % [ c.name() 01370 for c in confUsers ]) 01371 # Call post-config actions 01372 for action in postConfigActions: 01373 action()
| def Configurable::expandvars | ( | data ) |
Expand environment variables "data". Data can be string, list, tuple and dictionary. For collection, all the contained strings will be manipulated (recursively).
Definition at line 27 of file Configurable.py.
00028 : 00029 """ 00030 Expand environment variables "data". 00031 Data can be string, list, tuple and dictionary. For collection, all the 00032 contained strings will be manipulated (recursively). 00033 """ 00034 import os.path 00035 typ = type(data) 00036 if typ is str: 00037 return os.path.expandvars(data) 00038 elif typ in [list, tuple]: 00039 collect = [] 00040 for i in data: 00041 collect.append(expandvars(i)) 00042 return typ(collect) 00043 elif typ is dict: 00044 collect = {} 00045 for k in data: 00046 collect[expandvars(k)] = expandvars(data[k]) 00047 return collect 00048 return data
| def Configurable::getNeededConfigurables | ( | ) |
Function to select all and only the configurables that have to be used in GaudiPython.AppMgr constructor. This is needed because in Athena the implementation have to be different (the configuration is used in a different moment).
Definition at line 1374 of file Configurable.py.
01375 : 01376 """ 01377 Function to select all and only the configurables that have to be used in 01378 GaudiPython.AppMgr constructor. 01379 This is needed because in Athena the implementation have to be different (the 01380 configuration is used in a different moment). 01381 """ 01382 return [ k 01383 for k, v in Configurable.allConfigurables.items() 01384 if v.getGaudiType() != "User" ] # Exclude ConfigurableUser instances
| def Configurable::purge | ( | ) |
Clean up all configurations and configurables.
Definition at line 1385 of file Configurable.py.
01386 : 01387 """ 01388 Clean up all configurations and configurables. 01389 """ 01390 for c in Configurable.allConfigurables.values(): 01391 c.__class__.configurables.clear() 01392 Configurable.allConfigurables.clear() 01393 # FIXME: (MCl) this is needed because instances of ConfigurableGeneric are not 01394 # migrated to the correct class when this is known. 01395 ConfigurableGeneric.configurables.clear() 01396 from ProcessJobOptions import _included_files 01397 import os.path, sys 01398 for file in _included_files: 01399 dirname, basname = os.path.split(file) 01400 basname, ext = os.path.splitext(basname) 01401 if basname in sys.modules: 01402 del sys.modules[basname] 01403 _included_files.clear()
| def Configurable::removePostConfigAction | ( | function ) |
Remove a collable from the list of post-config actions. The list is directly accessible as 'GaudiKernel.Configurable.postConfigActions'.
Definition at line 1320 of file Configurable.py.
00001 [ 'Configurable', 00002 'ConfigurableAlgorithm', 00003 'ConfigurableAlgTool', 00004 'ConfigurableAuditor', 00005 'ConfigurableService', 00006 'ConfigurableUser', 00007 'VERBOSE','DEBUG','INFO', 'WARNING', 'ERROR', 'FATAL', 00008 'appendPostConfigAction', 'removePostConfigAction' ]
data ---------------------------------------------------------------------
Definition at line 14 of file Configurable.py.
Definition at line 1327 of file Configurable.py.
| tuple Configurable::log = logging.getLogger( 'Configurable' ) |
Definition at line 25 of file Configurable.py.
| list Configurable::postConfigActions = [] |
Definition at line 1308 of file Configurable.py.