prevent double errors (#1998)

* prevent double errors

* track invalid css
This commit is contained in:
Will McGugan
2023-03-09 11:55:02 +00:00
committed by GitHub
parent 97a5478bd0
commit 72e32f2206
2 changed files with 15 additions and 5 deletions

View File

@@ -1460,7 +1460,6 @@ class App(Generic[ReturnType], DOMNode):
Args:
error: An exception instance.
"""
if hasattr(error, "__rich__"):
# Exception has a rich method, so we can defer to that for the rendering
self.panic(error)
@@ -1985,7 +1984,6 @@ class App(Generic[ReturnType], DOMNode):
Returns:
True if the event has handled.
"""
print("ACTION", action, default_namespace)
if isinstance(action, str):
target, params = actions.parse(action)
else:

View File

@@ -128,6 +128,7 @@ class Stylesheet:
self.__variable_tokens: dict[str, list[Token]] | None = None
self.source: dict[str, CssSource] = {}
self._require_parse = False
self._invalid_css: set[str] = set()
def __rich_repr__(self) -> rich.repr.Result:
yield list(self.source.keys())
@@ -188,6 +189,7 @@ class Stylesheet:
"""
self._variables = variables
self.__variable_tokens = None
self._invalid_css = set()
def _parse_rules(
self,
@@ -304,10 +306,20 @@ class Stylesheet:
"""
rules: list[RuleSet] = []
add_rules = rules.extend
for path, (css, is_default_rules, tie_breaker) in self.source.items():
css_rules = self._parse_rules(
css, path, is_default_rules=is_default_rules, tie_breaker=tie_breaker
)
if css in self._invalid_css:
continue
try:
css_rules = self._parse_rules(
css,
path,
is_default_rules=is_default_rules,
tie_breaker=tie_breaker,
)
except Exception:
self._invalid_css.add(css)
raise
if any(rule.errors for rule in css_rules):
error_renderable = StylesheetErrors(css_rules)
raise StylesheetParseError(error_renderable)