code: def _get_list(self, value, context=None):
          
          log = self._params.get('log', self._discard)
          res = []
          if value is None:
              return res
          if context is None:
              context = self._context
          if isinstance(value, list):
              log.debug("Processing list %s", value)
              for v in value:
                  res.extend(self._get_list(v, context=context))
          elif isinstance(value, dict):
              log.debug("Processing dict %s", value)
              for k in value:
                  if k in context:
                      res.extend(self._get_list(value[k], context=context))
          else:
              log.debug("Processing value '%s'", value)
              res.append(value)
          return res
docs: Get a configuration value.  The result is None if "value" is None,
          otherwise the result is a list.
  
          "value" may be a list, dict, or str value.
  
          If a list, each element of the list may be a list, dict, or
          str value, and the value extraction proceeds recursively.
  
          During processing, if a dict is encountered, each element of
          the dict is checked for existence in the context.  If it
          exists the associated value will be processed recursively as
          before.
  
          The final result will be the flattened list resulting from the
          recursion.  Even if the initial "value" is a str, the result
          will be a list, with one element.