LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
LSST Data Management Base Package
Public Member Functions | Properties | List of all members
lsst.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 39 of file configurableField.py.

Constructor & Destructor Documentation

◆ __init__()

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

Definition at line 72 of file configurableField.py.

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

Member Function Documentation

◆ __delattr__()

def lsst.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 161 of file configurableField.py.

161  def __delattr__(self, name, at=None, label="delete"):
162  """
163  Pretend to be an isntance of ConfigClass.
164  Attributes defiend by ConfigurableInstance will shadow those defined
165  in ConfigClass
166  """
167  if self._config._frozen:
168  raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
169 
170  try:
171  # attribute exists in the ConfigurableInstance wrapper
172  object.__delattr__(self, name)
173  except AttributeError:
174  if at is None:
175  at = getCallStack()
176  self._value.__delattr__(name, at=at, label=label)
177 
178 

◆ __getattr__()

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

Definition at line 141 of file configurableField.py.

141  def __getattr__(self, name):
142  return getattr(self._value, name)
143 

◆ __setattr__()

def lsst.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 144 of file configurableField.py.

144  def __setattr__(self, name, value, at=None, label="assignment"):
145  """Pretend to be an instance of ConfigClass.
146 
147  Attributes defined by ConfigurableInstance will shadow those defined
148  in ConfigClass
149  """
150  if self._config._frozen:
151  raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
152 
153  if name in self.__dict__:
154  # attribute exists in the ConfigurableInstance wrapper
155  object.__setattr__(self, name, value)
156  else:
157  if at is None:
158  at = getCallStack()
159  self._value.__setattr__(name, value, at=at, label=label)
160 

◆ apply()

def lsst.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 108 of file configurableField.py.

108  def apply(self, *args, **kw):
109  """Call the configurable.
110 
111  Notes
112  -----
113  In addition to the user-provided positional and keyword arguments,
114  the configurable is also provided a keyword argument ``config`` with
115  the value of `ConfigurableInstance.value`.
116  """
117  return self.target(*args, config=self.value, **kw)
118 

◆ retarget()

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

Definition at line 119 of file configurableField.py.

119  def retarget(self, target, ConfigClass=None, at=None, label="retarget"):
120  """Target a new configurable and ConfigClass
121  """
122  if self._config._frozen:
123  raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
124 
125  try:
126  ConfigClass = self._field.validateTarget(target, ConfigClass)
127  except BaseException as e:
128  raise FieldValidationError(self._field, self._config, e.message)
129 
130  if at is None:
131  at = getCallStack()
132  object.__setattr__(self, "_target", target)
133  if ConfigClass != self.ConfigClass:
134  object.__setattr__(self, "_ConfigClass", ConfigClass)
135  self.__initValue(at, label)
136 
137  history = self._config._history.setdefault(self._field.name, [])
138  msg = "retarget(target=%s, ConfigClass=%s)" % (_typeStr(target), _typeStr(ConfigClass))
139  history.append((msg, at, label))
140 

Property Documentation

◆ ConfigClass

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

Definition at line 99 of file configurableField.py.

◆ target

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

Definition at line 95 of file configurableField.py.

◆ value

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

Definition at line 103 of file configurableField.py.


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