Skip to content

Commit 4501ff2

Browse files
authored
Merge pull request Textualize#5191 from Textualize/query-errors
2 parents 440ff28 + 1415942 commit 4501ff2

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/textual/dom.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@
4040
from textual.css.errors import DeclarationError, StyleValueError
4141
from textual.css.match import match
4242
from textual.css.parse import parse_declarations, parse_selectors
43-
from textual.css.query import NoMatches, TooManyMatches
43+
from textual.css.query import InvalidQueryFormat, NoMatches, TooManyMatches
4444
from textual.css.styles import RenderStyles, Styles
4545
from textual.css.tokenize import IDENTIFIER
46+
from textual.css.tokenizer import TokenError
4647
from textual.message_pump import MessagePump
4748
from textual.reactive import Reactive, ReactiveError, _Mutated, _watch
4849
from textual.timer import Timer
@@ -1441,7 +1442,12 @@ def query_one(
14411442
else:
14421443
query_selector = selector.__name__
14431444

1444-
selector_set = parse_selectors(query_selector)
1445+
try:
1446+
selector_set = parse_selectors(query_selector)
1447+
except TokenError:
1448+
raise InvalidQueryFormat(
1449+
f"Unable to parse {query_selector!r} as a query; check for syntax errors"
1450+
) from None
14451451

14461452
if all(selectors.is_simple for selectors in selector_set):
14471453
cache_key = (self._nodes._updates, query_selector, expect_type)
@@ -1505,7 +1511,12 @@ def query_exactly_one(
15051511
else:
15061512
query_selector = selector.__name__
15071513

1508-
selector_set = parse_selectors(query_selector)
1514+
try:
1515+
selector_set = parse_selectors(query_selector)
1516+
except TokenError:
1517+
raise InvalidQueryFormat(
1518+
f"Unable to parse {query_selector!r} as a query; check for syntax errors"
1519+
) from None
15091520

15101521
if all(selectors.is_simple for selectors in selector_set):
15111522
cache_key = (self._nodes._updates, query_selector, expect_type)

tests/test_query.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,22 @@
1414
from textual.widgets import Input, Label
1515

1616

17+
def test_query_errors():
18+
app = App()
19+
20+
with pytest.raises(InvalidQueryFormat):
21+
app.query_one("foo_bar")
22+
23+
with pytest.raises(InvalidQueryFormat):
24+
app.query("foo_bar")
25+
26+
with pytest.raises(InvalidQueryFormat):
27+
app.query("1")
28+
29+
with pytest.raises(InvalidQueryFormat):
30+
app.query_one("1")
31+
32+
1733
def test_query():
1834
class View(Widget):
1935
pass

0 commit comments

Comments
 (0)