docs: def convert_string_to_type(string_value):
      """Converts a string into a type or class
  
      :param string_value: the string to be converted, e.g. "int"
      :return: The type derived from string_value, e.g. int
      """
      # If the parameter is already a type, return it
      if string_value in ['None', type(None).__name__]:
          return type(None)
      if isinstance(string_value, type) or isclass(string_value):
          return string_value
  
      # Get object associated with string
      # First check whether we are having a built in type (int, str, etc)
      if sys.version_info >= (3,):
          import builtins as builtins23
      else:
          import __builtin__ as builtins23
      if hasattr(builtins23, string_value):
          obj = getattr(builtins23, string_value)
          if type(obj) is type:
              return obj
      # If not, try to locate the module
      try:
          obj = locate(string_value)
      except ErrorDuringImport as e:
          raise ValueError("Unknown type '{0}'".format(e))
  
      # Check whether object is a type
      if type(obj) is type:
          return locate(string_value)
  
      # Check whether object is a class
      if isclass(obj):
          return obj
  
      # Raise error if none is the case
      raise ValueError("Unknown type '{0}'".format(string_value))