The Gaudi Framework  v32r2 (46d42edc)
GaudiKernel.Configurable.ConfigurableUser Class Reference
Inheritance diagram for GaudiKernel.Configurable.ConfigurableUser:
Collaboration diagram for GaudiKernel.Configurable.ConfigurableUser:

Public Member Functions

def __init__ (self, name=Configurable.DefaultName, _enabled=True, **kwargs)
 
def getGaudiType (cls)
 
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 __bool__ (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)
 
- Public Member Functions inherited from GaudiKernel.ConfigurableMeta.ConfigurableMeta
def __new__ (self, name, bases, dct)
 
def __call__ (cls, *args, **kwargs)
 

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 __queried_configurables__ = []
 

Additional Inherited Members

- Static Public Attributes inherited from GaudiKernel.Configurable.Configurable
 propertyNoValue
 
string indentUnit = '| '
 
int printHeaderWidth = 100
 
int printHeaderPre = 5
 
dictionary allConfigurables
 
dictionary configurableServices
 
- Static Public Attributes inherited from GaudiKernel.ConfigurableMeta.ConfigurableMeta
def newclass = type.__new__(self, name, bases, dct)
 
 configurables
 
dictionary properties = {}
 
 slots = dct.get('__slots__')
 
list props = [x for x in slots if x[0] != '_']
 
 propDict = dct.get('_propertyDocDct')
 
 docString = propDict and propDict.get(prop)
 
 default = slots[prop]
 
 proxy
 
 bprops = base._properties.copy()
 
 properties = bprops
 

Detailed Description

Definition at line 1288 of file Configurable.py.

Constructor & Destructor Documentation

◆ __init__()

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

Definition at line 1308 of file Configurable.py.

1308  def __init__(self, name=Configurable.DefaultName, _enabled=True, **kwargs):
1309  super(ConfigurableUser, self).__init__(name)
1310  for n, v in kwargs.items():
1311  setattr(self, n, v)
1312  self._enabled = _enabled
1313  self.__users__ = []
1314  self._applied = False
1315 
1316  # Needed to retrieve the actual class if the declaration in __used_configurables__
1317  # and __queried_configurables__ is done with strings.
1318  from GaudiKernel.ConfigurableDb import getConfigurable as confDbGetConfigurable
1319 
1320  # Set the list of users of the used configurables
1321  #
1322  self.__used_instances__ = []
1323  for used in self.__used_configurables__:
1324  # By default we want to use the default name of the instances
1325  # for the used configurables
1326  used_name = Configurable.DefaultName
1327  # If the entry in the list is a tuple, we need a named instance
1328  if type(used) is tuple:
1329  used, used_name = used # we re-set used to re-use the code below
1330  if not used_name:
1331  used_name = self._instanceName(used)
1332  # Check is 'used' is a string or not
1333  if type(used) is str:
1334  used_class = confDbGetConfigurable(used)
1335  else:
1336  used_class = used
1337  # Instantiate the configurable that we are going to use
1338  try:
1339  inst = used_class(name=used_name, _enabled=False)
1340  except AttributeError:
1341  # This cover the case where the used configurable is not a
1342  # ConfigurableUser instance, i.e. id doesn't have the attribute
1343  # '_enabled'.
1344  inst = used_class(name=used_name)
1345  self.__addActiveUseOf(inst)
1346  for queried in self.__queried_configurables__:
1347  try:
1348  if type(queried) is str:
1349  queried = confDbGetConfigurable(used)
1350  inst = queried(_enabled=False)
1351  except AttributeError:
1352  inst = queried()
1353  self.__addPassiveUseOf(inst)
1354 

Member Function Documentation

◆ __addActiveUseOf()

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 1355 of file Configurable.py.

1355  def __addActiveUseOf(self, other):
1356  """
1357  Declare that we are going to modify the Configurable 'other' in our
1358  __apply_configuration__.
1359  """
1360  self.__used_instances__.append(other)
1361  if hasattr(other, "__users__"): # allow usage of plain Configurables
1362  other.__users__.append(self)
1363 

