LSSTApplications  16.0-10-g0ee56ad+5,16.0-11-ga33d1f2+5,16.0-12-g3ef5c14+3,16.0-12-g71e5ef5+18,16.0-12-gbdf3636+3,16.0-13-g118c103+3,16.0-13-g8f68b0a+3,16.0-15-gbf5c1cb+4,16.0-16-gfd17674+3,16.0-17-g7c01f5c+3,16.0-18-g0a50484+1,16.0-20-ga20f992+8,16.0-21-g0e05fd4+6,16.0-21-g15e2d33+4,16.0-22-g62d8060+4,16.0-22-g847a80f+4,16.0-25-gf00d9b8+1,16.0-28-g3990c221+4,16.0-3-gf928089+3,16.0-32-g88a4f23+5,16.0-34-gd7987ad+3,16.0-37-gc7333cb+2,16.0-4-g10fc685+2,16.0-4-g18f3627+26,16.0-4-g5f3a788+26,16.0-5-gaf5c3d7+4,16.0-5-gcc1f4bb+1,16.0-6-g3b92700+4,16.0-6-g4412fcd+3,16.0-6-g7235603+4,16.0-69-g2562ce1b+2,16.0-8-g14ebd58+4,16.0-8-g2df868b+1,16.0-8-g4cec79c+6,16.0-8-gadf6c7a+1,16.0-8-gfc7ad86,16.0-82-g59ec2a54a+1,16.0-9-g5400cdc+2,16.0-9-ge6233d7+5,master-g2880f2d8cf+3,v17.0.rc1
LSSTDataManagementBasePackage
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst.pex.config.configChoiceField.ConfigChoiceField Class Reference
Inheritance diagram for lsst.pex.config.configChoiceField.ConfigChoiceField:
lsst.pex.config.config.Field lsst.pex.config.registry.RegistryField

Public Member Functions

def __init__ (self, doc, typemap, default=None, optional=False, multi=False)
 
def __get__ (self, instance, owner=None)
 
def __set__ (self, instance, value, at=None, label="assignment")
 
def rename (self, instance)
 
def validate (self, instance)
 
def toDict (self, instance)
 
def freeze (self, instance)
 
def save (self, outfile, instance)
 
def __deepcopy__ (self, memo)
 
def __get__ (self, instance, owner=None, at=None, label="default")
 
def __delete__ (self, instance, at=None, label='deletion')
 

Public Attributes

 typemap
 
 multi
 
 dtype
 
 doc
 
 default
 
 check
 
 optional
 
 source
 

Static Public Attributes

 instanceDictClass = ConfigInstanceDict
 
 supportedTypes = set((str, bool, float, int, complex))
 

Detailed Description

A configuration field (`~lsst.pex.config.Field` subclass) that allows a
user to choose from a set of `~lsst.pex.config.Config` types.

Parameters
----------
doc : `str`
    Documentation string for the field.
typemap : `dict`-like
    A mapping between keys and `~lsst.pex.config.Config`-types as values.
    See *Examples* for details.
default : `str`, optional
    The default configuration name.
optional : `bool`, optional
    When `False`, `lsst.pex.config.Config.validate` will fail if the
    field's value is `None`.
multi : `bool`, optional
    If `True`, the field allows multiple selections. In this case, set the
    selections by assigning a sequence to the ``names`` attribute of the
    field.

    If `False`, the field allows only a single selection. In this case,
    set the active config by assigning the config's key from the
    ``typemap`` to the field's ``name`` attribute (see *Examples*).

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

Notes
-----
``ConfigChoiceField`` instances can allow either single selections or
multiple selections, depending on the ``multi`` parameter. For
single-selection fields, set the selection with the ``name`` attribute.
For multi-selection fields, set the selection though the ``names``
attribute.

This field is validated only against the active selection. If the
``active`` attribute is `None` and the field is not optional, validation
will fail.

When saving a configuration with a ``ConfigChoiceField``, the entire set is
saved, as well as the active selection.

Examples
--------
While the ``typemap`` is shared by all instances of the field, each
instance of the field has its own instance of a particular sub-config type.

For example, ``AaaConfig`` is a config object

>>> from lsst.pex.config import Config, ConfigChoiceField, Field
>>> class AaaConfig(Config):
...     somefield = Field("doc", int)
...

The ``MyConfig`` config has a ``ConfigChoiceField`` field called ``choice``
that maps the ``AaaConfig`` type to the ``"AAA"`` key:

