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 | Public Attributes | Static Public Attributes | List of all members
pex.config.configDictField.ConfigDictField Class Reference
Inheritance diagram for pex.config.configDictField.ConfigDictField:
pex.config.dictField.DictField pex.config.config.Field

Public Member Functions

def __init__ (self, doc, keytype, itemtype, default=None, optional=False, dictCheck=None, itemCheck=None, deprecated=None)
 
def rename (self, instance)
 
def validate (self, instance)
 
def toDict (self, instance)
 
def save (self, outfile, instance)
 
def freeze (self, instance)
 
def __set__ (self, instance, value, at=None, label="assignment")
 
def __get__ (self, instance, owner=None, at=None, label="default")
 
def __delete__ (self, instance, at=None, label='deletion')
 

Public Attributes

 keytype
 
 itemtype
 
 dictCheck
 
 itemCheck
 
 dtype
 
 doc
 
 deprecated
 
 default
 
 check
 
 optional
 
 source
 

Static Public Attributes

 DictClass = ConfigDict
 
 supportedTypes = set((str, bool, float, int, complex))
 

Detailed Description

A configuration field (`~lsst.pex.config.Field` subclass) that is a
mapping of keys to `~lsst.pex.config.Config` instances.

``ConfigDictField`` behaves like `DictField` except that the
``itemtype`` must be a `~lsst.pex.config.Config` subclass.

Parameters
----------
doc : `str`
    A description of the configuration field.
keytype : {`int`, `float`, `complex`, `bool`, `str`}
    The type of the mapping keys. All keys must have this type.
itemtype : `lsst.pex.config.Config`-type
    The type of the values in the mapping. This must be
    `~lsst.pex.config.Config` or a subclass.
default : optional
    Unknown.
default : ``itemtype``-dtype, optional
    Default value of this field.
optional : `bool`, optional
    If `True`, this configuration `~lsst.pex.config.Field` is *optional*.
    Default is `True`.
deprecated : None or `str`, optional
    A description of why this Field is deprecated, including removal date.
    If not None, the string is appended to the docstring for this Field.

