The Gaudi Framework  v36r11 (bdb84f5f)
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 = {}
 

Detailed Description

Definition at line 1347 of file Configurable.py.

Constructor & Destructor Documentation

◆ __init__()

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

Definition at line 1367 of file Configurable.py.

1367  def __init__(self, name=Configurable.DefaultName, _enabled=True, **kwargs):
1368  super(ConfigurableUser, self).__init__(name)
1369  for n, v in kwargs.items():
1370  setattr(self, n, v)
1371  self._enabled = _enabled
1372  self.__users__ = []
1373  self._applied = False
1374 
1375  # Needed to retrieve the actual class if the declaration in __used_configurables__
1376  # and __queried_configurables__ is done with strings.
1377  from GaudiKernel.ConfigurableDb import getConfigurable as confDbGetConfigurable
1378 
1379  # Set the list of users of the used configurables
1380  #
1381  self.__used_instances__ = []
1382  for used in self.__used_configurables__:
1383  # By default we want to use the default name of the instances
1384  # for the used configurables
1385  used_name = Configurable.DefaultName
1386  # If the entry in the list is a tuple, we need a named instance
1387  if type(used) is tuple:
1388  used, used_name = used # we re-set used to re-use the code below
1389  if not used_name:
1390  used_name = self._instanceName(used)
1391  # Check is 'used' is a string or not
1392  if type(used) is str:
1393  used_class = confDbGetConfigurable(used)
1394  else:
1395  used_class = used
1396  # Instantiate the configurable that we are going to use
1397  try:
1398  inst = used_class(name=used_name, _enabled=False)
1399  except AttributeError:
1400  # This cover the case where the used configurable is not a
1401  # ConfigurableUser instance, i.e. id doesn't have the attribute
1402  # '_enabled'.
1403  inst = used_class(name=used_name)
1404  self.__addActiveUseOf(inst)
1405  for queried in self.__queried_configurables__:
1406  try:
1407  if type(queried) is str:
1408  queried = confDbGetConfigurable(queried)
1409  inst = queried(_enabled=False)
1410  except AttributeError:
1411  inst = queried()
1412  self.__addPassiveUseOf(inst)
1413 

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

1414  def __addActiveUseOf(self, other):
1415  """
1416  Declare that we are going to modify the Configurable 'other' in our
1417  __apply_configuration__.
1418  """
1419  self.__used_instances__.append(other)
1420  if hasattr(other, "__users__"): # allow usage of plain Configurables
1421  other.__users__.append(self)
1422 

◆ __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 1423 of file Configurable.py.

1423  def __addPassiveUseOf(self, other):
1424  """
1425  Declare that we are going to retrieve property values from the
1426  ConfigurableUser 'other' in our __apply_configuration__.
1427  """
1428  if not isinstance(other, ConfigurableUser):
1429  raise Error(
1430  "'%s': Cannot make passive use of '%s', it is not a ConfigurableUser"
1431  % (self.name(), other.name())
1432  )
1433  other.__addActiveUseOf(self)
1434 

◆ __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 ConfigurableUser.ExampleApplication, ConfigurableUser.ExampleCommon, GaudiExamples.Configuration.GaudiExamplesCommonConf, ConfigurableUser.ExampleIO, and Gaudi.ConfUser.GaudiPersistency.

Definition at line 1514 of file Configurable.py.

1514  def __apply_configuration__(self):
1515  """
1516  Function to be overridden to convert the high level configuration into a
1517  low level one.
1518  The default implementation calls applyConf, which is the method defined
1519  in some ConfigurableUser implementations.
1520  """
1521  return self.applyConf()
1522 

◆ __detach_used__()

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

Definition at line 1445 of file Configurable.py.

1445  def __detach_used__(self):
1446  """
1447  Remove this ConfigurableUser instance from the users list of the used
1448  instances.
1449  """
1450  for used in self.__used_instances__:
1451  if hasattr(used, "__users__"): # allow usage of plain Configurables
1452  used.__users__.remove(self)
1453 

◆ _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 1530 of file Configurable.py.

1530  def _instanceName(self, cls):
1531  """
1532  Function used to define the name of the private instance of a given class
1533  name.
1534  This method is used when the __used_configurables_property__ declares the
1535  need of a private used configurable without specifying the name.
1536  """
1537  if type(cls) is str:
1538  clName = cls
1539  else:
1540  clName = cls.__name__
1541  return "%s_%s" % (self.name(), clName)
1542 

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

1523  def applyConf(self):
1524  """
1525  Function to be overridden to convert the high level configuration into a
1526  low level one.
1527  """
1528  pass
1529 

◆ getDlls()

def GaudiKernel.Configurable.ConfigurableUser.getDlls (   self)

