| The Gaudi Framework v28r2p1 (f1a77ff4)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
GaudiKernel.Configurable.ConfigurableUser Class Reference
Inheritance diagram for GaudiKernel.Configurable.ConfigurableUser:
[legend]
Collaboration diagram for GaudiKernel.Configurable.ConfigurableUser:
[legend]

## Public Member Functions
def | __init__ (self, name=Configurable.DefaultName, _enabled=True, kwargs)
def | getGaudiType (self)
def | getDlls (self)
def | getHandle (self)
def | __detach_used__ (self)
def | propagateProperty (self, name, others=None, force=True)
def | propagateProperties (self, names=None, others=None, force=True)
def | __apply_configuration__ (self)
def | applyConf (self)
def | getUsedInstance (self, name)
def | isApplicable (self)
Public Member Functions inherited from GaudiKernel.Configurable.Configurable
def | __new__ (cls, args, kwargs)
def | __init__ (self, name=DefaultName)
def | __getstate__ (self)
def | __getnewargs__ (self)
def | __setstate__ (self, dict)
def | __len__ (self)
def | __iter__ (self)
def | __deepcopy__ (self, memo)
def | __iadd__ (self, configs, descr=None)
def | __getattr__ (self, attr)
def | __setattr__ (self, name, value)
def | __delattr__ (self, attr)
def | __nonzero__ (self)
def | remove (self, items)
def | removeAll (self)
def | copyChild (self, child)
def | setParent (self, parentName)
def | getParent (self)
def | hasParent (self, parent)
def | copyChildAndSetParent (self, cfg, parent)
def | getChildren (self)
def | getTools (self)
def | children (self)
def | getAllChildren (self)
def | getSequence (self)
def | setup (self)
def | getProperties (self)
def | getPropertiesWithDescription (self)
def | getValuedProperties (self)
def | properties (self)
def | getDefaultProperties (cls)
def | getDefaultProperty (cls, name)
def | getProp (self, name)
def | setProp (self, name, value)
def | isPropertySet (self, name)
def | getType (cls)
def | getName (self)
def | name (self)
def | getJobOptName (self)
def | isPublic (self)
def | jobOptName (self)
def | getFullName (self)
def | getFullJobOptName (self)
def | getPrintTitle (self)
def | getTitleName (self)
def | setDefaults (cls, handle)
def | clone (self, name=None, kwargs)
def | splitName (self)
def | addTool (self, tool, name=None)
def | __repr__ (self)
def | __str__ (self, indent=0, headerLastIndentUnit=indentUnit)

## Private Member Functions
def | __addActiveUseOf (self, other)
def | __addPassiveUseOf (self, other)
def | _instanceName (self, cls)

## Private Attributes
| _enabled
| __users__
| _applied
| __used_instances__

## Static Private Attributes
dictionary | __slots__
list | __used_configurables__ = []
| list of ConfigurableUser classes this one is going to modify in the apply_configuration method. More...
list | __queried_configurables__ = []
| list of ConfigurableUser classes this one is going to query in the apply_configuration method More...

## Additional Inherited Members
Static Public Attributes inherited from GaudiKernel.Configurable.Configurable
| propertyNoValue
string | indentUnit = '| '
int | printHeaderWidth = 100
int | printHeaderPre = 5
dictionary | allConfigurables = {}
dictionary | configurableServices = {}

## Detailed Description

Definition at line 1170 of file Configurable.py.

## Constructor & Destructor Documentation

def GaudiKernel.Configurable.ConfigurableUser.__init__ | ( |  | self,
|  |  | name = `Configurable.DefaultName`,
|  |  | _enabled = `True`,
|  |  | kwargs
| ) |  |

Definition at line 1187 of file Configurable.py.

