docs: def iterate_schema(fields, schema, path_prefix=''):
      """Iterate over all schema sub-fields.
  
      This will iterate over all field definitions in the schema. Some field v
      alues might be None.
  
      :param fields: field values to iterate over
      :type fields: dict
      :param schema: schema to iterate over
      :type schema: dict
      :param path_prefix: dot separated path prefix
      :type path_prefix: str
      :return: (field schema, field value, field path)
      :rtype: tuple
  
      """
      if path_prefix and path_prefix[-1] != '.':
          path_prefix += '.'
  
      for field_schema in schema:
          name = field_schema['name']
          if 'group' in field_schema:
              for rvals in iterate_schema(fields[name] if name in fields else {},
                                          field_schema['group'], '{}{}'.format(path_prefix, name)):
                  yield rvals
          else:
              yield (field_schema, fields, '{}{}'.format(path_prefix, name))