66import contextlib
77import textwrap
88import linecache
9+ import fnmatch
910from enum import Enum
1011from tracemalloc import start , take_snapshot , stop , Filter
1112
@@ -295,7 +296,9 @@ def trace(
295296 self ,
296297 target_args = None ,
297298 setup = 'pass' ,
298- related_traces_output_mode = RelatedTracesOutputMode .NONE
299+ related_traces_output_mode = RelatedTracesOutputMode .NONE ,
300+ include_patterns = None ,
301+ exclude_patterns = None
299302 ):
300303 '''Display the trace result.
301304
@@ -304,16 +307,31 @@ def trace(
304307 setup (str): Run-time dependencies.
305308 This parameter is ignored if enable_auto_resolve is enabled.
306309 related_traces_output_mode (:class:`RelatedTracesOutputMode`):
310+ include_patterns (set): Specify patterns of file paths to include in the output.
311+ exclude_patterns (set): Specify patterns of file paths to exclude in the output.
307312 '''
308313 snapshot = self ._take_snapshot (
309314 target_args = target_args ,
310315 setup = setup
311316 )
312317
318+ if include_patterns is None :
319+ include_patterns = set ('*' )
320+
321+ if exclude_patterns is None :
322+ exclude_patterns = set ()
323+
313324 recorder = TraceRecorder ()
314325 stats = snapshot .statistics ('lineno' )
315326 for stat in stats :
316327 frame = stat .traceback [0 ]
328+
329+ if frame .filename != DUMMY_SRC_NAME :
330+ if not any (fnmatch .fnmatch (frame .filename , pattern ) for pattern in include_patterns ):
331+ continue
332+ if any (fnmatch .fnmatch (frame .filename , pattern ) for pattern in exclude_patterns ):
333+ continue
334+
317335 recorder .add_trace (
318336 filepath = frame .filename ,
319337 lineno = frame .lineno ,
@@ -447,7 +465,9 @@ def trace(
447465 enable_auto_resolve = True ,
448466 ctime_setup = 'pass' ,
449467 rtime_setup = 'pass' ,
450- related_traces_output_mode = RelatedTracesOutputMode .NONE
468+ related_traces_output_mode = RelatedTracesOutputMode .NONE ,
469+ include_patterns = None ,
470+ exclude_patterns = None
451471):
452472 '''Convenience function to create Tracer object and call trace method.'''
453473 tracer = Tracer (
@@ -458,5 +478,7 @@ def trace(
458478 tracer .trace (
459479 target_args = target_args ,
460480 setup = rtime_setup ,
461- related_traces_output_mode = related_traces_output_mode
481+ related_traces_output_mode = related_traces_output_mode ,
482+ include_patterns = include_patterns ,
483+ exclude_patterns = exclude_patterns
462484 )
0 commit comments