1187 def __init__( self, name = Configurable.DefaultName, _enabled = True, **kwargs ):
1188 super( ConfigurableUser, self ).__init__( name )
1189 for n, v in kwargs.items():
1190 setattr(self, n, v)
1191 self._enabled = _enabled
1192 self.__users__ = []
1193 self._applied = False
1194
1195 # Needed to retrieve the actual class if the declaration in __used_configurables__
1196 # and __queried_configurables__ is done with strings.
1197 from GaudiKernel.ConfigurableDb import getConfigurable as confDbGetConfigurable
1198
1199 # Set the list of users of the used configurables
1200 #
1201 self.__used_instances__ = []
1202 for used in self.__used_configurables__:
1203 # By default we want to use the default name of the instances
1204 # for the used configurables
1205 used_name = Configurable.DefaultName
1206 # If the entry in the list is a tuple, we need a named instance
1207 if type(used) is tuple:
1208 used, used_name = used # we re-set used to re-use the code below
1209 if not used_name:
1210 used_name = self._instanceName(used)
1211 # Check is 'used' is a string or not
1212 if type(used) is str:
1213 used_class = confDbGetConfigurable(used)
1214 else:
1215 used_class = used
1216 # Instantiate the configurable that we are going to use
1217 try:
1218 inst = used_class(name = used_name, _enabled = False)
1219 except AttributeError:
1220 # This cover the case where the used configurable is not a
1221 # ConfigurableUser instance, i.e. id doesn't have the attribute
1222 # '_enabled'.
1223 inst = used_class(name = used_name)
1224 self.__addActiveUseOf(inst)
1225 for queried in self.__queried_configurables__:
1226 try:
1227 if type(queried) is str:
1228 queried = confDbGetConfigurable(used)
1229 inst = queried(_enabled = False)
1230 except AttributeError:
1231 inst = queried()
1232 self.__addPassiveUseOf(inst)
GaudiKernel.Configurable.ConfigurableUser.__users__
__users__
Definition: Configurable.py:1192
GaudiKernel.Configurable.ConfigurableUser.__queried_configurables__
list __queried_configurables__
list of ConfigurableUser classes this one is going to query in the apply_configuration method ...
Definition: Configurable.py:1186
GaudiKernel.Configurable.ConfigurableUser.__init__
def __init__(self, name=Configurable.DefaultName, _enabled=True, kwargs)
Definition: Configurable.py:1187
GaudiKernel.Configurable.ConfigurableUser.__addPassiveUseOf
def __addPassiveUseOf(self, other)
Definition: Configurable.py:1241
GaudiKernel.Configurable.ConfigurableUser._instanceName
def _instanceName(self, cls)
Definition: Configurable.py:1341
GaudiKernel.Configurable.ConfigurableUser.__used_configurables__
list __used_configurables__
list of ConfigurableUser classes this one is going to modify in the apply_configuration method...
Definition: Configurable.py:1183
GaudiKernel.ConfigurableDb
Definition: ConfigurableDb.py:1
GaudiKernel.Configurable.ConfigurableUser.__addActiveUseOf
def __addActiveUseOf(self, other)
Definition: Configurable.py:1233
GaudiKernel.Configurable.ConfigurableUser._enabled
_enabled
Definition: Configurable.py:1191
gaudirun.type
type
Definition: gaudirun.py:125
GaudiKernel.Configurable.ConfigurableUser._applied
_applied
Definition: Configurable.py:1193
GaudiKernel.Configurable.ConfigurableUser.__used_instances__
__used_instances__
Definition: Configurable.py:1201
GaudiKernel.Configurable.Configurable.DefaultName
for detecting the default name
Definition: Configurable.py:101

## Member Function Documentation

def GaudiKernel.Configurable.ConfigurableUser.__addActiveUseOf | ( |  | self,
|  |  | other
| ) |  |
| private

    Declare that we are going to modify the Configurable 'other' in our
    __apply_configuration__.

Definition at line 1233 of file Configurable.py.

1233 def __addActiveUseOf(self, other):
1234 """
1235 Declare that we are going to modify the Configurable 'other' in our
1236 __apply_configuration__.
1237 """
1238 self.__used_instances__.append(other)
1239 if hasattr(other, "__users__"): # allow usage of plain Configurables
1240 other.__users__.append(self)
GaudiKernel.Configurable.ConfigurableUser.__addActiveUseOf
def __addActiveUseOf(self, other)
Definition: Configurable.py:1233

def GaudiKernel.Configurable.ConfigurableUser.__addPassiveUseOf | ( |  | self,
|  |  | other
| ) |  |
| private

    Declare that we are going to retrieve property values from the
    ConfigurableUser 'other' in our __apply_configuration__.

