docs: def from_string(cls, string):
          """Parse a single string representing all command line parameters."""
          if string is None:
              string = ''
  
          if not isinstance(string, six.string_types):
              raise TypeError('string has to be a string type, got: {}'.format(type(string)))
  
          dictionary = {}
          tokens = [token.strip() for token in shlex.split(string)]
  
          def list_tuples(some_iterable):
              items, nexts = itertools.tee(some_iterable, 2)
              nexts = itertools.chain(itertools.islice(nexts, 1, None), [None])
              return list(zip(items, nexts))
  
          for token_current, token_next in list_tuples(tokens):
  
              # If current token starts with a dash, it is a value so we skip it
              if not token_current.startswith('-'):
                  continue
  
              # If the next token is None or starts with a dash, the current token must be a flag, so the value is True
              if not token_next or token_next.startswith('-'):
                  dictionary[token_current.lstrip('-')] = True
  
              # Otherwise the current token is an option with the next token being its value
              else:
                  dictionary[token_current.lstrip('-')] = token_next
  
          return cls.from_dictionary(dictionary)