diff --git a/tools/check.py b/tools/check.py index dda03f80acbaebb9ebf17ae2dada533baabdfb9e..e335bb8a95ebd2a2e06a1efd8439146643b4dc81 100755 --- a/tools/check.py +++ b/tools/check.py @@ -668,6 +668,48 @@ def command_line(): return parser.parse_args() +def check_required_files(dir_to_validate): + """Check if required files exists.""" + REQUIRED_FILES = ["01-*.md", + "discussion.md", + "index.md", + "instructors.md", + "LICENSE.md", + "motivation.md", + "README.md", + "reference.md"] + valid = True + + for required in REQUIRED_FILES: + req_fn = os.path.join(dir_to_validate, required) + if not glob.glob(req_fn): + logging.error( + "Missing file {0}.".format(required)) + valid = False + + return valid + + +def get_files_to_validate(file_or_path): + """Generate list of files to validate.""" + files_to_validate = [] + dirs_to_validate = [] + + for fn in file_or_path: + if os.path.isdir(fn): + search_str = os.path.join(fn, "*.md") + files_to_validate.extend(glob.glob(search_str)) + dirs_to_validate.append(fn) + elif os.path.isfile(fn): + files_to_validate.append(fn) + else: + logging.error( + "The specified file or folder {0} does not exist; " + "could not perform validation".format(fn)) + + return files_to_validate, dirs_to_validate + + def main(parsed_args_obj): if parsed_args_obj.debug: log_level = "DEBUG" @@ -678,16 +720,16 @@ def main(parsed_args_obj): template = parsed_args_obj.template all_valid = True - for fn in parsed_args_obj.file_or_path: - if os.path.isdir(fn): - res = validate_folder(fn, template=template) - elif os.path.isfile(fn): - res = validate_single(fn, template=template) - else: - res = False - logging.error( - "The specified file or folder {0} does not exist; " - "could not perform validation".format(fn)) + + files_to_validate, dirs_to_validate = get_files_to_validate( + parsed_args_obj.file_or_path) + + # If user ask to validate only one file don't check for required files. + for d in dirs_to_validate: + all_valid = all_valid and check_required_files(d) + + for fn in files_to_validate: + res = validate_single(fn, template=template) all_valid = all_valid and res