Definition at line 1241 of file Configurable.py.

1241 def __addPassiveUseOf(self, other):
1242 """
1243 Declare that we are going to retrieve property values from the
1244 ConfigurableUser 'other' in our __apply_configuration__.
1245 """
1246 if not isinstance(other, ConfigurableUser):
1247 raise Error("'%s': Cannot make passive use of '%s', it is not a ConfigurableUser" % (self.name(), other.name()))
1248 other.__addActiveUseOf(self)
GaudiKernel.Configurable.ConfigurableUser.__addPassiveUseOf
def __addPassiveUseOf(self, other)
Definition: Configurable.py:1241
GaudiKernel.Configurable.Configurable.name
def name(self)
Definition: Configurable.py:694
GaudiKernel.Configurable.Error
Definition: Configurable.py:56

def GaudiKernel.Configurable.ConfigurableUser.__apply_configuration__ | ( |  | self | ) |

    Function to be overridden to convert the high level configuration into a
    low level one.
    The default implementation calls applyConf, which is the method defined
    in some ConfigurableUser implementations.

Definition at line 1325 of file Configurable.py.

1325 def __apply_configuration__(self):
1326 """
1327 Function to be overridden to convert the high level configuration into a
1328 low level one.
1329 The default implementation calls applyConf, which is the method defined
1330 in some ConfigurableUser implementations.
1331 """
1332 return self.applyConf()
1333
GaudiKernel.Configurable.ConfigurableUser.__apply_configuration__
def __apply_configuration__(self)
Definition: Configurable.py:1325
GaudiKernel.Configurable.ConfigurableUser.applyConf
def applyConf(self)
Definition: Configurable.py:1334

def GaudiKernel.Configurable.ConfigurableUser.__detach_used__ | ( |  | self | ) |

    Remove this ConfigurableUser instance from the users list of the used
    instances.

Definition at line 1256 of file Configurable.py.

1256 def __detach_used__(self):
1257 """
1258 Remove this ConfigurableUser instance from the users list of the used
1259 instances.
1260 """
1261 for used in self.__used_instances__:
1262 if hasattr(used, "__users__"): # allow usage of plain Configurables
1263 used.__users__.remove(self)
1264
GaudiKernel.Configurable.ConfigurableUser.__detach_used__
def __detach_used__(self)
Definition: Configurable.py:1256
GaudiKernel.Configurable.ConfigurableUser.__used_instances__
__used_instances__
Definition: Configurable.py:1201

def GaudiKernel.Configurable.ConfigurableUser._instanceName | ( |  | self,
|  |  | cls
| ) |  |
| private

    Function used to define the name of the private instance of a given class
    name.
    This method is used when the __used_configurables_property__ declares the
    need of a private used configurable without specifying the name.

Definition at line 1341 of file Configurable.py.

1341 def _instanceName(self, cls):
1342 """
1343 Function used to define the name of the private instance of a given class
1344 name.
1345 This method is used when the __used_configurables_property__ declares the
1346 need of a private used configurable without specifying the name.
1347 """
1348 if type(cls) is str:
1349 clName = cls
1350 else:
1351 clName = cls.__name__
1352 return "%s_%s" % (self.name(), clName)
1353
GaudiKernel.Configurable.ConfigurableUser._instanceName
def _instanceName(self, cls)
Definition: Configurable.py:1341
GaudiKernel.Configurable.Configurable.name
def name(self)
Definition: Configurable.py:694
gaudirun.type
type
Definition: gaudirun.py:125

def GaudiKernel.Configurable.ConfigurableUser.applyConf | ( |  | self | ) |

    Function to be overridden to convert the high level configuration into a
    low level one.

Definition at line 1334 of file Configurable.py.

1334 def applyConf( self ):
1335 """
1336 Function to be overridden to convert the high level configuration into a
1337 low level one.
1338 """
1339 pass
1340
GaudiKernel.Configurable.ConfigurableUser.applyConf
def applyConf(self)
Definition: Configurable.py:1334

def GaudiKernel.Configurable.ConfigurableUser.getDlls | ( |  | self | ) |

Definition at line 1251 of file Configurable.py.

1251 def getDlls( self ):
1252 return None
GaudiKernel.Configurable.ConfigurableUser.getDlls
def getDlls(self)
Definition: Configurable.py:1251

