GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase Class Reference
Inheritance diagram for GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase:
Collaboration diagram for GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase:

Public Member Functions

def __init__ (self, descr, docString, default, handleType, allowedType)
 
def __get__
 
def __set__ (self, obj, value)
 
def isHandle (self, value)
 
def isConfig (self, value)
 
def getDefaultConfigurable (self, typeAndName, requester)
 
def convertDefaultToBeSet (self, obj, default)
 
def convertValueToBeSet (self, obj, value)
 
def __init__ (self, descr, docString, default, handleType, allowedType)
 
def __get__
 
def __set__ (self, obj, value)
 
def isHandle (self, value)
 
def isConfig (self, value)
 
def getDefaultConfigurable (self, typeAndName, requester)
 
def convertDefaultToBeSet (self, obj, default)
 
def convertValueToBeSet (self, obj, value)
 
- Public Member Functions inherited from GaudiKernel.PropertyProxy.PropertyProxy
def __init__
 
def setDefault (self, value)
 
def getDefault (self)
 
def fullPropertyName (self, obj)
 
def __get__
 
def __set__ (self, obj, value)
 
def __delete__ (self, obj)
 
def __init__
 
def setDefault (self, value)
 
def getDefault (self)
 
def fullPropertyName (self, obj)
 
def __get__
 
def __set__ (self, obj, value)
 
def __delete__ (self, obj)
 

Private Attributes

 _handleType
 
 _confTypeName
 

Additional Inherited Members

- Public Attributes inherited from GaudiKernel.PropertyProxy.PropertyProxy
 history
 
 descr
 
- Properties inherited from GaudiKernel.PropertyProxy.PropertyProxy
 default = property( getDefault, setDefault )
 

Detailed Description

A class with some utilities for GaudiHandles and GaudiHandleArrays

Definition at line 151 of file PropertyProxy.py.

Constructor & Destructor Documentation

def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.__init__ (   self,
  descr,
  docString,
  default,
  handleType,
  allowedType 
)
<descr>: the real property in the object instance (from __slots__)
<docString>: the documentation string of this property
<default>: default value from C++ (via python generated by genconf)
<handleType>: real python handle type (e.g. PublicToolHandle, PrivateToolHandle, ...)
<allowedType>: allowed instance type for default

Definition at line 154 of file PropertyProxy.py.

154  def __init__(self, descr, docString, default, handleType, allowedType ):
155  """<descr>: the real property in the object instance (from __slots__)
156  <docString>: the documentation string of this property
157  <default>: default value from C++ (via python generated by genconf)
158  <handleType>: real python handle type (e.g. PublicToolHandle, PrivateToolHandle, ...)
159  <allowedType>: allowed instance type for default
160  """
161  # check that default is of allowed type for this proxy
162  if not isinstance(default,allowedType):
163  raise TypeError( "%s: %s default: %r is not a %s" % \
164  ( descr.__name__, self.__class__.__name__, default, allowedType.__name__ ) )
165  PropertyProxy.__init__( self, descr, docString, default )
166  self._handleType = handleType
167  self._confTypeName = 'Configurable' + handleType.componentType
168 # print "%s: %r (%s)" % (self.__class__.__name__,self._handleType,self._confTypeName)
169 
170 
def __init__(self, descr, docString, default, handleType, allowedType)
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.__init__ (   self,
  descr,
  docString,
  default,
  handleType,
  allowedType 
)
<descr>: the real property in the object instance (from __slots__)
<docString>: the documentation string of this property
<default>: default value from C++ (via python generated by genconf)
<handleType>: real python handle type (e.g. PublicToolHandle, PrivateToolHandle, ...)
<allowedType>: allowed instance type for default

Definition at line 154 of file PropertyProxy.py.

154  def __init__(self, descr, docString, default, handleType, allowedType ):
155  """<descr>: the real property in the object instance (from __slots__)
156  <docString>: the documentation string of this property
157  <default>: default value from C++ (via python generated by genconf)
158  <handleType>: real python handle type (e.g. PublicToolHandle, PrivateToolHandle, ...)
159  <allowedType>: allowed instance type for default
160  """
161  # check that default is of allowed type for this proxy
162  if not isinstance(default,allowedType):
163  raise TypeError( "%s: %s default: %r is not a %s" % \
164  ( descr.__name__, self.__class__.__name__, default, allowedType.__name__ ) )
165  PropertyProxy.__init__( self, descr, docString, default )
166  self._handleType = handleType
167  self._confTypeName = 'Configurable' + handleType.componentType
168 # print "%s: %r (%s)" % (self.__class__.__name__,self._handleType,self._confTypeName)
169 
170 
def __init__(self, descr, docString, default, handleType, allowedType)