◆ __addPassiveUseOf()

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 1364 of file Configurable.py.

1364  def __addPassiveUseOf(self, other):
1365  """
1366  Declare that we are going to retrieve property values from the
1367  ConfigurableUser 'other' in our __apply_configuration__.
1368  """
1369  if not isinstance(other, ConfigurableUser):
1370  raise Error(
1371  "'%s': Cannot make passive use of '%s', it is not a ConfigurableUser"
1372  % (self.name(), other.name()))
1373  other.__addActiveUseOf(self)
1374 

◆ __apply_configuration__()

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.

Reimplemented in Gaudi.Configuration.GaudiPersistency.

Definition at line 1458 of file Configurable.py.

1458  def __apply_configuration__(self):
1459  """
1460  Function to be overridden to convert the high level configuration into a
1461  low level one.
1462  The default implementation calls applyConf, which is the method defined
1463  in some ConfigurableUser implementations.
1464  """
1465  return self.applyConf()
1466 

◆ __detach_used__()

def GaudiKernel.Configurable.ConfigurableUser.__detach_used__ (   self)
Remove this ConfigurableUser instance from the users list of the used
instances.

Definition at line 1385 of file Configurable.py.

1385  def __detach_used__(self):
1386  """
1387  Remove this ConfigurableUser instance from the users list of the used
1388  instances.
1389  """
1390  for used in self.__used_instances__:
1391  if hasattr(used,
1392  "__users__"): # allow usage of plain Configurables
1393  used.__users__.remove(self)
1394 

◆ _instanceName()

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 1474 of file Configurable.py.

1474  def _instanceName(self, cls):
1475  """
1476  Function used to define the name of the private instance of a given class
1477  name.
1478  This method is used when the __used_configurables_property__ declares the
1479  need of a private used configurable without specifying the name.
1480  """
1481  if type(cls) is str:
1482  clName = cls
1483  else:
1484  clName = cls.__name__
1485  return "%s_%s" % (self.name(), clName)
1486 

◆ applyConf()

def GaudiKernel.Configurable.ConfigurableUser.applyConf (   self)
Function to be overridden to convert the high level configuration into a
low level one.

Definition at line 1467 of file Configurable.py.

1467  def applyConf(self):
1468  """
1469  Function to be overridden to convert the high level configuration into a
1470  low level one.
1471  """
1472  pass
1473 

◆ getDlls()

def GaudiKernel.Configurable.ConfigurableUser.getDlls (   self)

Definition at line 1379 of file Configurable.py.

1379  def getDlls(self):
1380  return None
1381 

◆ getGaudiType()

def GaudiKernel.Configurable.ConfigurableUser.getGaudiType (   cls)

Definition at line 1376 of file Configurable.py.

1376  def getGaudiType(cls):
1377  return 'User'
1378 

◆ getHandle()

def GaudiKernel.Configurable.ConfigurableUser.getHandle (   self)

Definition at line 1382 of file Configurable.py.

1382  def getHandle(self):
1383  return None
1384 

◆ getUsedInstance()

def GaudiKernel.Configurable.ConfigurableUser.getUsedInstance (   self,
  name 
)
Return the used instance with a given name.

Definition at line 1487 of file Configurable.py.

1487  def getUsedInstance(self, name):
1488  """
1489  Return the used instance with a given name.
1490  """
1491  for i in self.__used_instances__:
1492  if i.name() == name:
1493  if hasattr(i, "_enabled"):
1494  # ensure that the instances retrieved through the method are
1495  # enabled
1496  i._enabled = True
1497  return i
1498  raise KeyError(name)
1499 

◆ isApplicable()

def GaudiKernel.Configurable.ConfigurableUser.isApplicable (   self)
Return True is the instance can be "applied".

Definition at line 1500 of file Configurable.py.