def GaudiKernel.Configurable.ConfigurableUser.getGaudiType | ( |  | self | ) |

Definition at line 1249 of file Configurable.py.

1249 def getGaudiType( self ):
1250 return 'User'
GaudiKernel.Configurable.ConfigurableUser.getGaudiType
def getGaudiType(self)
Definition: Configurable.py:1249

def GaudiKernel.Configurable.ConfigurableUser.getHandle | ( |  | self | ) |

Definition at line 1253 of file Configurable.py.

1253 def getHandle( self ):
1254 return None
1255
GaudiKernel.Configurable.ConfigurableUser.getHandle
def getHandle(self)
Definition: Configurable.py:1253

def GaudiKernel.Configurable.ConfigurableUser.getUsedInstance | ( |  | self,
|  |  | name
| ) |  |

    Return the used instance with a given name.

Definition at line 1354 of file Configurable.py.

1354 def getUsedInstance(self, name):
1355 """
1356 Return the used instance with a given name.
1357 """
1358 for i in self.__used_instances__:
1359 if i.name() == name:
1360 if hasattr(i, "_enabled"):
1361 # ensure that the instances retrieved through the method are
1362 # enabled
1363 i._enabled = True
1364 return i
1365 raise KeyError(name)
1366
GaudiKernel.Configurable.ConfigurableUser.getUsedInstance
def getUsedInstance(self, name)
Definition: Configurable.py:1354
GaudiKernel.Configurable.ConfigurableUser.__used_instances__
__used_instances__
Definition: Configurable.py:1201

def GaudiKernel.Configurable.ConfigurableUser.isApplicable | ( |  | self | ) |

    Return True is the instance can be "applied".

Definition at line 1367 of file Configurable.py.

1367 def isApplicable(self):
1368 '''
1369 Return True is the instance can be "applied".
1370 '''
1371 return (not self.__users__) and (not self._applied)
1372
1373
1374 # list of callables to be called after all the __apply_configuration__ are called.
GaudiKernel.Configurable.ConfigurableUser.__users__
__users__
Definition: Configurable.py:1192
GaudiKernel.Configurable.ConfigurableUser.isApplicable
def isApplicable(self)
Definition: Configurable.py:1367
GaudiKernel.Configurable.ConfigurableUser._applied
_applied
Definition: Configurable.py:1193

def GaudiKernel.Configurable.ConfigurableUser.propagateProperties | ( |  | self,
|  |  | names = `None`,
|  |  | others = `None`,
|  |  | force = `True`
| ) |  |

    Call propagateProperty for each property listed in 'names'.
    If 'names' is None, all the properties are propagated.

Definition at line 1314 of file Configurable.py.

1314 def propagateProperties(self, names = None, others = None, force = True):
1315 """
1316 Call propagateProperty for each property listed in 'names'.
1317 If 'names' is None, all the properties are propagated.
1318 """
1319 if names is None:
1320 # use all the non-private slots
1321 names = [ p for p in self.__slots__ if not p.startswith("_") ]
1322 for n in names:
1323 self.propagateProperty(n, others, force)
1324
GaudiKernel.Configurable.ConfigurableUser.propagateProperty
def propagateProperty(self, name, others=None, force=True)
Definition: Configurable.py:1265
GaudiKernel.Configurable.ConfigurableUser.propagateProperties
def propagateProperties(self, names=None, others=None, force=True)
Definition: Configurable.py:1314
GaudiKernel.Configurable.Configurable.__slots__
tuple __slots__
Definition: Configurable.py:111

def GaudiKernel.Configurable.ConfigurableUser.propagateProperty | ( |  | self,
|  |  | name,
|  |  | others = `None`,
|  |  | force = `True`
| ) |  |

    Propagate the property 'name' (if set) to other configurables (if possible).
    'others' can be:
        None:
    propagate to all the entries in __used_configurables__
        a configurable instance:
    propagate only to it
        list of configurable instances:
    propagate to all of them.

    The logic is:
    - if the local property is set, the other property will be overwritten
    - local property not set and other set => keep other
    - local property not set and other not set => overwrite the default for
        ConfigurableUser instances and set the property for Configurables