Member Function Documentation

def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.__get__ (   self,
  obj,
  type = None 
)

Definition at line 171 of file PropertyProxy.py.

171  def __get__( self, obj, type = None ):
172  try:
173  return self.descr.__get__( obj, type )
174  except AttributeError:
175  # Get default
176  try:
177  default = obj.__class__.getDefaultProperty( self.descr.__name__ )
178  default = self.convertDefaultToBeSet( obj, default )
179  if default:
180  self.__set__( obj, default )
181  except AttributeError,e:
182  # change type of exception to avoid false error message
183  raise RuntimeError(*e.args)
184 
185  return self.descr.__get__( obj, type )
186 
187 
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.__get__ (   self,
  obj,
  type = None 
)

Definition at line 171 of file PropertyProxy.py.

171  def __get__( self, obj, type = None ):
172  try:
173  return self.descr.__get__( obj, type )
174  except AttributeError:
175  # Get default
176  try:
177  default = obj.__class__.getDefaultProperty( self.descr.__name__ )
178  default = self.convertDefaultToBeSet( obj, default )
179  if default:
180  self.__set__( obj, default )
181  except AttributeError,e:
182  # change type of exception to avoid false error message
183  raise RuntimeError(*e.args)
184 
185  return self.descr.__get__( obj, type )
186 
187 
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.__set__ (   self,
  obj,
  value 
)

Definition at line 188 of file PropertyProxy.py.

188  def __set__( self, obj, value ):
189  # allow a property to be set if we're in non-default mode, or if it
190  # simply hasn't been set before
191  if not obj._isInSetDefaults() or not obj in self.history:
192  value = self.convertValueToBeSet( obj, value )
193  # assign the value
194  self.descr.__set__( obj, value )
195  log.debug( "Setting %s = %r", self.fullPropertyName( obj ), value )
196  self.history.setdefault( obj, [] ).append( value )
197 
198 
199 
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.__set__ (   self,
  obj,
  value 
)

Definition at line 188 of file PropertyProxy.py.

188  def __set__( self, obj, value ):
189  # allow a property to be set if we're in non-default mode, or if it
190  # simply hasn't been set before
191  if not obj._isInSetDefaults() or not obj in self.history:
192  value = self.convertValueToBeSet( obj, value )
193  # assign the value
194  self.descr.__set__( obj, value )
195  log.debug( "Setting %s = %r", self.fullPropertyName( obj ), value )
196  self.history.setdefault( obj, [] ).append( value )
197 
198 
199 
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.convertDefaultToBeSet (   self,
  obj,
  default 
)

Definition at line 231 of file PropertyProxy.py.

231  def convertDefaultToBeSet( self, obj, default ):
232  # turn string into handle
233  isString = type(default) == str
234  if not isString and self.isConfig(default):
235 # print self.fullPropertyName(obj) + ": Setting default configurable: %r" % default
236  return default
237  elif isString or self.isHandle(default):
238  if isString:
239  # convert string into handle
240  typeAndName = default
241  default = self._handleType( typeAndName )
242  else:
243  typeAndName = default.typeAndName
244  if not self._handleType.isPublic:
245  if not typeAndName:
246  return None
247  # Find corresponding default configurable of private handles
248  try:
249  conf = self.getDefaultConfigurable(typeAndName, self.fullPropertyName(obj))
250 # print self.fullPropertyName(obj) + ": Setting default private configurable (from default handle): %r" % conf
251  except AttributeError,e:
252  # change type of exception to avoid false error message
253  raise RuntimeError(*e.args)
254  if conf is None:
255  raise RuntimeError( "%s: Default configurable for class %s not found in ConfigurableDb.CfgDb" % \
256  (self.fullPropertyName(obj),default.getType() ) )
257  return conf
258  else: # not a config, not a handle, not a string
259  raise TypeError( "%s: default value %r is not of type %s or %s" % \
260  (self.fullPropertyName(obj),default,self._confTypeName,self._handleType.__name__) )
261 
262  return default
263 
def getDefaultConfigurable(self, typeAndName, requester)
string type
Definition: gaudirun.py:151
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.convertDefaultToBeSet (   self,
  obj,
  default 
)

Definition at line 231 of file PropertyProxy.py.