Raises
------
ValueError
    Raised if the inputs are invalid:

    - ``keytype`` or ``itemtype`` arguments are not supported types
      (members of `ConfigDictField.supportedTypes`.
    - ``dictCheck`` or ``itemCheck`` is not a callable function.

See also
--------
ChoiceField
ConfigChoiceField
ConfigField
ConfigurableField
DictField
Field
ListField
RangeField
RegistryField

Notes
-----
You can use ``ConfigDictField`` to create name-to-config mappings. One use
case is for configuring mappings for dataset types in a Butler. In this
case, the dataset type names are arbitrary and user-selected while the
mapping configurations are known and fixed.

Definition at line 92 of file configDictField.py.

Constructor & Destructor Documentation

◆ __init__()

def pex.config.configDictField.ConfigDictField.__init__ (   self,
  doc,
  keytype,
  itemtype,
  default = None,
  optional = False,
  dictCheck = None,
  itemCheck = None,
  deprecated = None 
)

Reimplemented from pex.config.dictField.DictField.

Definition at line 150 of file configDictField.py.

150  def __init__(self, doc, keytype, itemtype, default=None, optional=False, dictCheck=None, itemCheck=None,
151  deprecated=None):
152  source = getStackFrame()
153  self._setup(doc=doc, dtype=ConfigDict, default=default, check=None,
154  optional=optional, source=source, deprecated=deprecated)
155  if keytype not in self.supportedTypes:
156  raise ValueError("'keytype' %s is not a supported type" %
157  _typeStr(keytype))
158  elif not issubclass(itemtype, Config):
159  raise ValueError("'itemtype' %s is not a supported type" %
160  _typeStr(itemtype))
161  if dictCheck is not None and not hasattr(dictCheck, "__call__"):
162  raise ValueError("'dictCheck' must be callable")
163  if itemCheck is not None and not hasattr(itemCheck, "__call__"):
164  raise ValueError("'itemCheck' must be callable")
165 
166  self.keytype = keytype
167  self.itemtype = itemtype
168  self.dictCheck = dictCheck
169  self.itemCheck = itemCheck
170 

Member Function Documentation

◆ __delete__()

def pex.config.config.Field.__delete__ (   self,
  instance,
  at = None,
  label = 'deletion' 
)
inherited
Delete an attribute from a `lsst.pex.config.Config` instance.

Parameters
----------
instance : `lsst.pex.config.Config`
    The config instance that contains this field.
at : `list` of `lsst.pex.config.callStack.StackFrame`
    The call stack (created by
    `lsst.pex.config.callStack.getCallStack`).
label : `str`, optional
    Event label for the history.

Notes
-----
This is invoked by the owning `~lsst.pex.config.Config` object and
should not be called directly.

Definition at line 573 of file config.py.

573  def __delete__(self, instance, at=None, label='deletion'):
574  """Delete an attribute from a `lsst.pex.config.Config` instance.
575 
576  Parameters
577  ----------
578  instance : `lsst.pex.config.Config`
579  The config instance that contains this field.
580  at : `list` of `lsst.pex.config.callStack.StackFrame`
581  The call stack (created by
582  `lsst.pex.config.callStack.getCallStack`).
583  label : `str`, optional
584  Event label for the history.
585 
586  Notes
587  -----
588  This is invoked by the owning `~lsst.pex.config.Config` object and
589  should not be called directly.
590  """
591  if at is None:
592  at = getCallStack()
593  self.__set__(instance, None, at=at, label=label)
594 

◆ __get__()

def pex.config.config.Field.__get__ (   self,
  instance,
  owner = None,
  at = None,
  label = "default" 
)
inherited
Define how attribute access should occur on the Config instance
This is invoked by the owning config object and should not be called
directly

When the field attribute is accessed on a Config class object, it
returns the field object itself in order to allow inspection of
Config classes.

When the field attribute is access on a config instance, the actual
value described by the field (and held by the Config instance) is
returned.

Reimplemented in pex.config.configurableField.ConfigurableField.

Definition at line 498 of file config.py.

498  def __get__(self, instance, owner=None, at=None, label="default"):
499  """Define how attribute access should occur on the Config instance
500  This is invoked by the owning config object and should not be called
501  directly
502 
503  When the field attribute is accessed on a Config class object, it
504  returns the field object itself in order to allow inspection of
505  Config classes.
506 
507  When the field attribute is access on a config instance, the actual
508  value described by the field (and held by the Config instance) is
509  returned.
510  """
511  if instance is None or not isinstance(instance, Config):
512  return self
513  else:
514  return instance._storage[self.name]
515 

◆ __set__()

def pex.config.dictField.DictField.__set__ (   self,
  instance,
  value,
  at = None,
  label = "assignment" 
)
inherited
Set an attribute on the config instance.

Parameters
----------
instance : `lsst.pex.config.Config`
    The config instance that contains this field.
value : obj
    Value to set on this field.
at : `list` of `lsst.pex.config.callStack.StackFrame`
    The call stack (created by
    `lsst.pex.config.callStack.getCallStack`).
label : `str`, optional
    Event label for the history.

Notes
-----
This method is invoked by the owning `lsst.pex.config.Config` object
and should not be called directly.

Derived `~lsst.pex.config.Field` classes may need to override the
behavior. When overriding ``__set__``, `~lsst.pex.config.Field` authors
should follow the following rules:

- Do not allow modification of frozen configs.
- Validate the new value **before** modifying the field. Except if the
  new value is `None`. `None` is special and no attempt should be made
  to validate it until `lsst.pex.config.Config.validate` is called.
- Do not modify the `~lsst.pex.config.Config` instance to contain
  invalid values.
- If the field is modified, update the history of the
  `lsst.pex.config.field.Field` to reflect the changes.

In order to decrease the need to implement this method in derived
`~lsst.pex.config.Field` types, value validation is performed in the
`lsst.pex.config.Field._validateValue`. If only the validation step
differs in the derived `~lsst.pex.config.Field`, it is simpler to
implement `lsst.pex.config.Field._validateValue` than to reimplement
``__set__``. More complicated behavior, however, may require
reimplementation.

Reimplemented from pex.config.config.Field.

Definition at line 258 of file dictField.py.

258  def __set__(self, instance, value, at=None, label="assignment"):
259  if instance._frozen:
260  msg = "Cannot modify a frozen Config. "\
261  "Attempting to set field to value %s" % value
262  raise FieldValidationError(self, instance, msg)
263 
264  if at is None:
265  at = getCallStack()
266  if value is not None:
267  value = self.DictClass(instance, self, value, at=at, label=label)
268  else:
269  history = instance._history.setdefault(self.name, [])
270  history.append((value, at, label))
271 
272  instance._storage[self.name] = value
273 

◆ freeze()

def pex.config.configDictField.ConfigDictField.freeze (   self,
  instance 
)
Make this field read-only (for internal use only).

Parameters
----------
instance : `lsst.pex.config.Config`
    The config instance that contains this field.

Notes
-----
Freezing is only relevant for fields that hold subconfigs. Fields which
hold subconfigs should freeze each subconfig.

**Subclasses should implement this method.**

Reimplemented from pex.config.config.Field.

Definition at line 212 of file configDictField.py.

212  def freeze(self, instance):
213  configDict = self.__get__(instance)
214  if configDict is not None:
215  for k in configDict:
216  configDict[k].freeze()
217 

◆ rename()

def pex.config.configDictField.ConfigDictField.rename (   self,
  instance 
)
Rename the field in a `~lsst.pex.config.Config` (for internal use
only).

Parameters
----------
instance : `lsst.pex.config.Config`
    The config instance that contains this field.

Notes
-----
This method is invoked by the `lsst.pex.config.Config` object that
contains this field and should not be called directly.

Renaming is only relevant for `~lsst.pex.config.Field` instances that
hold subconfigs. `~lsst.pex.config.Fields` that hold subconfigs should
rename each subconfig with the full field name as generated by
`lsst.pex.config.config._joinNamePath`.

Reimplemented from pex.config.config.Field.

Definition at line 171 of file configDictField.py.

171  def rename(self, instance):
172  configDict = self.__get__(instance)
173  if configDict is not None:
174  for k in configDict:
175  fullname = _joinNamePath(instance._name, self.name, k)
176  configDict[k]._rename(fullname)
177 

◆ save()

def pex.config.configDictField.ConfigDictField.save (   self,
  outfile,
  instance 
)
Save this field to a file (for internal use only).

Parameters
----------
outfile : file-like object
    A writeable field handle.
instance : `Config`
    The `Config` instance that contains this field.

Notes
-----
This method is invoked by the `~lsst.pex.config.Config` object that
contains this field and should not be called directly.

The output consists of the documentation string
(`lsst.pex.config.Field.doc`) formatted as a Python comment. The second
line is formatted as an assignment: ``{fullname}={value}``.

This output can be executed with Python.

Reimplemented from pex.config.config.Field.

Definition at line 200 of file configDictField.py.

200  def save(self, outfile, instance):
201  configDict = self.__get__(instance)
202  fullname = _joinNamePath(instance._name, self.name)
203  if configDict is None:
204  outfile.write(u"{}={!r}\n".format(fullname, configDict))
205  return
206 
207  outfile.write(u"{}={!r}\n".format(fullname, {}))
208  for v in configDict.values():
209  outfile.write(u"{}={}()\n".format(v._name, _typeStr(v)))
210  v._save(outfile)
211 

◆ toDict()

def pex.config.configDictField.ConfigDictField.toDict (   self,
  instance 
)
Convert this field's key-value pairs into a regular `dict`.

Parameters
----------
instance : `lsst.pex.config.Config`
    The configuration that contains this field.

Returns
-------
result : `dict` or `None`
    If this field has a value of `None`, then this method returns
    `None`. Otherwise, this method returns the field's value as a
    regular Python `dict`.

Reimplemented from pex.config.dictField.DictField.

Definition at line 189 of file configDictField.py.

189  def toDict(self, instance):
190  configDict = self.__get__(instance)
191  if configDict is None:
192  return None
193 
194  dict_ = {}
195  for k in configDict:
196  dict_[k] = configDict[k].toDict()
197 
198  return dict_
199 

◆ validate()

def pex.config.configDictField.ConfigDictField.validate (   self,
  instance 
)
Validate the field's value (for internal use only).

Parameters
----------
instance : `lsst.pex.config.Config`
    The configuration that contains this field.

Returns
-------
isValid : `bool`
    `True` is returned if the field passes validation criteria (see
    *Notes*). Otherwise `False`.

Notes
-----
This method validates values according to the following criteria:

- A non-optional field is not `None`.
- If a value is not `None`, is must pass the `ConfigField.dictCheck`
  user callback functon.

Individual item checks by the `ConfigField.itemCheck` user callback
function are done immediately when the value is set on a key. Those
checks are not repeated by this method.

Reimplemented from pex.config.dictField.DictField.

Definition at line 178 of file configDictField.py.

178  def validate(self, instance):
179  value = self.__get__(instance)
180  if value is not None:
181  for k in value:
182  item = value[k]
183  item.validate()
184  if self.itemCheck is not None and not self.itemCheck(item):
185  msg = "Item at key %r is not a valid value: %s" % (k, item)
186  raise FieldValidationError(self, instance, msg)
187  DictField.validate(self, instance)
188 

Member Data Documentation

◆ check

pex.config.config.Field.check
inherited

Definition at line 311 of file config.py.

◆ default

pex.config.config.Field.default
inherited

Definition at line 307 of file config.py.

◆ deprecated

pex.config.config.Field.deprecated
inherited

Definition at line 298 of file config.py.

◆ dictCheck

pex.config.configDictField.ConfigDictField.dictCheck

Definition at line 167 of file configDictField.py.

◆ DictClass

pex.config.configDictField.ConfigDictField.DictClass = ConfigDict
static

Definition at line 148 of file configDictField.py.

◆ doc

pex.config.config.Field.doc
inherited

Definition at line 294 of file config.py.

◆ dtype

pex.config.config.Field.dtype
inherited

Definition at line 287 of file config.py.

◆ itemCheck

pex.config.configDictField.ConfigDictField.itemCheck

Definition at line 168 of file configDictField.py.

◆ itemtype

pex.config.configDictField.ConfigDictField.itemtype

Definition at line 166 of file configDictField.py.

◆ keytype

pex.config.configDictField.ConfigDictField.keytype

Definition at line 165 of file configDictField.py.

◆ optional

pex.config.config.Field.optional
inherited

Definition at line 315 of file config.py.

◆ source

pex.config.config.Field.source
inherited

Definition at line 322 of file config.py.

◆ supportedTypes

pex.config.config.Field.supportedTypes = set((str, bool, float, int, complex))
staticinherited

Definition at line 272 of file config.py.


The documentation for this class was generated from the following file:
pex.config.callStack.getStackFrame
def getStackFrame(relative=0)
Definition: callStack.py:58
pex.config.history.format
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
pex.config.callStack.getCallStack
def getCallStack(skip=0)
Definition: callStack.py:175
pex.config.wrap.validate
validate
Definition: wrap.py:295