Definition at line 1265 of file Configurable.py.

1265 def propagateProperty(self, name, others = None, force = True):
1266 """
1267 Propagate the property 'name' (if set) to other configurables (if possible).
1268 'others' can be:
1269 None:
1270 propagate to all the entries in __used_configurables__
1271 a configurable instance:
1272 propagate only to it
1273 list of configurable instances:
1274 propagate to all of them.
1275
1276
1277 The logic is:
1278 - if the local property is set, the other property will be overwritten
1279 - local property not set and other set => keep other
1280 - local property not set and other not set => overwrite the default for
1281 ConfigurableUser instances and set the property for Configurables
1282 """
1283 # transform 'others' to a list of configurable instances
1284 if others is None:
1285 others = self.__used_instances__
1286 elif type(others) not in [ list, tuple ] :
1287 others = [ others ]
1288 # these can be computed before the loop
1289 local_is_set = self.isPropertySet(name)
1290 value = self.getProp(name)
1291 # loop over the others that do have 'name' in their slots
1292 for other in [ o for o in others if name in o.__slots__ ]:
1293 # If self property is set, use it
1294 if local_is_set:
1295 if other.isPropertySet(name):
1296 log.warning("Property '%(prop)s' is set in both '%(self)s' and '%(other)s', using '%(self)s.%(prop)s'"%
1297 { "self": self.name(),
1298 "other": other.name(),
1299 "prop": name } )
1300 other.setProp(name, value)
1301 # If not, and other property also not set, propagate the default
1302 elif not other.isPropertySet(name):
1303 if isinstance(other,ConfigurableUser):
1304 otherType = type(other._properties[name].getDefault())
1305 other._properties[name].setDefault(value)
1306 if otherType in [list, dict]:
1307 # Special case for list and dictionaries:
1308 # also set the property to the same value of the default (copy)
1309 other.setProp(name, otherType(value))
1310 else:
1311 other.setProp(name, value)
1312 # If not set and other set, do nothing
1313
GaudiKernel.Configurable.ConfigurableUser.propagateProperty
def propagateProperty(self, name, others=None, force=True)
Definition: Configurable.py:1265
GaudiKernel.Configurable.Configurable.getProp
def getProp(self, name)
Definition: Configurable.py:660
GaudiKernel.Configurable.Configurable.name
def name(self)
Definition: Configurable.py:694
gaudirun.type
type
Definition: gaudirun.py:125
GaudiKernel.Configurable.Configurable.isPropertySet
def isPropertySet(self, name)
Definition: Configurable.py:673
GaudiKernel.Configurable.ConfigurableUser.__used_instances__
__used_instances__
Definition: Configurable.py:1201

## Member Data Documentation

list GaudiKernel.Configurable.ConfigurableUser.__queried_configurables__ = []
| static private

list of ConfigurableUser classes this one is going to query in the apply_configuration method

Definition at line 1186 of file Configurable.py.

dictionary GaudiKernel.Configurable.ConfigurableUser.__slots__
| static private

Initial value:
1 = { "__users__": [],
2 "__used_instances__": [],
3 "_enabled": True,
4 "_applied": False }

Definition at line 1171 of file Configurable.py.

list GaudiKernel.Configurable.ConfigurableUser.__used_configurables__ = []
| static private

list of ConfigurableUser classes this one is going to modify in the apply_configuration method.

The list may contain class objects, strings representing class objects or tuples with the class object (or a string) as first element and the instance name as second element. If the instance name is None or not present, the function instanceName() is used to determine the name of the instance (the default implementation returns "<this name></em><other name>".

Definition at line 1183 of file Configurable.py.

GaudiKernel.Configurable.ConfigurableUser.__used_instances__
| private

Definition at line 1201 of file Configurable.py.

GaudiKernel.Configurable.ConfigurableUser.__users__
| private

Definition at line 1192 of file Configurable.py.

GaudiKernel.Configurable.ConfigurableUser._applied
| private

Definition at line 1193 of file Configurable.py.

GaudiKernel.Configurable.ConfigurableUser._enabled
| private

Definition at line 1191 of file Configurable.py.

The documentation for this class was generated from the following file:

- GaudiKernel/python/GaudiKernel/Configurable.py