From beac24bbd211cd333faec0ddb2cd20d0ea6e46b7 Mon Sep 17 00:00:00 2001 From: Michael Bianco Date: Thu, 6 May 2021 06:35:30 -0600 Subject: [PATCH 1/3] Only filter by app & title keys by default Matching against url, editor payload keys, etc could be problematic. The existing rules are written against these two fields, as far as I can tell. --- aw_transform/classify.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/aw_transform/classify.py b/aw_transform/classify.py index d746955a..5e3d468e 100644 --- a/aw_transform/classify.py +++ b/aw_transform/classify.py @@ -15,7 +15,7 @@ class Rule: ignore_case: bool def __init__(self, rules: Dict[str, Any]): - self.select_keys = rules.get("select_keys", None) + self.select_keys = rules.get("select_keys", ["app", "title"]) self.ignore_case = rules.get("ignore_case", False) # NOTE: Also checks that the regex isn't an empty string (which would erroneously match everything) @@ -29,10 +29,15 @@ def __init__(self, rules: Dict[str, Any]): ) def match(self, e: Event) -> bool: - if self.select_keys: - values = [e.data.get(key, None) for key in self.select_keys] - else: + # `data` contains keys like 'app', 'title' + # by default, the rule regex is matched against all values + + if self.select_keys == 'all' values = list(e.data.values()) + elif self.select_keys: + values = [e.data.get(key, None) for key in self.select_keys] + + # although there is a `type` field on the rule name, right now the only valid type is regex if self.regex: for val in values: if isinstance(val, str) and self.regex.search(val): @@ -45,6 +50,7 @@ def categorize(events: List[Event], classes: List[Tuple[Category, Rule]]): def _categorize_one(e: Event, classes: List[Tuple[Category, Rule]]) -> Event: + # TODO can we add a color here too? why is color rendered on the frontend? e.data["$category"] = _pick_category( [_cls for _cls, rule in classes if rule.match(e)] ) From c28da32533c13acaaf72696e0ac2588c02975889 Mon Sep 17 00:00:00 2001 From: Michael Bianco Date: Wed, 8 Jun 2022 05:54:36 -0600 Subject: [PATCH 2/3] Comment update --- aw_transform/classify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aw_transform/classify.py b/aw_transform/classify.py index 5e3d468e..25afabac 100644 --- a/aw_transform/classify.py +++ b/aw_transform/classify.py @@ -50,7 +50,7 @@ def categorize(events: List[Event], classes: List[Tuple[Category, Rule]]): def _categorize_one(e: Event, classes: List[Tuple[Category, Rule]]) -> Event: - # TODO can we add a color here too? why is color rendered on the frontend? + # coloring is intentionally left to the frontend in order to keep the backend as simple as possible e.data["$category"] = _pick_category( [_cls for _cls, rule in classes if rule.match(e)] ) From 35cb3442cfaefe6d171a36bd6f3917ef806f7d34 Mon Sep 17 00:00:00 2001 From: Michael Bianco Date: Wed, 8 Jun 2022 06:04:19 -0600 Subject: [PATCH 3/3] Fix formatting --- aw_transform/classify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aw_transform/classify.py b/aw_transform/classify.py index 25afabac..72813fda 100644 --- a/aw_transform/classify.py +++ b/aw_transform/classify.py @@ -32,7 +32,7 @@ def match(self, e: Event) -> bool: # `data` contains keys like 'app', 'title' # by default, the rule regex is matched against all values - if self.select_keys == 'all' + if self.select_keys == "all": values = list(e.data.values()) elif self.select_keys: values = [e.data.get(key, None) for key in self.select_keys]