LSSTApplications  19.0.0-14-gb0260a2+2d714fc2ef,20.0.0+34a42eae2c,20.0.0+76f397ef0c,20.0.0+8558dd3f48,20.0.0+a6b6977b51,20.0.0+b2ea66fa67,20.0.0+cc669a8b45,20.0.0+d561663fb5,20.0.0+d778e99126,20.0.0+efe67588cf,20.0.0+f45b7d88f4,20.0.0+f7c597f720,20.0.0+fb43bee9b9,20.0.0+fb4d547e0d,20.0.0-1-g10df615+d8b88ec1b5,20.0.0-1-g253301a+a6b6977b51,20.0.0-1-g498fb60+ff88705a28,20.0.0-1-g4d801e7+ce0d01dabd,20.0.0-1-g5b95a8c+24eaf908b3,20.0.0-1-g8a53f90+2817c06967,20.0.0-1-gc96f8cb+fb4d547e0d,20.0.0-1-gd1c87d7+2817c06967,20.0.0-1-gdb27ee5+abab67204f,20.0.0-13-ge998c5c+9f8c516ffa,20.0.0-18-g08fba245+88079d2923,20.0.0-2-gec03fae+fb98bf9d97,20.0.0-3-gdd5c15c+a61313b210,20.0.0-34-gdb4d86a+b43b2c05ff,20.0.0-4-g4a2362f+f45b7d88f4,20.0.0-4-gfea843c+f45b7d88f4,20.0.0-5-gac0d578b1+a8c4e2ada3,20.0.0-5-gfcebe35+cfceff6a24,20.0.0-6-g01203fff+e332440eaf,20.0.0-8-gea2affd+48c001ce3c,20.0.0-9-gabd0d4c+abab67204f,20.0.0-9-gf3ab18e+fb4d547e0d,w.2020.33
LSSTDataManagementBasePackage
Public Member Functions | Properties | List of all members
pex.config.configurableField.ConfigurableInstance Class Reference

Public Member Functions

def __init__ (self, config, field, at=None, label="default")
 
def apply (self, *args, **kw)
 
def retarget (self, target, ConfigClass=None, at=None, label="retarget")
 
def __getattr__ (self, name)
 
def __setattr__ (self, name, value, at=None, label="assignment")
 
def __delattr__ (self, name, at=None, label="delete")
 

Properties

 target = property(lambda x: x._target)
 
 ConfigClass = property(lambda x: x._ConfigClass)
 
 value = property(lambda x: x._value)
 

Detailed Description

A retargetable configuration in a `ConfigurableField` that proxies
a `~lsst.pex.config.Config`.

Notes
-----
``ConfigurableInstance`` implements ``__getattr__`` and ``__setattr__``
methods that forward to the `~lsst.pex.config.Config` it holds.
``ConfigurableInstance`` adds a `retarget` method.

The actual `~lsst.pex.config.Config` instance is accessed using the
``value`` property (e.g. to get its documentation).  The associated
configurable object (usually a `~lsst.pipe.base.Task`) is accessed
using the ``target`` property.

Definition at line 37 of file configurableField.py.

Constructor & Destructor Documentation

◆ __init__()

def pex.config.configurableField.ConfigurableInstance.__init__ (   self,
  config,
  field,
  at = None,
  label = "default" 
)

Definition at line 70 of file configurableField.py.

70  def __init__(self, config, field, at=None, label="default"):
71  object.__setattr__(self, "_config", config)
72  object.__setattr__(self, "_field", field)
73  object.__setattr__(self, "__doc__", config)
74  object.__setattr__(self, "_target", field.target)
75  object.__setattr__(self, "_ConfigClass", field.ConfigClass)
76  object.__setattr__(self, "_value", None)
77 
78  if at is None:
79  at = getCallStack()
80  at += [self._field.source]
81  self.__initValue(at, label)
82 
83  history = config._history.setdefault(field.name, [])
84  history.append(("Targeted and initialized from defaults", at, label))
85 

Member Function Documentation

◆ __delattr__()

def pex.config.configurableField.ConfigurableInstance.__delattr__ (   self,
  name,
  at = None,
  label = "delete" 
)
Pretend to be an isntance of  ConfigClass.
Attributes defiend by ConfigurableInstance will shadow those defined
in ConfigClass

