@@ -48,7 +48,7 @@ def temp_directory():
48
48
temp_dir , Err_Fore .RESET )))
49
49
50
50
51
- def walk_valid_filens (base_dir , invalid_dir_names , invalid_file_patterns ):
51
+ def walk_valid_filens (base_dir , invalid_dir_names , invalid_file_patterns , excluded_dir_exceptions = None ):
52
52
"""Recursively walks all the files and directories in ``dirn``,
53
53
ignoring directories that match any pattern in ``invalid_dirns``
54
54
and files that patch any pattern in ``invalid_filens``.
@@ -60,15 +60,22 @@ def walk_valid_filens(base_dir, invalid_dir_names, invalid_file_patterns):
60
60
61
61
File and directory paths are evaluated as full paths relative to ``dirn``.
62
62
63
+ If ``excluded_dir_exceptions`` is given, any directory path that contains
64
+ any of those strings will *not* exclude subdirectories matching
65
+ ``invalid_dir_names``.
63
66
"""
64
67
68
+ excluded_dir_exceptions = [] if excluded_dir_exceptions is None else excluded_dir_exceptions
69
+
65
70
for dirn , subdirs , filens in walk (base_dir ):
71
+ allow_invalid_dirs = any (ex in dirn for ex in excluded_dir_exceptions )
66
72
67
73
# Remove invalid subdirs so that they will not be walked
68
- for i in reversed (range (len (subdirs ))):
69
- subdir = subdirs [i ]
70
- if subdir in invalid_dir_names :
71
- subdirs .pop (i )
74
+ if not allow_invalid_dirs :
75
+ for i in reversed (range (len (subdirs ))):
76
+ subdir = subdirs [i ]
77
+ if subdir in invalid_dir_names :
78
+ subdirs .pop (i )
72
79
73
80
for filen in filens :
74
81
for pattern in invalid_file_patterns :
0 commit comments