@@ -579,24 +579,41 @@ def to_string(value):
579579 return repr (value )[1 :- 1 ]
580580
581581
582- def iter_event_frames (event ):
582+ def iter_event_stacktraces (event ):
583583 # type: (Dict[str, Any]) -> Iterator[Dict[str, Any]]
584- stacktraces = []
585584 if "stacktrace" in event :
586- stacktraces . append ( event ["stacktrace" ])
585+ yield event ["stacktrace" ]
587586 if "exception" in event :
588587 for exception in event ["exception" ].get ("values" ) or ():
589588 if "stacktrace" in exception :
590- stacktraces .append (exception ["stacktrace" ])
591- for stacktrace in stacktraces :
589+ yield exception ["stacktrace" ]
590+
591+
592+ def iter_event_frames (event ):
593+ # type: (Dict[str, Any]) -> Iterator[Dict[str, Any]]
594+ for stacktrace in iter_event_stacktraces (event ):
592595 for frame in stacktrace .get ("frames" ) or ():
593596 yield frame
594597
595598
596599def handle_in_app (event , in_app_exclude = None , in_app_include = None ):
597600 # type: (Dict[str, Any], List, List) -> Dict[str, Any]
601+ for stacktrace in iter_event_stacktraces (event ):
602+ handle_in_app_impl (
603+ stacktrace .get ("frames" ),
604+ in_app_exclude = in_app_exclude ,
605+ in_app_include = in_app_include ,
606+ )
607+
608+ return event
609+
610+
611+ def handle_in_app_impl (frames , in_app_exclude , in_app_include ):
612+ if not frames :
613+ return
614+
598615 any_in_app = False
599- for frame in iter_event_frames ( event ) :
616+ for frame in frames :
600617 in_app = frame .get ("in_app" )
601618 if in_app is not None :
602619 if in_app :
@@ -606,18 +623,18 @@ def handle_in_app(event, in_app_exclude=None, in_app_include=None):
606623 module = frame .get ("module" )
607624 if not module :
608625 continue
609-
610- if _module_in_set (module , in_app_exclude ):
611- frame ["in_app" ] = False
612- if _module_in_set (module , in_app_include ):
626+ elif _module_in_set (module , in_app_include ):
613627 frame ["in_app" ] = True
614628 any_in_app = True
629+ elif _module_in_set (module , in_app_exclude ):
630+ frame ["in_app" ] = False
615631
616632 if not any_in_app :
617- for frame in iter_event_frames (event ):
618- frame ["in_app" ] = True
633+ for frame in frames :
634+ if frame .get ("in_app" ) is None :
635+ frame ["in_app" ] = True
619636
620- return event
637+ return frames
621638
622639
623640def exc_info_from_error (error ):
0 commit comments