Definition at line 152 of file configurableField.py.

152  def __delattr__(self, name, at=None, label="delete"):
153  """
154  Pretend to be an isntance of ConfigClass.
155  Attributes defiend by ConfigurableInstance will shadow those defined
156  in ConfigClass
157  """
158  if self._config._frozen:
159  raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
160 
161  try:
162  # attribute exists in the ConfigurableInstance wrapper
163  object.__delattr__(self, name)
164  except AttributeError:
165  if at is None:
166  at = getCallStack()
167  self._value.__delattr__(name, at=at, label=label)
168 
169 

◆ __getattr__()

def pex.config.configurableField.ConfigurableInstance.__getattr__ (   self,
  name 
)

Definition at line 132 of file configurableField.py.

132  def __getattr__(self, name):
133  return getattr(self._value, name)
134 

◆ __setattr__()

def pex.config.configurableField.ConfigurableInstance.__setattr__ (   self,
  name,
  value,
  at = None,
  label = "assignment" 
)
Pretend to be an instance of ConfigClass.

Attributes defined by ConfigurableInstance will shadow those defined
in ConfigClass

Definition at line 135 of file configurableField.py.

135  def __setattr__(self, name, value, at=None, label="assignment"):
136  """Pretend to be an instance of ConfigClass.
137 
138  Attributes defined by ConfigurableInstance will shadow those defined
139  in ConfigClass
140  """
141  if self._config._frozen:
142  raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
143 
144  if name in self.__dict__:
145  # attribute exists in the ConfigurableInstance wrapper
146  object.__setattr__(self, name, value)
147  else:
148  if at is None:
149  at = getCallStack()
150  self._value.__setattr__(name, value, at=at, label=label)
151 

◆ apply()

def pex.config.configurableField.ConfigurableInstance.apply (   self,
args,
**  kw 
)
Call the configurable.

Notes
-----
In addition to the user-provided positional and keyword arguments,
the configurable is also provided a keyword argument ``config`` with
the value of `ConfigurableInstance.value`.

Definition at line 99 of file configurableField.py.

99  def apply(self, *args, **kw):
100  """Call the configurable.
101 
102  Notes
103  -----
104  In addition to the user-provided positional and keyword arguments,
105  the configurable is also provided a keyword argument ``config`` with
106  the value of `ConfigurableInstance.value`.
107  """
108  return self.target(*args, config=self.value, **kw)
109 

◆ retarget()

def pex.config.configurableField.ConfigurableInstance.retarget (   self,
  target,
  ConfigClass = None,
  at = None,
  label = "retarget" 
)
Target a new configurable and ConfigClass

Definition at line 110 of file configurableField.py.

110  def retarget(self, target, ConfigClass=None, at=None, label="retarget"):
111  """Target a new configurable and ConfigClass
112  """
113  if self._config._frozen:
114  raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
115 
116  try:
117  ConfigClass = self._field.validateTarget(target, ConfigClass)
118  except BaseException as e:
119  raise FieldValidationError(self._field, self._config, e.message)
120 
121  if at is None:
122  at = getCallStack()
123  object.__setattr__(self, "_target", target)
124  if ConfigClass != self.ConfigClass:
125  object.__setattr__(self, "_ConfigClass", ConfigClass)
126  self.__initValue(at, label)
127 
128  history = self._config._history.setdefault(self._field.name, [])
129  msg = "retarget(target=%s, ConfigClass=%s)" % (_typeStr(target), _typeStr(ConfigClass))
130  history.append((msg, at, label))
131 

Property Documentation

◆ ConfigClass

pex.config.configurableField.ConfigurableInstance.ConfigClass = property(lambda x: x._ConfigClass)
static

Definition at line 90 of file configurableField.py.

◆ target

pex.config.configurableField.ConfigurableInstance.target = property(lambda x: x._target)
static

Definition at line 86 of file configurableField.py.

◆ value

pex.config.configurableField.ConfigurableInstance.value = property(lambda x: x._value)
static

Definition at line 94 of file configurableField.py.


The documentation for this class was generated from the following file:
pex.config.callStack.getCallStack
def getCallStack(skip=0)
Definition: callStack.py:175