Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_parse_nonmatching_expression_raises_syntax_error():
stream = (tokens.LiteralToken("view", 1), tokens.StreamEndToken(1))
parser = lkml.parser.Parser(stream)
with pytest.raises(SyntaxError):
parser.parse_expression()
def test_parse_list_with_trailing_comma():
stream = (
tokens.LiteralToken("drill_fields", 1),
tokens.ValueToken(1),
tokens.ListStartToken(1),
tokens.LiteralToken("view_name.field_one", 1),
tokens.CommaToken(1),
tokens.ListEndToken(1),
tokens.StreamEndToken(1),
)
parser = lkml.parser.Parser(stream)
result = parser.parse_list()
assert result == {"drill_fields": ["view_name.field_one"]}
def test_parse_block_without_closing_curly_brace():
stream = (
tokens.LiteralToken("view", 1),
tokens.ValueToken(1),
tokens.BlockStartToken(1),
tokens.LiteralToken("hidden", 2),
tokens.ValueToken(2),
tokens.LiteralToken("yes", 2),
tokens.StreamEndToken(3),
)
parser = lkml.parser.Parser(stream)
result = parser.parse_block()
assert result is None
def test_parse_key_without_value_token():
stream = (tokens.LiteralToken("label", 1), tokens.StreamEndToken(1))
parser = lkml.parser.Parser(stream)
result = parser.parse_key()
assert result is None
def test_parse_pair_with_quoted_literal():
stream = (
tokens.LiteralToken("view_label", 1),
tokens.ValueToken(1),
tokens.QuotedLiteralToken("View Label", 1),
tokens.StreamEndToken(1),
)
parser = lkml.parser.Parser(stream)
result = parser.parse_pair()
assert result == {"view_label": "View Label"}
def test_parse_list_with_only_commas():
stream = (
tokens.LiteralToken("drill_fields", 1),
tokens.ValueToken(1),
tokens.ListStartToken(1),
tokens.CommaToken(1),
tokens.CommaToken(1),
tokens.CommaToken(1),
tokens.ListEndToken(1),
tokens.StreamEndToken(1),
)
parser = lkml.parser.Parser(stream)
result = parser.parse_list()
assert result is None
def test_parse_list_with_bad_token():
stream = (
tokens.LiteralToken("drill_fields", 1),
tokens.ValueToken(1),
tokens.ListStartToken(1),
tokens.LiteralToken("view_name.field_one", 1),
tokens.CommaToken(1),
tokens.LiteralToken("view_name.field_two", 1),
tokens.CommaToken(1),
tokens.ValueToken(1),
tokens.ListEndToken(1),
tokens.StreamEndToken(1),
)
parser = lkml.parser.Parser(stream)
result = parser.parse_list()
assert result is None
def test_parse_value_literal():
literal = "This is an unquoted literal."
stream = (tokens.LiteralToken(literal, 1), tokens.StreamEndToken(1))
parser = lkml.parser.Parser(stream)
result = parser.parse_value()
assert result == literal
def test_parse_list_with_missing_comma():
stream = (
tokens.LiteralToken("drill_fields", 1),
tokens.ValueToken(1),
tokens.ListStartToken(1),
tokens.LiteralToken("view_name.field_one", 1),
tokens.CommaToken(1),
tokens.LiteralToken("view_name.field_two", 1),
tokens.LiteralToken("view_name.field_three", 1),
tokens.ListEndToken(1),
tokens.StreamEndToken(1),
)
parser = lkml.parser.Parser(stream)
result = parser.parse_list()
assert result is None
stream: File object or string containing LookML to be parsed
Raises:
TypeError: If stream is neither a string or a file object
"""
if isinstance(stream, io.TextIOWrapper):
text = stream.read()
elif isinstance(stream, str):
text = stream
else:
raise TypeError("Input stream must be a string or file object.")
lexer = Lexer(text)
tokens = lexer.scan()
parser = Parser(tokens)
result = parser.parse()
return result