Gaudi Framework, version v23r9

Home   Generated: Thu Jul 18 2013
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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:
Inheritance graph
[legend]
Collaboration diagram for GaudiKernel.Configurable.ConfigurableUser:
Collaboration graph
[legend]

Public Member Functions

def __init__
 
def getGaudiType
 
def getDlls
 
def getHandle
 
def __detach_used__
 
def propagateProperty
 
def propagateProperties
 
def __apply_configuration__
 
def applyConf
 
def getUsedInstance
 
- Public Member Functions inherited from GaudiKernel.Configurable.Configurable
def __new__
 
def __init__
 
def __getstate__
 
def __getnewargs__
 
def __setstate__
 
def __len__
 
def __iter__
 
def __deepcopy__
 
def __iadd__
 
def __getattr__
 
def __setattr__
 
def __delattr__
 
def __nonzero__
 
def remove
 
def removeAll
 
def copyChild
 
def setParent
 
def getParent
 
def hasParent
 
def copyChildAndSetParent
 
def getChildren
 
def getTools
 
def children
 
def getAllChildren
 
def getSequence
 
def setup
 
def getProperties
 
def getValuedProperties
 
def properties
 
def getDefaultProperties
 
def getDefaultProperty
 
def getProp
 
def setProp
 
def isPropertySet
 
def getType
 
def getName
 
def name
 
def getJobOptName
 
def isPublic
 
def jobOptName
 
def getFullName
 
def getFullJobOptName
 
def getPrintTitle
 
def getTitleName
 
def setDefaults
 
def clone
 
def splitName
 
def addTool
 
def __repr__
 
def __str__
 

Private Member Functions

def __addActiveUseOf
 
def __addPassiveUseOf
 
def _instanceName
 

Private Attributes

 _enabled
 
 __users__
 
 __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.
 
list __queried_configurables__ []
 list of ConfigurableUser classes this one is going to query in the apply_configuration method
 

Additional Inherited Members

- Static Public Attributes inherited from GaudiKernel.Configurable.Configurable
string indentUnit '| '
 
int printHeaderWidth 100
 
int printHeaderPre 5
 
dictionary allConfigurables {}
 
dictionary configurableServices {}
 

Detailed Description

Definition at line 1112 of file Configurable.py.

Constructor & Destructor Documentation

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

Definition at line 1128 of file Configurable.py.

1129  def __init__( self, name = Configurable.DefaultName, _enabled = True, **kwargs ):
1130  super( ConfigurableUser, self ).__init__( name )
1131  for n, v in kwargs.items():
1132  setattr(self, n, v)
1133  self._enabled = _enabled
1134  self.__users__ = []
1135 
1136  # Needed to retrieve the actual class if the declaration in __used_configurables__
1137  # and __queried_configurables__ is done with strings.
1138  from GaudiKernel.ConfigurableDb import getConfigurable as confDbGetConfigurable
1139 
1140  # Set the list of users of the used configurables
1141  #
1142  self.__used_instances__ = []
1143  for used in self.__used_configurables__:
1144  # By default we want to use the default name of the instances
1145  # for the used configurables
1146  used_name = Configurable.DefaultName
1147  # If the entry in the list is a tuple, we need a named instance
1148  if type(used) is tuple:
1149  used, used_name = used # we re-set used to re-use the code below
1150  if not used_name:
1151  used_name = self._instanceName(used)
1152  # Check is 'used' is a string or not
1153  if type(used) is str:
1154  used_class = confDbGetConfigurable(used)
1155  else:
1156  used_class = used
1157  # Instantiate the configurable that we are going to use
1158  try:
1159  inst = used_class(name = used_name, _enabled = False)
1160  except AttributeError:
1161  # This cover the case where the used configurable is not a
1162  # ConfigurableUser instance, i.e. id doesn't have the attribute
1163  # '_enabled'.
1164  inst = used_class(name = used_name)
1165  self.__addActiveUseOf(inst)
1166  for queried in self.__queried_configurables__:
1167  try:
1168  if type(queried) is str:
1169  queried = confDbGetConfigurable(used)
1170  inst = queried(_enabled = False)
1171  except AttributeError:
1172  inst = queried()
self.__addPassiveUseOf(inst)

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

1174  def __addActiveUseOf(self, other):
1175  """
1176  Declare that we are going to modify the Configurable 'other' in our
1177  __apply_configuration__.
1178  """
1179  self.__used_instances__.append(other)
1180  if hasattr(other, "__users__"): # allow usage of plain Configurables
other.__users__.append(self)
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 1181 of file Configurable.py.

1182  def __addPassiveUseOf(self, other):
1183  """
1184  Declare that we are going to retrieve property values from the
1185  ConfigurableUser 'other' in our __apply_configuration__.
1186  """
1187  if not isinstance(other, ConfigurableUser):
1188  raise Error("'%s': Cannot make passive use of '%s', it is not a ConfigurableUser" % (self.name(), other.name()))
other.__addActiveUseOf(self)
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 1265 of file Configurable.py.

1266  def __apply_configuration__(self):
1267  """
1268  Function to be overridden to convert the high level configuration into a
1269  low level one.
1270  The default implementation calls applyConf, which is the method defined
1271  in some ConfigurableUser implementations.
1272  """
1273  return self.applyConf()
def GaudiKernel.Configurable.ConfigurableUser.__detach_used__ (   self)
Remove this ConfigurableUser instance from the users list of the used
instances.

Definition at line 1196 of file Configurable.py.

