docs: def store(self, name, value, atype, new_name=None, multiplier=None, allowed_values=None):
          ''' store a config value in a dictionary, these values are used to populate a trasnfer spec
              validation -- check type, check allowed values and rename if required '''
          if value is not None:
              _bad_type = (not isinstance(value, atype))
              if not _bad_type:
                  # special case
                  _bad_type = (isinstance(value, bool) and atype == int)
  
              if _bad_type:
                  # could be a special value
                  if allowed_values and value in allowed_values:
                      allowed_values = None
                  else:
                      raise ValueError("%s should be value of type (%s)" % (name, atype.__name__))
  
              if allowed_values:
                  if isinstance(value, str):
                      if value not in allowed_values:
                          raise ValueError("%s can be %s" % (name, allowed_values))
                  elif isinstance(value, int):
                      if isinstance(allowed_values[0], int):
                          if value < allowed_values[0]:
                              raise ValueError("%s must be >= %d" % (name, allowed_values[0]))
  
              _val = value if not multiplier else (multiplier * value)
              _name = name if not new_name else new_name
              self._dict[_name] = _val