@@ -48,7 +48,7 @@ def temp_directory():
4848 temp_dir , Err_Fore .RESET )))
4949
5050
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 = [] ):
5252 """Recursively walks all the files and directories in ``dirn``,
5353 ignoring directories that match any pattern in ``invalid_dirns``
5454 and files that patch any pattern in ``invalid_filens``.
@@ -60,15 +60,20 @@ def walk_valid_filens(base_dir, invalid_dir_names, invalid_file_patterns):
6060
6161 File and directory paths are evaluated as full paths relative to ``dirn``.
6262
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``.
6366 """
6467
6568 for dirn , subdirs , filens in walk (base_dir ):
69+ allow_invalid_dirs = any (ex in dirn for ex in excluded_dir_exceptions )
6670
6771 # 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 )
72+ if not allow_invalid_dirs :
73+ for i in reversed (range (len (subdirs ))):
74+ subdir = subdirs [i ]
75+ if subdir in invalid_dir_names :
76+ subdirs .pop (i )
7277
7378 for filen in filens :
7479 for pattern in invalid_file_patterns :
0 commit comments