1197  def __detach_used__(self):
1198  """
1199  Remove this ConfigurableUser instance from the users list of the used
1200  instances.
1201  """
1202  for used in self.__used_instances__:
1203  if hasattr(used, "__users__"): # allow usage of plain Configurables
1204  used.__users__.remove(self)
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 1281 of file Configurable.py.

1282  def _instanceName(self, cls):
1283  """
1284  Function used to define the name of the private instance of a given class
1285  name.
1286  This method is used when the __used_configurables_property__ declares the
1287  need of a private used configurable without specifying the name.
1288  """
1289  if type(cls) is str:
1290  clName = cls
1291  else:
1292  clName = cls.__name__
1293  return "%s_%s" % (self.name(), clName)
def GaudiKernel.Configurable.ConfigurableUser.applyConf (   self)
Function to be overridden to convert the high level configuration into a
low level one.

Definition at line 1274 of file Configurable.py.

1275  def applyConf( self ):
1276  """
1277  Function to be overridden to convert the high level configuration into a
1278  low level one.
1279  """
1280  pass
def GaudiKernel.Configurable.ConfigurableUser.getDlls (   self)

Definition at line 1191 of file Configurable.py.

1192  def getDlls( self ):
return None
def GaudiKernel.Configurable.ConfigurableUser.getGaudiType (   self)

Definition at line 1189 of file Configurable.py.

1190  def getGaudiType( self ):
return 'User'
def GaudiKernel.Configurable.ConfigurableUser.getHandle (   self)

Definition at line 1193 of file Configurable.py.

1194  def getHandle( self ):
1195  return None
def GaudiKernel.Configurable.ConfigurableUser.getUsedInstance (   self,
  name 
)
Return the used instance with a given name.

Definition at line 1294 of file Configurable.py.

1295  def getUsedInstance(self, name):
1296  """
1297  Return the used instance with a given name.
1298  """
1299  for i in self.__used_instances__:
1300  if i.name() == name:
1301  if hasattr(i, "_enabled"):
1302  # ensure that the instances retrieved through the method are
1303  # enabled
1304  i._enabled = True
1305  return i
1306  raise KeyError(name)
1307 
# list of callables to be called after all the __apply_configuration__ are called.
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 1254 of file Configurable.py.

1255  def propagateProperties(self, names = None, others = None, force = True):
1256  """
1257  Call propagateProperty for each property listed in 'names'.
1258  If 'names' is None, all the properties are propagated.
1259  """
1260  if names is None:
1261  # use all the non-private slots
1262  names = [ p for p in self.__slots__ if not p.startswith("_") ]
1263  for n in names:
1264  self.propagateProperty(n, others, force)
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 1205 of file Configurable.py.

1206  def propagateProperty(self, name, others = None, force = True):
1207  """
1208  Propagate the property 'name' (if set) to other configurables (if possible).
1209  'others' can be:
1210  None:
1211  propagate to all the entries in __used_configurables__
1212  a configurable instance:
1213  propagate only to it
1214  list of configurable instances:
1215  propagate to all of them.
1216 
1217 
1218  The logic is:
1219  - if the local property is set, the other property will be overwritten
1220  - local property not set and other set => keep other
1221  - local property not set and other not set => overwrite the default for
1222  ConfigurableUser instances and set the property for Configurables
1223  """
1224  # transform 'others' to a list of configurable instances
1225  if others is None:
1226  others = self.__used_instances__
1227  elif type(others) not in [ list, tuple ] :
1228  others = [ others ]
1229  # these can be computed before the loop
1230  local_is_set = self.isPropertySet(name)
1231  value = self.getProp(name)
1232  # loop over the others that do have 'name' in their slots
1233  for other in [ o for o in others if name in o.__slots__ ]:
1234  # If self property is set, use it
1235  if local_is_set:
1236  if other.isPropertySet(name):
1237  log.warning("Property '%(prop)s' is set in both '%(self)s' and '%(other)s', using '%(self)s.%(prop)s'"%
1238  { "self": self.name(),
1239  "other": other.name(),
1240  "prop": name } )
1241  other.setProp(name, value)
1242  # If not, and other property also not set, propagate the default
1243  elif not other.isPropertySet(name):
1244  if isinstance(other,ConfigurableUser):
1245  otherType = type(other._properties[name].getDefault())
1246  other._properties[name].setDefault(value)
1247  if otherType in [list, dict]:
1248  # Special case for list and dictionaries:
1249  # also set the property to the same value of the default (copy)
1250  other.setProp(name, otherType(value))
1251  else:
1252  other.setProp(name, value)
1253  # If not set and other set, do nothing

Member Data Documentation

list GaudiKernel.Configurable.ConfigurableUser.__queried_configurables__ []
staticprivate

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

Definition at line 1127 of file Configurable.py.

dictionary GaudiKernel.Configurable.ConfigurableUser.__slots__
staticprivate
Initial value:
1 { "__users__": [],
2  "__used_instances__": [],
3  "_enabled": True }

Definition at line 1113 of file Configurable.py.

list GaudiKernel.Configurable.ConfigurableUser.__used_configurables__ []
staticprivate

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

GaudiKernel.Configurable.ConfigurableUser.__used_instances__
private

Definition at line 1141 of file Configurable.py.

GaudiKernel.Configurable.ConfigurableUser.__users__
private

Definition at line 1133 of file Configurable.py.

GaudiKernel.Configurable.ConfigurableUser._enabled
private

Definition at line 1132 of file Configurable.py.


The documentation for this class was generated from the following file:
Generated at Thu Jul 18 2013 12:18:15 for Gaudi Framework, version v23r9 by Doxygen version 1.8.2 written by Dimitri van Heesch, © 1997-2004