231  def convertDefaultToBeSet( self, obj, default ):
232  # turn string into handle
233  isString = type(default) == str
234  if not isString and self.isConfig(default):
235 # print self.fullPropertyName(obj) + ": Setting default configurable: %r" % default
236  return default
237  elif isString or self.isHandle(default):
238  if isString:
239  # convert string into handle
240  typeAndName = default
241  default = self._handleType( typeAndName )
242  else:
243  typeAndName = default.typeAndName
244  if not self._handleType.isPublic:
245  if not typeAndName:
246  return None
247  # Find corresponding default configurable of private handles
248  try:
249  conf = self.getDefaultConfigurable(typeAndName, self.fullPropertyName(obj))
250 # print self.fullPropertyName(obj) + ": Setting default private configurable (from default handle): %r" % conf
251  except AttributeError,e:
252  # change type of exception to avoid false error message
253  raise RuntimeError(*e.args)
254  if conf is None:
255  raise RuntimeError( "%s: Default configurable for class %s not found in ConfigurableDb.CfgDb" % \
256  (self.fullPropertyName(obj),default.getType() ) )
257  return conf
258  else: # not a config, not a handle, not a string
259  raise TypeError( "%s: default value %r is not of type %s or %s" % \
260  (self.fullPropertyName(obj),default,self._confTypeName,self._handleType.__name__) )
261 
262  return default
263 
def getDefaultConfigurable(self, typeAndName, requester)
string type
Definition: gaudirun.py:151
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.convertValueToBeSet (   self,
  obj,
  value 
)

Definition at line 264 of file PropertyProxy.py.

264  def convertValueToBeSet( self, obj, value ):
265  if value is None: value = ''
266  isString = type(value) == str
267  if isString:
268  # create an new handle
269  return self._handleType(value)
270  elif self.isHandle(value):
271  # make a copy of the handle
272  return self._handleType(value.toStringProperty())
273  elif self.isConfig(value):
274  if self._handleType.isPublic:
275  # A public tool must be registered to ToolSvc before assigning it
276  if derives_from(value,'ConfigurableAlgTool'):
277  if not value.isInToolSvc():
278  suggestion = 'You may need to add jobOptions lines something like:' + os.linesep + \
279  'from AthenaCommon.AppMgr import ToolSvc' + os.linesep + \
280  'ToolSvc += '
281  if value.getName() == value.getType(): # using default name
282  suggestion += '%s()' % value.__class__.__name__
283  else: # using user-defined name
284  suggestion += '%s(%r)' % (value.__class__.__name__,value.getName())
285  raise RuntimeError( self.fullPropertyName(obj) +
286  ': Public tool %s is not yet in ToolSvc. %s' %
287  (value.getJobOptName(),suggestion) )
288  # make it read-only
289  return self._handleType(value.toStringProperty())
290  elif value.hasParent( obj.getJobOptName() ):
291  # is already a child, keep as-is
292  return value
293  else:
294  # make a copy of the configurable
295  value = obj.copyChildAndSetParent( value, obj.getJobOptName() )
296  # ensure that the new object is in allConfigurables
297  obj.allConfigurables[value.name()] = value
298  return value
299  else:
300  raise TypeError( "Property %s value %r is not a %s nor a %s nor a string" % \
301  (self.fullPropertyName(obj),value,self._confTypeName,self._handleType.__name__) )
302 
303  return value
304 
305 
def derives_from(derived, base)
string type
Definition: gaudirun.py:151
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.convertValueToBeSet (   self,
  obj,
  value 
)

Definition at line 264 of file PropertyProxy.py.