>>> TYPEMAP = {"AAA", AaaConfig}
>>> class MyConfig(Config):
...     choice = ConfigChoiceField("doc for choice", TYPEMAP)
...

Creating an instance of ``MyConfig``:

>>> instance = MyConfig()

Setting value of the field ``somefield`` on the "AAA" key of the ``choice``
field:

>>> instance.choice['AAA'].somefield = 5

**Selecting the active configuration**

Make the ``"AAA"`` key the active configuration value for the ``choice``
field:

>>> instance.choice = "AAA"

Alternatively, the last line can be written:

>>> instance.choice.name = "AAA"

(If the config instance allows multiple selections, you'd assign a sequence
to the ``names`` attribute instead.)

``ConfigChoiceField`` instances also allow multiple values of the same type:

>>> TYPEMAP["CCC"] = AaaConfig
>>> TYPEMAP["BBB"] = AaaConfig

Definition at line 306 of file configChoiceField.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.pex.config.configChoiceField.ConfigChoiceField.__init__ (   self,
  doc,
  typemap,
  default = None,
  optional = False,
  multi = False 
)

Definition at line 409 of file configChoiceField.py.

409  def __init__(self, doc, typemap, default=None, optional=False, multi=False):
410  source = getStackFrame()
411  self._setup(doc=doc, dtype=self.instanceDictClass, default=default, check=None, optional=optional,
412  source=source)
413  self.typemap = typemap
414  self.multi = multi
415 
def getStackFrame(relative=0)
Definition: callStack.py:52
def __init__(self, minimum, dataRange, Q)

Member Function Documentation

◆ __deepcopy__()

def lsst.pex.config.configChoiceField.ConfigChoiceField.__deepcopy__ (   self,
  memo 
)
Customize deep-copying, because we always want a reference to the
original typemap.

WARNING: this must be overridden by subclasses if they change the
constructor signature!

Definition at line 496 of file configChoiceField.py.

496  def __deepcopy__(self, memo):
497  """Customize deep-copying, because we always want a reference to the
498  original typemap.
499 
500  WARNING: this must be overridden by subclasses if they change the
501  constructor signature!
502  """
503  other = type(self)(doc=self.doc, typemap=self.typemap, default=copy.deepcopy(self.default),
504  optional=self.optional, multi=self.multi)
505  other.source = self.source
506  return other
507 
table::Key< int > type
Definition: Detector.cc:164

◆ __delete__()

def lsst.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 528 of file config.py.

528  def __delete__(self, instance, at=None, label='deletion'):
529  """Delete an attribute from a `lsst.pex.config.Config` instance.
530 
531  Parameters
532  ----------
533  instance : `lsst.pex.config.Config`
534  The config instance that contains this field.
535  at : `list` of `lsst.pex.config.callStack.StackFrame`
536  The call stack (created by
537  `lsst.pex.config.callStack.getCallStack`).
538  label : `str`, optional
539  Event label for the history.
540 
541  Notes
542  -----
543  This is invoked by the owning `~lsst.pex.config.Config` object and
544  should not be called directly.
545  """
546  if at is None:
547  at = getCallStack()
548  self.__set__(instance, None, at=at, label=label)
549 
def getCallStack(skip=0)
Definition: callStack.py:169

◆ __get__() [1/2]

def lsst.pex.config.configChoiceField.ConfigChoiceField.__get__ (   self,
  instance,
  owner = None 
)

Definition at line 428 of file configChoiceField.py.

428  def __get__(self, instance, owner=None):
429  if instance is None or not isinstance(instance, Config):
430  return self
431  else:
432  return self._getOrMake(instance)
433 

◆ __get__() [2/2]

def lsst.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.

Definition at line 453 of file config.py.

453  def __get__(self, instance, owner=None, at=None, label="default"):
454  """Define how attribute access should occur on the Config instance
455  This is invoked by the owning config object and should not be called
456  directly
457 
458  When the field attribute is accessed on a Config class object, it
459  returns the field object itself in order to allow inspection of
460  Config classes.
461 
462  When the field attribute is access on a config instance, the actual
463  value described by the field (and held by the Config instance) is
464  returned.
465  """
466  if instance is None or not isinstance(instance, Config):
467  return self
468  else:
469  return instance._storage[self.name]
470 

◆ __set__()

