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.listField.ListField Class Reference
Inheritance diagram for pex.config.listField.ListField:
pex.config.config.Field

Public Member Functions

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

Public Attributes

 listCheck
 
 itemCheck
 
 itemtype
 
 length
 
 minLength
 
 maxLength
 
 dtype
 
 doc
 
 deprecated
 
 default
 
 check
 
 optional
 
 source
 

Static Public Attributes

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

Detailed Description

A configuration field (`~lsst.pex.config.Field` subclass) that contains
a list of values of a specific type.

Parameters
----------
doc : `str`
    A description of the field.
dtype : class
    The data type of items in the list.
default : sequence, optional
    The default items for the field.
optional : `bool`, optional
    Set whether the field is *optional*. When `False`,
    `lsst.pex.config.Config.validate` will fail if the field's value is
    `None`.
listCheck : callable, optional
    A callable that validates the list as a whole.
itemCheck : callable, optional
    A callable that validates individual items in the list.
length : `int`, optional
    If set, this field must contain exactly ``length`` number of items.
minLength : `int`, optional
    If set, this field must contain *at least* ``minLength`` number of
    items.
maxLength : `int`, optional
    If set, this field must contain *no more than* ``maxLength`` number of
    items.
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.

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

Definition at line 216 of file listField.py.

Constructor & Destructor Documentation

◆ __init__()

def pex.config.listField.ListField.__init__ (   self,
  doc,
  dtype,
  default = None,
  optional = False,
  listCheck = None,
  itemCheck = None,
  length = None,
  minLength = None,
  maxLength = None,
  deprecated = None 
)

Definition at line 260 of file listField.py.

260  def __init__(self, doc, dtype, default=None, optional=False,
261  listCheck=None, itemCheck=None,
262  length=None, minLength=None, maxLength=None,
263  deprecated=None):
264  if dtype not in Field.supportedTypes:
265  raise ValueError("Unsupported dtype %s" % _typeStr(dtype))
266  if length is not None:
267  if length <= 0:
268  raise ValueError("'length' (%d) must be positive" % length)
269  minLength = None
270  maxLength = None
271  else:
272  if maxLength is not None and maxLength <= 0:
273  raise ValueError("'maxLength' (%d) must be positive" % maxLength)
274  if minLength is not None and maxLength is not None \
275  and minLength > maxLength:
276  raise ValueError("'maxLength' (%d) must be at least"
277  " as large as 'minLength' (%d)" % (maxLength, minLength))
278 
279  if listCheck is not None and not hasattr(listCheck, "__call__"):
280  raise ValueError("'listCheck' must be callable")
281  if itemCheck is not None and not hasattr(itemCheck, "__call__"):
282  raise ValueError("'itemCheck' must be callable")
283 
284  source = getStackFrame()
285  self._setup(doc=doc, dtype=List, default=default, check=None, optional=optional, source=source,
286  deprecated=deprecated)
287 
288  self.listCheck = listCheck
289  """Callable used to check the list as a whole.
290  """
291 
292  self.itemCheck = itemCheck
293  """Callable used to validate individual items as they are inserted
294  into the list.
295  """
296 
297  self.itemtype = dtype
298  """Data type of list items.
299  """
300 
301  self.length = length
302  """Number of items that must be present in the list (or `None` to
303  disable checking the list's length).
304  """
305 
306  self.minLength = minLength
307  """Minimum number of items that must be present in the list (or `None`
308  to disable checking the list's minimum length).
309  """
310 
311  self.maxLength = maxLength
312  """Maximum number of items that must be present in the list (or `None`
313  to disable checking the list's maximum length).
314  """
315 

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.listField.ListField.__set__ (   self,
  instance,
  value,
  at = None,
  label = "assignment" 
)
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 356 of file listField.py.

356  def __set__(self, instance, value, at=None, label="assignment"):
357  if instance._frozen:
358  raise FieldValidationError(self, instance, "Cannot modify a frozen Config")
359 
360  if at is None:
361  at = getCallStack()
362 
363  if value is not None:
364  value = List(instance, self, value, at, label)
365  else:
366  history = instance._history.setdefault(self.name, [])
367  history.append((value, at, label))
368 
369  instance._storage[self.name] = value
370 

◆ freeze()

def pex.config.config.Field.freeze (   self,
  instance 
)
inherited
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 in pex.config.configChoiceField.ConfigChoiceField, pex.config.configurableField.ConfigurableField, pex.config.configDictField.ConfigDictField, and pex.config.configField.ConfigField.

Definition at line 377 of file config.py.

377  def freeze(self, instance):
378  """Make this field read-only (for internal use only).
379 
380  Parameters
381  ----------
382  instance : `lsst.pex.config.Config`
383  The config instance that contains this field.
384 
385  Notes
386  -----
387  Freezing is only relevant for fields that hold subconfigs. Fields which
388  hold subconfigs should freeze each subconfig.
389 
390  **Subclasses should implement this method.**
391  """
392  pass
393 

◆ rename()

def pex.config.config.Field.rename (   self,
  instance 
)
inherited
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 in pex.config.configChoiceField.ConfigChoiceField, pex.config.configurableField.ConfigurableField, pex.config.configDictField.ConfigDictField, and pex.config.configField.ConfigField.

Definition at line 327 of file config.py.

327  def rename(self, instance):
328  """Rename the field in a `~lsst.pex.config.Config` (for internal use
329  only).
330 
331  Parameters
332  ----------
333  instance : `lsst.pex.config.Config`
334  The config instance that contains this field.
335 
336  Notes
337  -----
338  This method is invoked by the `lsst.pex.config.Config` object that
339  contains this field and should not be called directly.
340 
341  Renaming is only relevant for `~lsst.pex.config.Field` instances that
342  hold subconfigs. `~lsst.pex.config.Fields` that hold subconfigs should
343  rename each subconfig with the full field name as generated by
344  `lsst.pex.config.config._joinNamePath`.
345  """
346  pass
347 

