docs: def load(self):
          """
          - should not be empty
          - yaml itself should be valid (should we grab more than 1 yaml error at a time?)
          - we should have whitelist of fields the can set at each level, and start
            getting objects out of those, processing grammar if necessary, validating other settings
            errors coming all the way back up
          """
          if not isinstance(self.config_text, str):
              self.config_text = self.config_text.decode('utf-8')
  
          if not self.config_text.strip():
              self._errors.append(ConfigError(title='YAML is empty', description='Your configuration file appears to be empty.'))
              return
  
          # simple way to check that yaml itself is valid
          try:
              self.config_dict = yaml.safe_load(self.config_text)
          except yaml.YAMLError as e:
              error = ConfigError.create_from_yaml_error(e)
              self._errors.append(error)
              # could have more than 1 line, keep giong
  
          if self.config_dict:
              # we have valid yaml with data, so start checking the components
              node_tree = yaml.compose(self.config_text)
              # give it the parsed settings, and the node info
              self.config_root = self.config_root_class(
                  value=self.config_dict,
                  value_node=node_tree,
                  context=self.context,
                  variables=self.variables,
              )