def lsst.pex.config.configChoiceField.ConfigChoiceField.__set__ (   self,
  instance,
  value,
  at = None,
  label = "assignment" 
)

Definition at line 434 of file configChoiceField.py.

434  def __set__(self, instance, value, at=None, label="assignment"):
435  if instance._frozen:
436  raise FieldValidationError(self, instance, "Cannot modify a frozen Config")
437  if at is None:
438  at = getCallStack()
439  instanceDict = self._getOrMake(instance)
440  if isinstance(value, self.instanceDictClass):
441  for k, v in value.items():
442  instanceDict.__setitem__(k, v, at=at, label=label)
443  instanceDict._setSelection(value._selection, at=at, label=label)
444 
445  else:
446  instanceDict._setSelection(value, at=at, label=label)
447 
def getCallStack(skip=0)
Definition: callStack.py:169

◆ freeze()

def lsst.pex.config.configChoiceField.ConfigChoiceField.freeze (   self,
  instance 
)

Definition at line 481 of file configChoiceField.py.

481  def freeze(self, instance):
482  instanceDict = self.__get__(instance)
483  for v in instanceDict.values():
484  v.freeze()
485 

◆ rename()

def lsst.pex.config.configChoiceField.ConfigChoiceField.rename (   self,
  instance 
)

Definition at line 448 of file configChoiceField.py.

448  def rename(self, instance):
449  instanceDict = self.__get__(instance)
450  fullname = _joinNamePath(instance._name, self.name)
451  instanceDict._rename(fullname)
452 

◆ save()

def lsst.pex.config.configChoiceField.ConfigChoiceField.save (   self,
  outfile,
  instance 
)

Definition at line 486 of file configChoiceField.py.

486  def save(self, outfile, instance):
487  instanceDict = self.__get__(instance)
488  fullname = _joinNamePath(instance._name, self.name)
489  for v in instanceDict.values():
490  v._save(outfile)
491  if self.multi:
492  outfile.write(u"{}.names={!r}\n".format(fullname, instanceDict.names))
493  else:
494  outfile.write(u"{}.name={!r}\n".format(fullname, instanceDict.name))
495 
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:168

◆ toDict()

def lsst.pex.config.configChoiceField.ConfigChoiceField.toDict (   self,
  instance 
)

Definition at line 465 of file configChoiceField.py.

465  def toDict(self, instance):
466  instanceDict = self.__get__(instance)
467 
468  dict_ = {}
469  if self.multi:
470  dict_["names"] = instanceDict.names
471  else:
472  dict_["name"] = instanceDict.name
473 
474  values = {}
475  for k, v in instanceDict.items():
476  values[k] = v.toDict()
477  dict_["values"] = values
478 
479  return dict_
480 

◆ validate()

def lsst.pex.config.configChoiceField.ConfigChoiceField.validate (   self,
  instance 
)

Definition at line 453 of file configChoiceField.py.

453  def validate(self, instance):
454  instanceDict = self.__get__(instance)
455  if instanceDict.active is None and not self.optional:
456  msg = "Required field cannot be None"
457  raise FieldValidationError(self, instance, msg)
458  elif instanceDict.active is not None:
459  if self.multi:
460  for a in instanceDict.active:
461  a.validate()
462  else:
463  instanceDict.active.validate()
464 

Member Data Documentation

◆ check

lsst.pex.config.config.Field.check
inherited

Definition at line 284 of file config.py.

◆ default

lsst.pex.config.config.Field.default
inherited

Definition at line 280 of file config.py.

◆ doc

lsst.pex.config.config.Field.doc
inherited

Definition at line 271 of file config.py.

◆ dtype

lsst.pex.config.config.Field.dtype
inherited

Definition at line 267 of file config.py.

◆ instanceDictClass

lsst.pex.config.configChoiceField.ConfigChoiceField.instanceDictClass = ConfigInstanceDict
static

Definition at line 407 of file configChoiceField.py.

◆ multi

lsst.pex.config.configChoiceField.ConfigChoiceField.multi

Definition at line 414 of file configChoiceField.py.

◆ optional

lsst.pex.config.config.Field.optional
inherited

Definition at line 288 of file config.py.

◆ source

lsst.pex.config.config.Field.source
inherited

Definition at line 295 of file config.py.

◆ supportedTypes

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

Definition at line 253 of file config.py.

◆ typemap

lsst.pex.config.configChoiceField.ConfigChoiceField.typemap

Definition at line 413 of file configChoiceField.py.


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