◆ save()

def pex.config.config.Field.save (   self,
  outfile,
  instance 
)
inherited
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 in pex.config.configChoiceField.ConfigChoiceField, pex.config.configurableField.ConfigurableField, pex.config.configDictField.ConfigDictField, and pex.config.configField.ConfigField.

Definition at line 435 of file config.py.

435  def save(self, outfile, instance):
436  """Save this field to a file (for internal use only).
437 
438  Parameters
439  ----------
440  outfile : file-like object
441  A writeable field handle.
442  instance : `Config`
443  The `Config` instance that contains this field.
444 
445  Notes
446  -----
447  This method is invoked by the `~lsst.pex.config.Config` object that
448  contains this field and should not be called directly.
449 
450  The output consists of the documentation string
451  (`lsst.pex.config.Field.doc`) formatted as a Python comment. The second
452  line is formatted as an assignment: ``{fullname}={value}``.
453 
454  This output can be executed with Python.
455  """
456  value = self.__get__(instance)
457  fullname = _joinNamePath(instance._name, self.name)
458 
459  if self.deprecated and value == self.default:
460  return
461 
462  # write full documentation string as comment lines
463  # (i.e. first character is #)
464  doc = "# " + str(self.doc).replace("\n", "\n# ")
465  if isinstance(value, float) and (math.isinf(value) or math.isnan(value)):
466  # non-finite numbers need special care
467  outfile.write(u"{}\n{}=float('{!r}')\n\n".format(doc, fullname, value))
468  else:
469  outfile.write(u"{}\n{}={!r}\n\n".format(doc, fullname, value))
470 

◆ toDict()

def pex.config.listField.ListField.toDict (   self,
  instance 
)
Convert the value of this field to a plain `list`.

`lsst.pex.config.Config.toDict` is the primary user of this method.

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

Returns
-------
`list`
    Plain `list` of items, or `None` if the field is not set.

Reimplemented from pex.config.config.Field.

Definition at line 371 of file listField.py.

371  def toDict(self, instance):
372  """Convert the value of this field to a plain `list`.
373 
374  `lsst.pex.config.Config.toDict` is the primary user of this method.
375 
376  Parameters
377  ----------
378  instance : `lsst.pex.config.Config`
379  The config instance that contains this field.
380 
381  Returns
382  -------
383  `list`
384  Plain `list` of items, or `None` if the field is not set.
385  """
386  value = self.__get__(instance)
387  return list(value) if value is not None else None
388 

◆ validate()

def pex.config.listField.ListField.validate (   self,
  instance 
)
Validate the field.

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

Raises
------
lsst.pex.config.FieldValidationError
    Raised if:

    - The field is not optional, but the value is `None`.
    - The list itself does not meet the requirements of the `length`,
      `minLength`, or `maxLength` attributes.
    - The `listCheck` callable returns `False`.

Notes
-----
Individual item checks (`itemCheck`) are applied when each item is
set and are not re-checked by this method.

Reimplemented from pex.config.config.Field.

Definition at line 316 of file listField.py.

316  def validate(self, instance):
317  """Validate the field.
318 
319  Parameters
320  ----------
321  instance : `lsst.pex.config.Config`
322  The config instance that contains this field.
323 
324  Raises
325  ------
326  lsst.pex.config.FieldValidationError
327  Raised if:
328 
329  - The field is not optional, but the value is `None`.
330  - The list itself does not meet the requirements of the `length`,
331  `minLength`, or `maxLength` attributes.
332  - The `listCheck` callable returns `False`.
333 
334  Notes
335  -----
336  Individual item checks (`itemCheck`) are applied when each item is
337  set and are not re-checked by this method.
338  """
339  Field.validate(self, instance)
340  value = self.__get__(instance)
341  if value is not None:
342  lenValue = len(value)
343  if self.length is not None and not lenValue == self.length:
344  msg = "Required list length=%d, got length=%d" % (self.length, lenValue)
345  raise FieldValidationError(self, instance, msg)
346  elif self.minLength is not None and lenValue < self.minLength:
347  msg = "Minimum allowed list length=%d, got length=%d" % (self.minLength, lenValue)
348  raise FieldValidationError(self, instance, msg)
349  elif self.maxLength is not None and lenValue > self.maxLength:
350  msg = "Maximum allowed list length=%d, got length=%d" % (self.maxLength, lenValue)
351  raise FieldValidationError(self, instance, msg)
352  elif self.listCheck is not None and not self.listCheck(value):
353  msg = "%s is not a valid value" % str(value)
354  raise FieldValidationError(self, instance, msg)
355 

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.

◆ 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.listField.ListField.itemCheck

Definition at line 289 of file listField.py.

◆ itemtype

pex.config.listField.ListField.itemtype

Definition at line 294 of file listField.py.

◆ length

pex.config.listField.ListField.length

Definition at line 298 of file listField.py.

◆ listCheck

pex.config.listField.ListField.listCheck

Definition at line 285 of file listField.py.

◆ maxLength

pex.config.listField.ListField.maxLength

Definition at line 308 of file listField.py.

◆ minLength

pex.config.listField.ListField.minLength

Definition at line 303 of file listField.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
list
daf::base::PropertyList * list
Definition: fits.cc:913
pex.config.wrap.validate
validate
Definition: wrap.py:295