1500  def isApplicable(self):
1501  '''
1502  Return True is the instance can be "applied".
1503  '''
1504  return (not self.__users__) and (not self._applied)
1505 
1506 
1507 # list of callables to be called after all the __apply_configuration__ are called.
def isApplicable(self)
rep += v.__str__( indent + 1 ) + os.linesep elif isinstance(v,GaudiHandleArray): for vi in v: if isin...

◆ propagateProperties()

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 1447 of file Configurable.py.

1447  def propagateProperties(self, names=None, others=None, force=True):
1448  """
1449  Call propagateProperty for each property listed in 'names'.
1450  If 'names' is None, all the properties are propagated.
1451  """
1452  if names is None:
1453  # use all the non-private slots
1454  names = [p for p in self.__slots__ if not p.startswith("_")]
1455  for n in names:
1456  self.propagateProperty(n, others, force)
1457 

◆ propagateProperty()

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 1395 of file Configurable.py.

1395  def propagateProperty(self, name, others=None, force=True):
1396  """
1397  Propagate the property 'name' (if set) to other configurables (if possible).
1398  'others' can be:
1399  None:
1400  propagate to all the entries in __used_configurables__
1401  a configurable instance:
1402  propagate only to it
1403  list of configurable instances:
1404  propagate to all of them.
1405 
1406 
1407  The logic is:
1408  - if the local property is set, the other property will be overwritten
1409  - local property not set and other set => keep other
1410  - local property not set and other not set => overwrite the default for
1411  ConfigurableUser instances and set the property for Configurables
1412  """
1413  # transform 'others' to a list of configurable instances
1414  if others is None:
1415  others = self.__used_instances__
1416  elif type(others) not in [list, tuple]:
1417  others = [others]
1418  # these can be computed before the loop
1419  local_is_set = self.isPropertySet(name)
1420  value = self.getProp(name)
1421  # loop over the others that do have 'name' in their slots
1422  for other in [o for o in others if name in o.__slots__]:
1423  # If self property is set, use it
1424  if local_is_set:
1425  if other.isPropertySet(name):
1426  log.warning(
1427  "Property '%(prop)s' is set in both '%(self)s' and '%(other)s', using '%(self)s.%(prop)s'"
1428  % {
1429  "self": self.name(),
1430  "other": other.name(),
1431  "prop": name
1432  })
1433  other.setProp(name, value)
1434  # If not, and other property also not set, propagate the default
1435  elif not other.isPropertySet(name):
1436  if isinstance(other, ConfigurableUser):
1437  otherType = type(other._properties[name].getDefault())
1438  other._properties[name].setDefault(value)
1439  if otherType in [list, dict]:
1440  # Special case for list and dictionaries:
1441  # also set the property to the same value of the default (copy)
1442  other.setProp(name, otherType(value))
1443  else:
1444  other.setProp(name, value)
1445  # If not set and other set, do nothing
1446 

Member Data Documentation

◆ __queried_configurables__

list GaudiKernel.Configurable.ConfigurableUser.__queried_configurables__ = []
staticprivate

Definition at line 1306 of file Configurable.py.

◆ __slots__

dictionary GaudiKernel.Configurable.ConfigurableUser.__slots__
staticprivate
Initial value:
= {
"__users__": [],
"__used_instances__": [],
"_enabled": True,
"_applied": False
}

Definition at line 1289 of file Configurable.py.

◆ __used_configurables__

list GaudiKernel.Configurable.ConfigurableUser.__used_configurables__ = []
staticprivate

Definition at line 1303 of file Configurable.py.

◆ __used_instances__

GaudiKernel.Configurable.ConfigurableUser.__used_instances__
private

Definition at line 1322 of file Configurable.py.

◆ __users__

GaudiKernel.Configurable.ConfigurableUser.__users__
private

Definition at line 1313 of file Configurable.py.

◆ _applied

GaudiKernel.Configurable.ConfigurableUser._applied
private

Definition at line 1314 of file Configurable.py.

◆ _enabled

GaudiKernel.Configurable.ConfigurableUser._enabled
private

Definition at line 1312 of file Configurable.py.


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