def passes(self, event: Event, state: EventState, **kwargs: Any) -> bool: desired_level_raw = self.get_option("level") desired_match = self.get_option("match") if not (desired_level_raw and desired_match): return False desired_level = int(desired_level_raw) # Fetch the event level from the tags since event.level is # event.group.level which may have changed try: level: int = LOG_LEVELS_MAP[event.get_tag("level")] except KeyError: return False if desired_match == MatchType.EQUAL: return level == desired_level elif desired_match == MatchType.GREATER_OR_EQUAL: return level >= desired_level elif desired_match == MatchType.LESS_OR_EQUAL: return level <= desired_level return False
def _get_attribute_values(self, event: Event, attr: str) -> Sequence[str]: # TODO(dcramer): we should validate attributes (when we can) before path = attr.split(".") if path[0] == "platform": if len(path) != 1: return [] return [event.platform] if path[0] == "message": if len(path) != 1: return [] return [event.message, event.search_message] elif path[0] == "environment": return [event.get_tag("environment")] elif path[0] == "type": return [event.data["type"]] elif len(path) == 1: return [] elif path[0] == "extra": path.pop(0) value = event.data["extra"] while path: bit = path.pop(0) value = value.get(bit) if not value: return [] if isinstance(value, (list, tuple)): return value return [value] elif len(path) != 2: return [] elif path[0] == "exception": if path[1] not in ("type", "value"): return [] return [getattr(e, path[1]) for e in event.interfaces["exception"].values] elif path[0] == "user": if path[1] in ("id", "ip_address", "email", "username"): return [getattr(event.interfaces["user"], path[1])] return [getattr(event.interfaces["user"].data, path[1])] elif path[0] == "http": if path[1] not in ("url", "method"): return [] return [getattr(event.interfaces["request"], path[1])] elif path[0] == "sdk": if path[1] != "name": return [] return [event.data["sdk"].get(path[1])] elif path[0] == "stacktrace": stacks = event.interfaces.get("stacktrace") if stacks: stacks = [stacks] else: stacks = [ e.stacktrace for e in event.interfaces["exception"].values if e.stacktrace ] result = [] for st in stacks: for frame in st.frames: if path[1] in ("filename", "module", "abs_path", "package"): result.append(getattr(frame, path[1])) elif path[1] == "code": if frame.pre_context: result.extend(frame.pre_context) if frame.context_line: result.append(frame.context_line) if frame.post_context: result.extend(frame.post_context) return result return []