LSSTApplications  10.0+286,10.0+36,10.0+46,10.0-2-g4f67435,10.1+152,10.1+37,11.0,11.0+1,11.0-1-g47edd16,11.0-1-g60db491,11.0-1-g7418c06,11.0-2-g04d2804,11.0-2-g68503cd,11.0-2-g818369d,11.0-2-gb8b8ce7
LSSTDataManagementBasePackage
Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | List of all members
lsst.pex.config.configDictField.ConfigDictField Class Reference
Inheritance diagram for lsst.pex.config.configDictField.ConfigDictField:

Public Member Functions

def __init__
 
def rename
 
def validate
 
def toDict
 
def save
 
def freeze
 

Public Attributes

 keytype
 
 itemtype
 
 dictCheck
 
 itemCheck
 

Static Public Attributes

 DictClass = ConfigDict
 

Private Member Functions

def _compare
 

Detailed Description

Defines a field which is a mapping between a POD and a config class.

This behaves exactly like a DictField with the slight difference that
    itemtype must be an subclass of Config.

This allows config writters 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; the mapping 
configurations are known and fixed.

Definition at line 85 of file configDictField.py.

Constructor & Destructor Documentation

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

Definition at line 99 of file configDictField.py.

99 
100  def __init__(self, doc, keytype, itemtype, default=None, optional=False, dictCheck=None, itemCheck=None):
101  source = traceback.extract_stack(limit=2)[0]
102  self._setup( doc=doc, dtype=ConfigDict, default=default, check=None,
103  optional=optional, source=source)
104  if keytype not in self.supportedTypes:
105  raise ValueError("'keytype' %s is not a supported type"%\
106  _typeStr(keytype))
107  elif not issubclass(itemtype, Config):
108  raise ValueError("'itemtype' %s is not a supported type"%\
109  _typeStr(itemtype))
110  if dictCheck is not None and not hasattr(dictCheck, "__call__"):
111  raise ValueError("'dictCheck' must be callable")
112  if itemCheck is not None and not hasattr(itemCheck, "__call__"):
113  raise ValueError("'itemCheck' must be callable")
115  self.keytype = keytype
116  self.itemtype = itemtype
117  self.dictCheck = dictCheck
118  self.itemCheck = itemCheck

Member Function Documentation

def lsst.pex.config.configDictField.ConfigDictField._compare (   self,
  instance1,
  instance2,
  shortcut,
  rtol,
  atol,
  output 
)
private
Helper function for Config.compare; used to compare two fields for equality.

@param[in] instance1  LHS Config instance to compare.
@param[in] instance2  RHS Config instance to compare.
@param[in] shortcut   If True, return as soon as an inequality is found.
@param[in] rtol       Relative tolerance for floating point comparisons.
@param[in] atol       Absolute tolerance for floating point comparisons.
@param[in] output     If not None, a callable that takes a string, used (possibly repeatedly)
              to report inequalities.

Floating point comparisons are performed by numpy.allclose; refer to that for details.

Definition at line 167 of file configDictField.py.

168  def _compare(self, instance1, instance2, shortcut, rtol, atol, output):
169  """Helper function for Config.compare; used to compare two fields for equality.
170 
171  @param[in] instance1 LHS Config instance to compare.
172  @param[in] instance2 RHS Config instance to compare.
173  @param[in] shortcut If True, return as soon as an inequality is found.
174  @param[in] rtol Relative tolerance for floating point comparisons.
175  @param[in] atol Absolute tolerance for floating point comparisons.
176  @param[in] output If not None, a callable that takes a string, used (possibly repeatedly)
177  to report inequalities.
178 
179  Floating point comparisons are performed by numpy.allclose; refer to that for details.
180  """
181  d1 = getattr(instance1, self.name)
182  d2 = getattr(instance2, self.name)
183  name = getComparisonName(
184  _joinNamePath(instance1._name, self.name),
185  _joinNamePath(instance2._name, self.name)
186  )
187  if not compareScalars("keys for %s" % name, d1.keys(), d2.keys(), output=output):
188  return False
189  equal = True
190  for k, v1 in d1.iteritems():
191  v2 = d2[k]
192  result = compareConfigs("%s[%r]" % (name, k), v1, v2, shortcut=shortcut,
193  rtol=rtol, atol=atol, output=output)
194  if not result and shortcut:
195  return False
196  equal = equal and result
197  return equal
def lsst.pex.config.configDictField.ConfigDictField.freeze (   self,
  instance 
)

Definition at line 161 of file configDictField.py.

162  def freeze(self, instance):
163  configDict = self.__get__(instance)
164  if configDict is not None:
165  for k in configDict:
166  configDict[k].freeze()
def lsst.pex.config.configDictField.ConfigDictField.rename (   self,
  instance 
)

Definition at line 119 of file configDictField.py.

120  def rename(self, instance):
121  configDict = self.__get__(instance)
122  if configDict is not None:
123  for k in configDict:
124  fullname = _joinNamePath(instance._name, self.name, k)
125  configDict[k]._rename(fullname)
126 
def lsst.pex.config.configDictField.ConfigDictField.save (   self,
  outfile,
  instance 
)

Definition at line 149 of file configDictField.py.

150  def save(self, outfile, instance):
151  configDict = self.__get__(instance)
152  fullname = _joinNamePath(instance._name, self.name)
153  if configDict is None:
154  print >>outfile, "%s=%r"%(fullname, configDict)
155  return
156 
157  print >>outfile, "%s=%r"%(fullname, {})
158  for v in configDict.itervalues():
159  print >>outfile, "%s=%s()"%(v._name, _typeStr(v))
160  v._save(outfile)
def lsst.pex.config.configDictField.ConfigDictField.toDict (   self,
  instance 
)

Definition at line 138 of file configDictField.py.

139  def toDict(self, instance):
140  configDict = self.__get__(instance)
141  if configDict is None:
142  return None
143 
144  dict_ = {}
145  for k in configDict:
146  dict_[k]= configDict[k].toDict()
147 
148  return dict_
def lsst.pex.config.configDictField.ConfigDictField.validate (   self,
  instance 
)

Definition at line 127 of file configDictField.py.

128  def validate(self, instance):
129  value = self.__get__(instance)
130  if value is not None:
131  for k in value:
132  item = value[k]
133  item.validate()
134  if self.itemCheck is not None and not self.itemCheck(item):
135  msg="Item at key %r is not a valid value: %s"%(k, item)
136  raise FieldValidationError(self, instance, msg)
137  DictField.validate(self, instance)

Member Data Documentation

lsst.pex.config.configDictField.ConfigDictField.dictCheck

Definition at line 116 of file configDictField.py.

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

Definition at line 98 of file configDictField.py.

lsst.pex.config.configDictField.ConfigDictField.itemCheck

Definition at line 117 of file configDictField.py.

lsst.pex.config.configDictField.ConfigDictField.itemtype

Definition at line 115 of file configDictField.py.

lsst.pex.config.configDictField.ConfigDictField.keytype

Definition at line 114 of file configDictField.py.


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