Definition at line 1439 of file Configurable.py.

1439  def getDlls(self):
1440  return None
1441 

◆ getGaudiType()

def GaudiKernel.Configurable.ConfigurableUser.getGaudiType (   cls)

Definition at line 1436 of file Configurable.py.

1436  def getGaudiType(cls):
1437  return "User"
1438 

◆ getHandle()

def GaudiKernel.Configurable.ConfigurableUser.getHandle (   self)

Definition at line 1442 of file Configurable.py.

1442  def getHandle(self):
1443  return None
1444 

◆ getUsedInstance()

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

Definition at line 1543 of file Configurable.py.

1543  def getUsedInstance(self, name):
1544  """
1545  Return the used instance with a given name.
1546  """
1547  for i in self.__used_instances__:
1548  if i.name() == name:
1549  if hasattr(i, "_enabled"):
1550  # ensure that the instances retrieved through the method are
1551  # enabled
1552  i._enabled = True
1553  return i
1554  raise KeyError(name)
1555 

◆ isApplicable()

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

Reimplemented from GaudiKernel.Configurable.Configurable.

Definition at line 1556 of file Configurable.py.

1556  def isApplicable(self):
1557  """
1558  Return True is the instance can be "applied".
1559  """
1560  return (not self.__users__) and (not self._applied)
1561 
1562 
1563 # list of callables to be called after all the __apply_configuration__ are called.

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

1503  def propagateProperties(self, names=None, others=None, force=True):
1504  """
1505  Call propagateProperty for each property listed in 'names'.
1506  If 'names' is None, all the properties are propagated.
1507  """
1508  if names is None:
1509  # use all the non-private slots
1510  names = [p for p in self.__slots__ if not p.startswith("_")]
1511  for n in names:
1512  self.propagateProperty(n, others, force)
1513 

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

1454  def propagateProperty(self, name, others=None, force=True):
1455  """
1456  Propagate the property 'name' (if set) to other configurables (if possible).
1457  'others' can be:
1458  None:
1459  propagate to all the entries in __used_configurables__
1460  a configurable instance:
1461  propagate only to it
1462  list of configurable instances:
1463  propagate to all of them.
1464 
1465 
1466  The logic is:
1467  - if the local property is set, the other property will be overwritten
1468  - local property not set and other set => keep other
1469  - local property not set and other not set => overwrite the default for
1470  ConfigurableUser instances and set the property for Configurables
1471  """
1472  # transform 'others' to a list of configurable instances
1473  if others is None:
1474  others = self.__used_instances__
1475  elif type(others) not in [list, tuple]:
1476  others = [others]
1477  # these can be computed before the loop
1478  local_is_set = self.isPropertySet(name)
1479  value = self.getProp(name)
1480  # loop over the others that do have 'name' in their slots
1481  for other in [o for o in others if name in o.__slots__]:
1482  # If self property is set, use it
1483  if local_is_set:
1484  if other.isPropertySet(name):
1485  log.warning(
1486  "Property '%(prop)s' is set in both '%(self)s' and '%(other)s', using '%(self)s.%(prop)s'"
1487  % {"self": self.name(), "other": other.name(), "prop": name}
1488  )
1489  other.setProp(name, value)
1490  # If not, and other property also not set, propagate the default
1491  elif not other.isPropertySet(name):
1492  if isinstance(other, ConfigurableUser):
1493  otherType = type(other._properties[name].getDefault())
1494  other._properties[name].setDefault(value)
1495  if otherType in [list, dict]:
1496  # Special case for list and dictionaries:
1497  # also set the property to the same value of the default (copy)
1498  other.setProp(name, otherType(value))
1499  else:
1500  other.setProp(name, value)
1501  # If not set and other set, do nothing
1502 

Member Data Documentation

◆ __queried_configurables__

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

Definition at line 1365 of file Configurable.py.

◆ __slots__

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

Definition at line 1348 of file Configurable.py.

◆ __used_configurables__

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

Definition at line 1362 of file Configurable.py.

◆ __used_instances__

GaudiKernel.Configurable.ConfigurableUser.__used_instances__
private

Definition at line 1381 of file Configurable.py.

◆ __users__

GaudiKernel.Configurable.ConfigurableUser.__users__
private

Definition at line 1372 of file Configurable.py.

◆ _applied

GaudiKernel.Configurable.ConfigurableUser._applied
private

Definition at line 1373 of file Configurable.py.

◆ _enabled

GaudiKernel.Configurable.ConfigurableUser._enabled
private

Definition at line 1371 of file Configurable.py.


The documentation for this class was generated from the following file:
gaudirun.type
type
Definition: gaudirun.py:160
GaudiKernel.ConfigurableDb
Definition: ConfigurableDb.py:1