Browse Source

fix(grouping): Propagate parsing errors from enhancers (#20747)

Armin Ronacher 4 years ago
parent
commit
52462987c8

+ 1 - 0
src/sentry/grouping/enhancer.py

@@ -518,6 +518,7 @@ class Rule(object):
 
 class EnhancmentsVisitor(NodeVisitor):
     visit_comment = visit_empty = lambda *a: None
+    unwrapped_exceptions = (InvalidEnhancerConfig,)
 
     def __init__(self, bases, id=None):
         self.bases = bases

+ 1 - 0
src/sentry/grouping/fingerprinting.py

@@ -370,6 +370,7 @@ class Rule(object):
 
 class FingerprintingVisitor(NodeVisitor):
     visit_comment = visit_empty = lambda *a: None
+    unwrapped_exceptions = (InvalidFingerprintingConfig,)
 
     def visit_comment(self, node, children):
         return node.text

+ 7 - 1
tests/sentry/grouping/test_enhancer.py

@@ -3,8 +3,9 @@
 from __future__ import absolute_import, print_function
 
 import six
+import pytest
 
-from sentry.grouping.enhancer import Enhancements
+from sentry.grouping.enhancer import Enhancements, InvalidEnhancerConfig
 
 
 def dump_obj(obj):
@@ -46,6 +47,11 @@ family:native                                   max-frames=3
     assert isinstance(dumped, six.string_types)
 
 
+def test_parsing_errors():
+    with pytest.raises(InvalidEnhancerConfig):
+        Enhancements.from_config_string("invalid.message:foo -> bar")
+
+
 def test_basic_path_matching():
     enhancement = Enhancements.from_config_string(
         """

+ 8 - 1
tests/sentry/grouping/test_fingerprinting.py

@@ -2,7 +2,9 @@
 
 from __future__ import absolute_import
 
-from sentry.grouping.fingerprinting import FingerprintingRules
+import pytest
+
+from sentry.grouping.fingerprinting import FingerprintingRules, InvalidFingerprintingConfig
 
 from tests.sentry.grouping import with_fingerprint_input
 
@@ -44,6 +46,11 @@ logger:sentry.*                                 -> logger-, {{ logger }}
     )
 
 
+def test_parsing_errors():
+    with pytest.raises(InvalidFingerprintingConfig):
+        FingerprintingRules.from_config_string("invalid.message:foo -> bar")
+
+
 def test_automatic_argument_splitting():
     rules = FingerprintingRules.from_config_string(
         """