def get_license_parser(self, vague=False): '''Get license parser with definitions obtained from a given directory :param path: License definitions directory ''' conf_path = helper.path(get_dir(helper.prepend_cwd(config.METADATA_DIR))) text_path = helper.path(get_dir(helper.prepend_cwd(config.DEFINITIONS_DIR))) (licenses, keywords) = self.get_all_licenses_and_keywords(conf_path, text_path) logger.info('Loaded {} licenses'.format(len(licenses))) return LicenseParser(keywords, licenses, vague)
def get_license_parser(path, vague): logger.info("Loading license definitions:") parser = None try: parser = loaders.MainLicenseLoader().get_license_parser(vague) logger.debug('Keywords selected: {}'.format(' '.join(parser.file_locations.keys()))) except OSError as e: logger.error("Loading licenses failed with this error: {0}".format(str(e))) sys.exit(1) logger.debug([f.short_name for f in parser.licenses]) return parser
def get_project(paths): if not paths: logger.error("You must specify files to be analysed") sys.exit(1) project = None try: logger.info("Loading project") if isinstance(paths, str): paths = [paths] project = loaders.ProjectLoader.load_project(list(map(helper.path, paths))) logger.info("Loading complete, {0} files loaded.".format(len(project.files))) return project except Exception as e: logger.error("Loading project failed with this error: {0}".format(str(e))) sys.exit(1)
def run(): args = argument.construct_argparser().parse_args() # Parse arguments argument.handle_args(args) logger.print_splash() # Header output parser = workflow.get_license_parser(get_dir(config.DEFINITIONS_DIR), vague=args.vague) project = workflow.get_project(args.file_list) project.licenses, project.online_result = workflow.get_projects_licenses(args, parser, project.files) logger.info('Found licenses: {}'.format(', '.join([l.name for l in project.licenses]))) workflow.display_results(args, project) if args.detect_problems: workflow.detect_problems(project)
def get_projects_licenses(args, parser, filelist): licenses_found = set() queried_online = dict() for f in filelist: if args.query_online and f.error_unpacking: try: logger.info('Querying online {}'.format(f.path)) query = online.Query.query(f.path, parser.licenses) f.licenses = query.licenses queried_online[f] = query except Exception as e: logger.error('Can not connect to server {}'.format(str(e))) else: try: logger.info("Processing {}".format(f.path)) f.licenses = parser.get_licenses(f.path) except UnicodeDecodeError: f.error_reading = True logger.error("Error reading {}".format(f.path)) licenses_found |= set(f.licenses) return licenses_found, queried_online