docs: def _load_yml_config(self, config_file):
          """ loads a yaml str, creates a few constructs for pyaml, serializes and normalized the config data. Then
           assigns the config data to self._data.
  
          :param config_file: A :string: loaded from a yaml file.
          """
          if not isinstance(config_file, six.string_types):
              raise TypeError('config_file must be a str.')
  
          try:
              def construct_yaml_int(self, node):
                  obj  = SafeConstructor.construct_yaml_int(self, node)
                  data = ConfigInt(
                      obj,
                      node.start_mark,
                      node.end_mark
                  )
  
                  return data
  
              def construct_yaml_float(self, node):
                  obj, = SafeConstructor.construct_yaml_float(self, node)
                  data = ConfigFloat(
                      obj,
                      node.start_mark,
                      node.end_mark
                  )
  
                  return data
  
              def construct_yaml_str(self, node):
                  # Override the default string handling function
                  # to always return unicode objects
                  obj = SafeConstructor.construct_scalar(self, node)
  
                  assert isinstance(obj, six.string_types)
                  data = ConfigUnicode(
                      obj,
                      node.start_mark,
                      node.end_mark
                  )
  
                  return data
  
              def construct_yaml_mapping(self, node):
                  obj, = SafeConstructor.construct_yaml_map(self, node)
                  data = ConfigDict(
                      obj,
                      node.start_mark,
                      node.end_mark
                  )
  
                  return data
  
              def construct_yaml_seq(self, node):
                  obj, = SafeConstructor.construct_yaml_seq(self, node)
                  data = ConfigSeq(
                      obj,
                      node.start_mark,
                      node.end_mark
                  )
  
                  return data
  
              # SafeConstructor.add_constructor(u'tag:yaml.org,2002:bool',  construct_yaml_bool)
              SafeConstructor.add_constructor(u'tag:yaml.org,2002:float', construct_yaml_float)
              SafeConstructor.add_constructor(u'tag:yaml.org,2002:int', construct_yaml_int)
              SafeConstructor.add_constructor(u'tag:yaml.org,2002:map', construct_yaml_mapping)
              SafeConstructor.add_constructor(u'tag:yaml.org,2002:seq', construct_yaml_seq)
              SafeConstructor.add_constructor(u'tag:yaml.org,2002:str', construct_yaml_str)
  
              data = SafeLoader(config_file).get_data()
              if data is None:
                  raise AttributeError('The configuration file needs to have data in it.')
  
              self._data = normalize_keys(data, snake_case=False)
          except YAMLError as e:
              if hasattr(e, 'problem_mark'):
                  mark = e.problem_mark
                  raise SyntaxError(
                      "There is a syntax error in your freight-forwarder config file line: {0} column: {1}".format(
                          mark.line + 1,
                          mark.column + 1
                      )
                  )
              else:
                  raise SyntaxError("There is a syntax error in your freight-forwarder config.")