packages/python-packages/doc-warden/warden/enforce_target_file_presence.py (88 lines of code) (raw):

# Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. from __future__ import print_function import os import glob import fnmatch import zipfile from pathlib2 import Path from .warden_common import get_java_package_roots, get_net_package, get_python_package_roots, get_swift_package_roots, get_js_package_roots, find_alongside_file # python 3 transitioned StringIO to be part of `io` module. # python 2 needs the old version however try: from StringIO import StringIO except ImportError: from io import StringIO # default option for handling an uncrecognized language def unrecognized_option(configuration): print('Argument {} provided is not a supported option'.format(configuration.scan_language)) exit(1) # parent caller for language types def find_missing_target_files(configuration): language_selector = { 'python': check_python_target_files, 'js': check_js_target_files, 'java': check_java_target_files, 'net': check_net_target_files, 'swift': check_swift_target_files } missing_target_file_paths = [] ignored_missing_target_file_paths = [] known_issue_paths = configuration.get_known_presence_issues() target_file_results = language_selector.get(configuration.scan_language.lower(), unrecognized_option)(configuration) for target_file_path in target_file_results: if target_file_path in known_issue_paths: ignored_missing_target_file_paths.append(target_file_path) else: missing_target_file_paths.append(target_file_path) return missing_target_file_paths, ignored_missing_target_file_paths # check the root of the target_directory for a default README def check_repo_root(configuration): if configuration.root_check_enabled: # check root for readme.md present_files = [f for f in os.listdir(configuration.target_directory) if os.path.isfile(os.path.join(configuration.target_directory, f))] return any(x in [f.lower() for f in present_files] for x in configuration.target_files) return true def check_swift_target_files(configuration): expected_target_files, omitted_target_files = get_swift_package_roots(configuration) missing_expected_target_file_locations = [] for expected_location in expected_target_files: result = False for target_file in configuration.target_files: result = result or find_alongside_file(expected_location, target_file) if not result: missing_expected_target_file_locations.append(os.path.dirname(expected_location)) return missing_expected_target_file_locations # return all missing target_files for a PYTHON repostiroy def check_python_target_files(configuration): expected_target_files, omitted_target_files = get_python_package_roots(configuration) missing_expected_target_file_locations = [] for expected_location in expected_target_files: result = False for target_file in configuration.target_files: result = result or find_alongside_file(expected_location, target_file) if not result: missing_expected_target_file_locations.append(os.path.dirname(expected_location)) return missing_expected_target_file_locations # return all missing target_files for a JAVASCRIPT repository def check_js_target_files(configuration): expected_target_files, omitted_target_files = get_js_package_roots(configuration) missing_expected_target_file_locations = [] for expected_location in expected_target_files: result = False for target_file in configuration.target_files: result = result or find_alongside_file(expected_location, target_file) if not result: missing_expected_target_file_locations.append(os.path.dirname(expected_location)) return missing_expected_target_file_locations # return all missing target_files for a .NET repostory def check_net_target_files(configuration): expected_target_files, omitted_target_files = get_net_package(configuration) missing_expected_target_file_locations = [] for expected_location in expected_target_files: target_file_location = os.path.normpath(Path(expected_location).parent.parent) result = False for target_file in configuration.target_files: result = result or find_alongside_file(target_file_location, target_file) if not result: missing_expected_target_file_locations.append(target_file_location) return missing_expected_target_file_locations # returns all missing target_files for a JAVA repo def check_java_target_files(configuration): expected_target_files, omitted_target_files = get_java_package_roots(configuration) missing_expected_target_file_locations = [] for expected_location in expected_target_files: result = False for target_file in configuration.target_files: result = result or find_alongside_file(expected_location, target_file) if not result: missing_expected_target_file_locations.append(os.path.dirname(expected_location)) return missing_expected_target_file_locations