264  def convertValueToBeSet( self, obj, value ):
265  if value is None: value = ''
266  isString = type(value) == str
267  if isString:
268  # create an new handle
269  return self._handleType(value)
270  elif self.isHandle(value):
271  # make a copy of the handle
272  return self._handleType(value.toStringProperty())
273  elif self.isConfig(value):
274  if self._handleType.isPublic:
275  # A public tool must be registered to ToolSvc before assigning it
276  if derives_from(value,'ConfigurableAlgTool'):
277  if not value.isInToolSvc():
278  suggestion = 'You may need to add jobOptions lines something like:' + os.linesep + \
279  'from AthenaCommon.AppMgr import ToolSvc' + os.linesep + \
280  'ToolSvc += '
281  if value.getName() == value.getType(): # using default name
282  suggestion += '%s()' % value.__class__.__name__
283  else: # using user-defined name
284  suggestion += '%s(%r)' % (value.__class__.__name__,value.getName())
285  raise RuntimeError( self.fullPropertyName(obj) +
286  ': Public tool %s is not yet in ToolSvc. %s' %
287  (value.getJobOptName(),suggestion) )
288  # make it read-only
289  return self._handleType(value.toStringProperty())
290  elif value.hasParent( obj.getJobOptName() ):
291  # is already a child, keep as-is
292  return value
293  else:
294  # make a copy of the configurable
295  value = obj.copyChildAndSetParent( value, obj.getJobOptName() )
296  # ensure that the new object is in allConfigurables
297  obj.allConfigurables[value.name()] = value
298  return value
299  else:
300  raise TypeError( "Property %s value %r is not a %s nor a %s nor a string" % \
301  (self.fullPropertyName(obj),value,self._confTypeName,self._handleType.__name__) )
302 
303  return value
304 
305 
def derives_from(derived, base)
string type
Definition: gaudirun.py:151
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.getDefaultConfigurable (   self,
  typeAndName,
  requester 
)
Return the configurable instance corresponding to the toolhandle if possible.
Otherwise return None

Definition at line 210 of file PropertyProxy.py.

210  def getDefaultConfigurable(self,typeAndName,requester):
211  """Return the configurable instance corresponding to the toolhandle if possible.
212  Otherwise return None"""
213  global log
214  # find the module
215  typeAndNameTuple = typeAndName.split('/')
216  confType = typeAndNameTuple[0]
217  confClass=ConfigurableDb.getConfigurable(confType)
218  # check the type of the configurable
219  if not derives_from(confClass,self._confTypeName):
220  log.error( "%s: Configurable %s is not a %s",
221  requester, confType, self._confTypeName )
222  return None
223  try:
224  confName = typeAndNameTuple[1]
225  except IndexError:
226  return confClass() # use default name
227  else:
228  return confClass(confName)
229 
230 
def getDefaultConfigurable(self, typeAndName, requester)
def derives_from(derived, base)
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.getDefaultConfigurable (   self,
  typeAndName,
  requester 
)
Return the configurable instance corresponding to the toolhandle if possible.
Otherwise return None

Definition at line 210 of file PropertyProxy.py.

210  def getDefaultConfigurable(self,typeAndName,requester):
211  """Return the configurable instance corresponding to the toolhandle if possible.
212  Otherwise return None"""
213  global log
214  # find the module
215  typeAndNameTuple = typeAndName.split('/')
216  confType = typeAndNameTuple[0]
217  confClass=ConfigurableDb.getConfigurable(confType)
218  # check the type of the configurable
219  if not derives_from(confClass,self._confTypeName):
220  log.error( "%s: Configurable %s is not a %s",
221  requester, confType, self._confTypeName )
222  return None
223  try:
224  confName = typeAndNameTuple[1]
225  except IndexError:
226  return confClass() # use default name
227  else:
228  return confClass(confName)
229 
230 
def getDefaultConfigurable(self, typeAndName, requester)
def derives_from(derived, base)
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.isConfig (   self,
  value 
)
Check if <value> is a configurable of the correct type

Definition at line 205 of file PropertyProxy.py.

205  def isConfig(self,value):
206  """Check if <value> is a configurable of the correct type"""
207  return derives_from(value,self._confTypeName)
208 
209 
def derives_from(derived, base)
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.isConfig (   self,
  value 
)
Check if <value> is a configurable of the correct type

Definition at line 205 of file PropertyProxy.py.

205  def isConfig(self,value):
206  """Check if <value> is a configurable of the correct type"""
207  return derives_from(value,self._confTypeName)
208 
209 
def derives_from(derived, base)
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.isHandle (   self,
  value 
)
Check if <value> is a handle of the correct type

Definition at line 200 of file PropertyProxy.py.

200  def isHandle(self,value):
201  """Check if <value> is a handle of the correct type"""
202  return isinstance(value,self._handleType)
203 
204 
def GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.isHandle (   self,
  value 
)
Check if <value> is a handle of the correct type

Definition at line 200 of file PropertyProxy.py.

200  def isHandle(self,value):
201  """Check if <value> is a handle of the correct type"""
202  return isinstance(value,self._handleType)
203 
204 

Member Data Documentation

GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase._confTypeName
private

Definition at line 167 of file PropertyProxy.py.

GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase._handleType
private

Definition at line 166 of file PropertyProxy.py.


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