@@ -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 = None ):
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,22 @@ 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
68+ excluded_dir_exceptions = [] if excluded_dir_exceptions is None else excluded_dir_exceptions
69+
6570 for dirn , subdirs , filens in walk (base_dir ):
71+ allow_invalid_dirs = any (ex in dirn for ex in excluded_dir_exceptions )
6672
6773 # 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 )
7279
7380 for filen in filens :
7481 for pattern in invalid_file_patterns :
0 commit comments