def parse_value_operation(operation: str) -> '<STR_LIT>':
_operation = operation.strip()<EOL>if not _operation:<EOL><INDENT>raise QueryParserException('<STR_LIT>'.format(operation))<EOL><DEDENT>if '<STR_LIT:..>' in _operation:<EOL><INDENT>raise QueryParserException('<STR_LIT>'<EOL>'<STR_LIT>'.format(operation))<EOL><DEDENT>negation, _operation = parse_negation_operation(_operation)<EOL>op, _operation = parse_comparison_operation(_operation)<EOL>if op:<EOL><INDENT>raise QueryParserException('<STR_LIT>'<EOL>'<STR_LIT>'.format(op, operation))<EOL><DEDENT>if '<STR_LIT:|>' in _operation:<EOL><INDENT>op = '<STR_LIT:|>'<EOL>params = _operation.split('<STR_LIT:|>')<EOL>params = [param.strip() for param in params if param.strip()]<EOL>if len(params) <= <NUM_LIT:1>:<EOL><INDENT>raise QueryParserException('<STR_LIT>'<EOL>'<STR_LIT>'.format(op, operation))<EOL><DEDENT>return QueryOpSpec(op, negation, params)<EOL><DEDENT>if not _operation:<EOL><INDENT>raise QueryParserException('<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'.format(operation))<EOL><DEDENT>return QueryOpSpec('<STR_LIT:=>', negation, _operation)<EOL>
Parse value operations.

    A value operation can one of the following:

     * single value: tag1:foo
     * negation single value: tag1:~foo
     * multiple values: tag1:foo|bar|moo
     * negation multiple values: tag1:~foo|bar|moo

    This parser does not allow `..`, '>', '<', '>=', and '<='.