The Gaudi Framework  master (594c33fa)
GaudiKernel.PropertyProxy.PropertyProxy Class Reference
Inheritance diagram for GaudiKernel.PropertyProxy.PropertyProxy:
Collaboration diagram for GaudiKernel.PropertyProxy.PropertyProxy:

Public Member Functions

def __init__ (self, descr, docString=None, default=None)
 
def setDefault (self, value)
 
def getDefault (self)
 
def fullPropertyName (self, obj)
 
def __get__ (self, obj, type=None)
 
def __set__ (self, obj, value)
 
def __delete__ (self, obj)
 

Public Attributes

 history
 
 descr
 
 deprecated
 

Properties

 default = property(getDefault, setDefault)
 

Private Attributes

 __doc__
 
 __default
 

Detailed Description

Definition at line 80 of file PropertyProxy.py.

Constructor & Destructor Documentation

◆ __init__()

def GaudiKernel.PropertyProxy.PropertyProxy.__init__ (   self,
  descr,
  docString = None,
  default = None 
)

Reimplemented in GaudiKernel.PropertyProxy.DataHandlePropertyProxy, GaudiKernel.PropertyProxy.GaudiHandleArrayPropertyProxy, and GaudiKernel.PropertyProxy.GaudiHandlePropertyProxy.

Definition at line 81 of file PropertyProxy.py.

81  def __init__(self, descr, docString=None, default=None):
82  self.history = {}
83  self.descr = descr
84  self.deprecated = False
85  if docString:
86  self.__doc__ = docString
87  if "[[deprecated]]" in docString:
88  self.deprecated = True
89  if default is not None:
90  self.default = default
91 

Member Function Documentation

◆ __delete__()

def GaudiKernel.PropertyProxy.PropertyProxy.__delete__ (   self,
  obj 
)

Definition at line 178 of file PropertyProxy.py.

178  def __delete__(self, obj):
179  if obj in self.history:
180  del self.history[obj]
181  self.descr.__delete__(obj)
182 
183 

◆ __get__()

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

Reimplemented in GaudiKernel.PropertyProxy.DataHandlePropertyProxy, and GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.

Definition at line 103 of file PropertyProxy.py.

103  def __get__(self, obj, type=None):
104  try:
105  return self.descr.__get__(obj, type)
106  except AttributeError:
107  # special case for builtin collections
108  # allow default to work with on +=, [], etc.
109  if isinstance(self.__default, (list, dict, set)):
110  self.descr.__set__(obj, self.__default.__class__(self.__default))
111  return self.descr.__get__(obj, type)
112  else:
113  # for non lists (or dicts) return a reference to the default
114  # return self.__default
115  raise
116 

◆ __set__()

def GaudiKernel.PropertyProxy.PropertyProxy.__set__ (   self,
  obj,
  value 
)

Reimplemented in GaudiKernel.PropertyProxy.DataHandlePropertyProxy, and GaudiKernel.PropertyProxy.GaudiHandlePropertyProxyBase.

Definition at line 117 of file PropertyProxy.py.

117  def __set__(self, obj, value):
118  # check if deprecated
119  if self.deprecated and not obj._unpickling:
120  log.warning(
121  "Property %s is deprecated: %s",
122  self.fullPropertyName(obj),
123  self.__doc__,
124  )
125 
126  # check value/property compatibility if possible
127  proptype, allowcompat = None, False
128  if hasattr(self, "default"):
129  proptype = type(self.default)
130  if self.descr.__name__ == "OutputLevel": # old-style compat for Btag
131  allowcompat = True
132  elif obj in self.history:
133  proptype = type(self.history[obj][0])
134  allowcompat = True
135 
136  # check if type known; allow special initializer for typed instances
137  # Do not perform the check for PropertyReference, should be delayed until
138  # binding (if ever done)
139  if (
140  proptype
141  and not isinstance(None, proptype)
142  and not derives_from(value, "PropertyReference")
143  ):
144  try:
145  # check value itself
146  value = _isCompatible(proptype, value)
147 
148  # check element in case of list
149  if proptype == list:
150  try:
151  oldvec = self.descr.__get__(obj, type)
152  if oldvec:
153  tpo = type(oldvec[0])
154  for v in value:
155  _isCompatible(tpo, v)
156  except AttributeError:
157  # value not yet set
158  pass
159  except ValueError as e:
160  if allowcompat:
161  log.error(
162  "inconsistent value types for %s.%s (%s)"
163  % (obj.getName(), self.descr.__name__, str(e))
164  )
165  else:
166  raise
167 
168  # allow a property to be set if we're in non-default mode, or if it
169  # simply hasn't been set before
170  if not obj._isInSetDefaults() or obj not in self.history:
171  # by convention, 'None' for default is used to designate objects setting
172  if hasattr(self, "default") and self.default is None:
173  obj.__iadd__(value, self.descr) # to establish hierarchy
174  else:
175  self.descr.__set__(obj, value)
176  self.history.setdefault(obj, []).append(value)
177 

◆ fullPropertyName()

def GaudiKernel.PropertyProxy.PropertyProxy.fullPropertyName (   self,
  obj 
)

Definition at line 100 of file PropertyProxy.py.

100  def fullPropertyName(self, obj):
101  return (obj.getJobOptName() or obj.getName()) + "." + self.descr.__name__
102 

◆ getDefault()

def GaudiKernel.PropertyProxy.PropertyProxy.getDefault (   self)

Definition at line 95 of file PropertyProxy.py.

95  def getDefault(self):
96  return self.__default
97 

◆ setDefault()

def GaudiKernel.PropertyProxy.PropertyProxy.setDefault (   self,
  value 
)

Definition at line 92 of file PropertyProxy.py.

92  def setDefault(self, value):
93  self.__default = value
94 

Member Data Documentation

◆ __default

GaudiKernel.PropertyProxy.PropertyProxy.__default
private

Definition at line 93 of file PropertyProxy.py.

◆ __doc__

GaudiKernel.PropertyProxy.PropertyProxy.__doc__
private

Definition at line 86 of file PropertyProxy.py.

◆ deprecated

GaudiKernel.PropertyProxy.PropertyProxy.deprecated

Definition at line 84 of file PropertyProxy.py.

◆ descr

GaudiKernel.PropertyProxy.PropertyProxy.descr

Definition at line 83 of file PropertyProxy.py.

◆ history

GaudiKernel.PropertyProxy.PropertyProxy.history

Definition at line 82 of file PropertyProxy.py.

Property Documentation

◆ default

GaudiKernel.PropertyProxy.PropertyProxy.default = property(getDefault, setDefault)
static

Definition at line 98 of file PropertyProxy.py.


The documentation for this class was generated from the following file:
GaudiKernel.PropertyProxy._isCompatible
def _isCompatible(tp, value)
Definition: PropertyProxy.py:43
GaudiKernel.PropertyProxy.derives_from
def derives_from(derived, base)
Definition: PropertyProxy.py:28
gaudirun.type
type
Definition: gaudirun.py:160