docs: def convert_string_value_to_type_value(string_value, data_type):
      """Helper function to convert a given string to a given data type
  
      :param str string_value: the string to convert
      :param type data_type: the target data type
      :return: the converted value
      """
      from ast import literal_eval
  
      try:
          if data_type in (str, type(None)):
              converted_value = str(string_value)
          elif data_type == int:
              converted_value = int(string_value)
          elif data_type == float:
              converted_value = float(string_value)
          elif data_type == bool:
              converted_value = bool(literal_eval(string_value))
          elif data_type in (list, dict, tuple):
              converted_value = literal_eval(string_value)
              if type(converted_value) != data_type:
                  raise ValueError("Invalid syntax: {0}".format(string_value))
          elif data_type == object:
              try:
                  converted_value = literal_eval(string_value)
              except (ValueError, SyntaxError):
                  converted_value = literal_eval('"' + string_value + '"')
          elif isinstance(data_type, type):  # Try native type conversion
              converted_value = data_type(string_value)
          elif isclass(data_type):  # Call class constructor
              converted_value = data_type(string_value)
          else:
              raise ValueError("No conversion from string '{0}' to data type '{0}' defined".format(
                  string_value, data_type.__name__))
      except (ValueError, SyntaxError, TypeError) as e:
          raise AttributeError("Can't convert '{0}' to type '{1}': {2}".format(string_value, data_type.__name__, e))
      return converted_value