def get_smu_info(smu_id, platform, release): rows = [] smu_loader = SMUInfoLoader(platform, release) smu_info = smu_loader.get_smu_info_by_id(smu_id) if smu_info is not None: row = {} row['id'] = smu_info.id row['name'] = smu_info.name row['status'] = smu_info.status row['type'] = smu_info.type row['posted_date'] = smu_info.posted_date row['ddts'] = smu_info.ddts row['description'] = smu_info.description row['functional_areas'] = smu_info.functional_areas row['impact'] = smu_info.impact row['package_bundles'] = smu_info.package_bundles row['compressed_image_size'] = str(smu_info.compressed_image_size) row['uncompressed_image_size'] = str(smu_info.uncompressed_image_size) row['prerequisites'] = smu_info.prerequisites row['supersedes'] = smu_info.supersedes row['superseded_by'] = smu_info.superseded_by row['composite_DDTS'] = smu_info.composite_DDTS row['prerequisites_smu_ids'] = "" row['supersedes_smu_ids'] = "" row['superseded_by_smu_ids'] = "" if smu_info.prerequisites != "": prereqs = smu_info.prerequisites.split(',') for smu in prereqs: prereq = smu_loader.get_smu_info(smu) row['prerequisites_smu_ids'] = row[ 'prerequisites_smu_ids'] + prereq.id + ',' row['prerequisites_smu_ids'] = row['prerequisites_smu_ids'][:-1] if smu_info.supersedes != "": supersedes = smu_info.supersedes.split(',') for smu in supersedes: supersedes_info = smu_loader.get_smu_info(smu) row['supersedes_smu_ids'] = row[ 'supersedes_smu_ids'] + supersedes_info.id + ',' row['supersedes_smu_ids'] = row['supersedes_smu_ids'][:-1] if smu_info.superseded_by != "": superseded_by = smu_info.superseded_by.split(',') for smu in superseded_by: supersedes_info = smu_loader.get_smu_info(smu) row['superseded_by_smu_ids'] = row[ 'superseded_by_smu_ids'] + supersedes_info.id + ',' row['superseded_by_smu_ids'] = row['superseded_by_smu_ids'][:-1] rows.append(row) return rows
def get_smu_info(smu_id, platform, release): rows = [] smu_loader = SMUInfoLoader(platform, release) smu_info = smu_loader.get_smu_info_by_id(smu_id) if smu_info is not None: row = {} row["id"] = smu_info.id row["name"] = smu_info.name row["status"] = smu_info.status row["type"] = smu_info.type row["posted_date"] = smu_info.posted_date row["ddts"] = smu_info.ddts row["description"] = smu_info.description row["functional_areas"] = smu_info.functional_areas row["impact"] = smu_info.impact row["package_bundles"] = smu_info.package_bundles row["compressed_image_size"] = str(smu_info.compressed_image_size) row["uncompressed_image_size"] = str(smu_info.uncompressed_image_size) row["prerequisites"] = smu_info.prerequisites row["supersedes"] = smu_info.supersedes row["superseded_by"] = smu_info.superseded_by row["composite_DDTS"] = smu_info.composite_DDTS row["prerequisites_smu_ids"] = "" row["supersedes_smu_ids"] = "" row["superseded_by_smu_ids"] = "" if smu_info.prerequisites != "": prereqs = smu_info.prerequisites.split(",") for smu in prereqs: prereq = smu_loader.get_smu_info(smu) row["prerequisites_smu_ids"] = row["prerequisites_smu_ids"] + prereq.id + "," row["prerequisites_smu_ids"] = row["prerequisites_smu_ids"][:-1] if smu_info.supersedes != "": supersedes = smu_info.supersedes.split(",") for smu in supersedes: supersedes_info = smu_loader.get_smu_info(smu) row["supersedes_smu_ids"] = row["supersedes_smu_ids"] + supersedes_info.id + "," row["supersedes_smu_ids"] = row["supersedes_smu_ids"][:-1] if smu_info.superseded_by != "": superseded_by = smu_info.superseded_by.split(",") for smu in superseded_by: supersedes_info = smu_loader.get_smu_info(smu) row["superseded_by_smu_ids"] = row["superseded_by_smu_ids"] + supersedes_info.id + "," row["superseded_by_smu_ids"] = row["superseded_by_smu_ids"][:-1] rows.append(row) return rows
def get_missing_prerequisite_list(smu_list): result_list = [] platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: return result_list # Load the SMU information smu_loader = SMUInfoLoader(platform, release) smu_info_list= [] smu_name_set = set() for line in smu_list: smu_name = get_smu_lookup_name(line) smu_info = smu_loader.get_smu_info(smu_name) if smu_info is None or smu_name in smu_name_set: continue smu_name_set.add(smu_name) smu_info_list.append(smu_info) if len(smu_info_list) > 0: # Exclude all the superseded SMUs in smu_info_list excluded_supersede_list = get_excluded_supersede_list(smu_info_list) missing_required_prerequisite_dict = \ get_missing_required_prerequisites(smu_loader, excluded_supersede_list) missing_required_prerequisite_set = get_unique_set_from_dict(missing_required_prerequisite_dict) for pre_requisite_smu in missing_required_prerequisite_set: result_list.append(pre_requisite_smu + '.' + smu_loader.file_suffix) return result_list
def get_missing_prerequisite_list(smu_list): result_list = [] platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: return result_list # Load the SMU information smu_loader = SMUInfoLoader(platform, release) smu_info_list= [] smu_name_set = set() for line in smu_list: smu_name = get_smu_lookup_name(line) smu_info = smu_loader.get_smu_info(smu_name) if smu_info is None or smu_name in smu_name_set: continue smu_name_set.add(smu_name) smu_info_list.append(smu_info) if len(smu_info_list) > 0: # Exclude all the superseded SMUs in smu_info_list excluded_supersede_list = get_excluded_supersede_list(smu_info_list) missing_required_prerequisite_dict = \ get_missing_required_prerequisites(smu_loader, excluded_supersede_list) missing_required_prerequisite_set = get_unique_set_from_dict(missing_required_prerequisite_dict) for pre_requisite_smu in missing_required_prerequisite_set: result_list.append(pre_requisite_smu + '.' + smu_loader.file_suffix) return result_list
def api_get_conformance_report_software_profile_packages(id): rows = [] db_session = DBSession() conformance_report = get_conformance_report_by_id(db_session, id) if conformance_report is not None: software_profile_packages = conformance_report.software_profile_packages.split( ',') smu_loader = None platform, release = get_platform_and_release(software_profile_packages) if platform != UNKNOWN and release != UNKNOWN: smu_loader = SMUInfoLoader(platform, release) for software_profile_package in software_profile_packages: description = '' if smu_loader is not None and smu_loader.is_valid: smu_info = smu_loader.get_smu_info( software_profile_package.replace( '.' + smu_loader.file_suffix, '')) if smu_info is not None: description = smu_info.description rows.append({ 'software_profile_package': software_profile_package, 'description': description }) return jsonify(**{'data': rows})
def api_get_missing_prerequisite_list(): """ Given a SMU list, return any missing pre-requisites. The SMU entries returned also have the file extension appended. """ hostname = request.args.get('hostname') # The SMUs selected by the user to install smu_list = request.args.get('smu_list').split() rows = [] platform, release = SMUInfoLoader.get_platform_and_release(smu_list) if platform != UNKNOWN and release != UNKNOWN: smu_loader = SMUInfoLoader(platform, release) prerequisite_list = get_missing_prerequisite_list(smu_list) host_packages = get_host_active_packages(hostname) for smu_name in prerequisite_list: # If the missing pre-requisites have not been installed # (i.e. not in the Active/Active-Committed), include them. if not host_packages_contains(host_packages, smu_name): smu_info = smu_loader.get_smu_info( smu_name.replace('.' + smu_loader.file_suffix, '')) description = '' if smu_info is None else smu_info.description rows.append({ 'smu_entry': smu_name, 'description': description }) return jsonify(**{'data': rows})
def api_get_reload_list(): """ Given a software package/SMU/SP list, return those that require router reload. """ # The software packages/SMUs/SPs selected by the user to install package_list = request.args.get('package_list').split() rows = [] if not is_empty(package_list): # Identify the platform and release platform, release = SMUInfoLoader.get_platform_and_release( package_list) if platform != UNKNOWN and release != UNKNOWN: smu_loader = SMUInfoLoader(platform, release) if smu_loader.is_valid: for package_name in package_list: if 'mini' in package_name: rows.append({'entry': package_name, 'description': ''}) else: # Strip the suffix smu_info = smu_loader.get_smu_info( package_name.replace('.' + smu_loader.file_suffix, '')) if smu_info is not None: if "Reload" in smu_info.impact or "Reboot" in smu_info.impact: rows.append({ 'entry': package_name, 'description': smu_info.description }) return jsonify(**{'data': rows})
def write_software_profile_info(self): self.ws.write( self.row, 0, 'Software Profile: ' + self.conformance_report.software_profile, XLSWriter.style_bold) self.row += 2 software_profile_packages = self.conformance_report.software_profile_packages.split( ',') smu_loader = None platform, release = get_platform_and_release(software_profile_packages) if platform != UNKNOWN and release != UNKNOWN: smu_loader = SMUInfoLoader(platform, release) for software_profile_package in software_profile_packages: self.ws.write(self.row, 0, software_profile_package) if smu_loader is not None and smu_loader.is_valid: smu_info = smu_loader.get_smu_info( software_profile_package.replace( '.' + smu_loader.file_suffix, '')) if smu_info is not None: self.ws.write(self.row, 1, smu_info.description) self.row += 1 self.row += 1
def api_get_missing_prerequisite_list(): """ Given a SMU list, return any missing pre-requisites. The SMU entries returned also have the file extension appended. """ hostname = request.args.get('hostname') # The SMUs selected by the user to install smu_list = request.args.get('smu_list').split() rows = [] platform, release = SMUInfoLoader.get_platform_and_release(smu_list) if platform != UNKNOWN and release != UNKNOWN: smu_loader = SMUInfoLoader(platform, release) prerequisite_list = get_missing_prerequisite_list(smu_list) host_packages = get_host_active_packages(hostname) for smu_name in prerequisite_list: # If the missing pre-requisites have not been installed # (i.e. not in the Active/Active-Committed), include them. if not host_packages_contains(host_packages, smu_name): smu_info = smu_loader.get_smu_info(smu_name.replace('.' + smu_loader.file_suffix, '')) description = '' if smu_info is None else smu_info.description rows.append({'smu_entry': smu_name, 'description': description}) return jsonify(**{'data': rows})
def api_get_reload_list(): """ Given a software package/SMU/SP list, return those that require router reload. """ # The software packages/SMUs/SPs selected by the user to install package_list = request.args.get('package_list').split() rows = [] if not is_empty(package_list): # Identify the platform and release platform, release = SMUInfoLoader.get_platform_and_release(package_list) if platform != UNKNOWN and release != UNKNOWN: smu_loader = SMUInfoLoader(platform, release) if smu_loader.is_valid: for package_name in package_list: if 'mini' in package_name: rows.append({'entry': package_name, 'description': ''}) else: # Strip the suffix smu_info = smu_loader.get_smu_info(package_name.replace('.' + smu_loader.file_suffix, '')) if smu_info is not None: if "Reload" in smu_info.impact or "Reboot" in smu_info.impact: rows.append({'entry': package_name, 'description': smu_info.description}) return jsonify(**{'data': rows})
def api_get_smu_info_by_name(platform, release, smu_name): try: smu_loader = SMUInfoLoader(platform, release) smu_info = smu_loader.get_smu_info(smu_name) except: return ("Page does not exist; check platform and release", 404) if smu_info is not None: return jsonify(**{"data": get_smu_info(smu_info.id, platform, release)}) else: return ("Page does not exist; check smu_name", 404)
def get_optimize_list(smu_list, include_annotation=True): error_list = [] result_list = [] # Identify the platform and release platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: return result_list, error_list # Load the SMU information smu_loader = SMUInfoLoader(platform, release) file_suffix = smu_loader.file_suffix smu_info_list= [] smu_name_set = set() for line in smu_list: smu_name = get_smu_lookup_name(line) smu_info = smu_loader.get_smu_info(smu_name) if smu_info is None: error_list.append(smu_name) continue if smu_name in smu_name_set: continue smu_name_set.add(smu_name) smu_info_list.append(smu_info) if len(smu_info_list) > 0: # Exclude all the superseded SMUs in smu_info_list excluded_supersede_list = get_excluded_supersede_list(smu_info_list) missing_required_prerequisite_dict = \ get_missing_required_prerequisites(smu_loader, excluded_supersede_list) missing_required_prerequisite_set = get_unique_set_from_dict(missing_required_prerequisite_dict) for pre_requisite_smu in missing_required_prerequisite_set: if include_annotation: result_list.append(pre_requisite_smu + '.' + file_suffix + ' (A Missing Pre-requisite)') else: result_list.append(pre_requisite_smu + '.' + file_suffix) excluded_supersede_dict = get_dict_from_list(excluded_supersede_list) for smu_info in smu_info_list: if smu_info.name not in excluded_supersede_dict: if include_annotation: result_list.append(smu_info.name + '.' + file_suffix + ' (Superseded)') else: result_list.append(smu_info.name + '.' + file_suffix) return result_list, error_list
def api_get_smu_info_by_name(platform, release, smu_name): try: smu_loader = SMUInfoLoader(platform, release) smu_info = smu_loader.get_smu_info(smu_name) except: return ('Page does not exist; check platform and release', 404) if smu_info is not None: return jsonify( **{'data': get_smu_info(smu_info.id, platform, release)}) else: return ('Page does not exist; check smu_name', 404)
def get_optimize_list(smu_list): error_list = [] result_list = [] # Identify the platform and release platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: return result_list, error_list # Load the SMU information smu_loader = SMUInfoLoader(platform, release) file_suffix = smu_loader.file_suffix smu_info_list= [] smu_name_set = set() for line in smu_list: smu_name = get_smu_lookup_name(line) smu_info = smu_loader.get_smu_info(smu_name) if smu_info is None: error_list.append(smu_name) continue if smu_name in smu_name_set: continue smu_name_set.add(smu_name) smu_info_list.append(smu_info) if len(smu_info_list) > 0: # Exclude all the superseded SMUs in smu_info_list excluded_supersede_list = get_excluded_supersede_list(smu_info_list) missing_required_prerequisite_dict = \ get_missing_required_prerequisites(smu_loader, excluded_supersede_list) missing_required_prerequisite_set = get_unique_set_from_dict(missing_required_prerequisite_dict) for pre_requisite_smu in missing_required_prerequisite_set: result_list.append(pre_requisite_smu + '.' + file_suffix + ' (A Missing Pre-requisite)') excluded_supersede_dict = get_dict_from_list(excluded_supersede_list) for smu_info in smu_info_list: if smu_info.name not in excluded_supersede_dict: result_list.append(smu_info.name + '.' + file_suffix + ' (Superseded)') else: result_list.append(smu_info.name + '.' + file_suffix) return result_list, error_list
def get_download_info_dict(smu_list): download_info_dict = {} platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: return download_info_dict, None # Load the SMU information smu_loader = SMUInfoLoader(platform, release) for smu_name in smu_list: lookup_name = get_smu_lookup_name(smu_name) smu_info = smu_loader.get_smu_info(lookup_name) if smu_info is not None: # Return back the same name (i.e. smu_name) download_info_dict[smu_name] = smu_info.cco_filename else: download_info_dict[smu_name] = None return download_info_dict, smu_loader
def get_download_info_dict(smu_list): download_info_dict = {} platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: return download_info_dict, None # Load the SMU information smu_loader = SMUInfoLoader(platform, release) for smu_name in smu_list: lookup_name = get_smu_lookup_name(smu_name) smu_info = smu_loader.get_smu_info(lookup_name) if smu_info is not None: # Return back the same name (i.e. smu_name) download_info_dict[smu_name] = smu_info.cco_filename else: download_info_dict[smu_name] = None return download_info_dict, smu_loader
def write_software_profile_info(self): self.ws.write(self.row, 0, 'Software Profile: ' + self.conformance_report.software_profile, XLSWriter.style_bold) self.row += 2 software_profile_packages = self.conformance_report.software_profile_packages.split(',') smu_loader = None platform, release = get_platform_and_release(software_profile_packages) if platform != UNKNOWN and release != UNKNOWN: smu_loader = SMUInfoLoader(platform, release) for software_profile_package in software_profile_packages: self.ws.write(self.row, 0, software_profile_package) if smu_loader is not None and smu_loader.is_valid: smu_info = smu_loader.get_smu_info(software_profile_package.replace('.' + smu_loader.file_suffix,'')) if smu_info is not None: self.ws.write(self.row, 1, smu_info.description) self.row += 1 self.row += 1
def api_get_cco_software_entry(request, name_or_id): """ http://localhost:5000/api/v1/cco/software/AA09694?platform=asr9k_px&release=5.3.3 name_or_id can be the PIMS ID (e.g., AA09694) or the software name (asr9k-p-4.2.3.CSCut30136) """ validate_url_parameters(request, ['platform', 'release']) platform = request.args.get('platform') release = request.args.get('release') smu_loader = SMUInfoLoader(platform, release) if smu_loader.is_valid: smu_info = smu_loader.get_smu_info(name_or_id) if smu_info: return jsonify(**{RESPONSE_ENVELOPE: get_smu_info(smu_info)}) else: # Now search for the ID instead of name smu_info = smu_loader.get_smu_info_by_id(name_or_id) if smu_info: return jsonify(**{RESPONSE_ENVELOPE: get_smu_info(smu_info)}) return failed_response('Unable to locate {}'.format(name_or_id), return_code=HTTP_NOT_FOUND)
def api_get_cco_software_entry(request, name_or_id): """ http://localhost:5000/api/v1/cco/software/AA09694?platform=asr9k_px&release=5.3.3 name_or_id can be the PIMS ID (e.g., AA09694) or the software name (asr9k-p-4.2.3.CSCut30136) """ validate_url_parameters(request, ['platform', 'release']) platform = request.args.get('platform') release = request.args.get('release') smu_loader = SMUInfoLoader(platform, release) if smu_loader.is_valid: smu_info = smu_loader.get_smu_info(name_or_id) if smu_info: return jsonify(**{RESPONSE_ENVELOPE: get_smu_info(smu_info)}) else: # Now search for the ID instead of name smu_info = smu_loader.get_smu_info_by_id(name_or_id) if smu_info: return jsonify(**{RESPONSE_ENVELOPE: get_smu_info(smu_info)}) return failed_response('Unable to locate {}'.format(name_or_id), return_code=HTTP_NOT_FOUND)
def get_download_info_dict(smu_list): """ Given a SMU list, return a dictionary which contains key: smu name in smu_list value: cco filename (can be None if smu_name is not in the XML file) """ download_info_dict = {} platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: return download_info_dict, None # Load the SMU information smu_loader = SMUInfoLoader(platform, release) for smu_name in smu_list: lookup_name = get_smu_lookup_name(smu_name) smu_info = smu_loader.get_smu_info(lookup_name) if smu_info is not None: # Return back the same name (i.e. smu_name) download_info_dict[smu_name] = smu_info.cco_filename else: download_info_dict[smu_name] = None return download_info_dict, smu_loader
def get_download_info_dict(smu_list): """ Given a SMU list, return a dictionary which contains key: smu name in smu_list value: cco filename (can be None if smu_name is not in the XML file) """ download_info_dict = {} platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: return download_info_dict, None # Load the SMU information smu_loader = SMUInfoLoader(platform, release) for smu_name in smu_list: lookup_name = get_smu_lookup_name(smu_name) smu_info = smu_loader.get_smu_info(lookup_name) if smu_info is not None: # Return back the same name (i.e. smu_name) download_info_dict[smu_name] = smu_info.cco_filename else: download_info_dict[smu_name] = None return download_info_dict, smu_loader
def api_get_conformance_report_software_profile_packages(id): rows = [] db_session = DBSession() conformance_report = get_conformance_report_by_id(db_session, id) if conformance_report is not None: software_profile_packages = conformance_report.software_profile_packages.split(',') smu_loader = None platform, release = get_platform_and_release(software_profile_packages) if platform != UNKNOWN and release != UNKNOWN: smu_loader = SMUInfoLoader(platform, release) for software_profile_package in software_profile_packages: description = '' if smu_loader is not None and smu_loader.is_valid: smu_info = smu_loader.get_smu_info(software_profile_package.replace('.' + smu_loader.file_suffix,'')) if smu_info is not None: description = smu_info.description rows.append({'software_profile_package': software_profile_package, 'description': description}) return jsonify(**{'data': rows})
def get_validated_list(smu_list): """ Returns the validated list given the SMU/SP list. A smu_list may contain packages, SMUs, SPs, or junk texts. """ unrecognized_list = [] package_list = [] result_list = [] # Identify the platform and release platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: for line in smu_list: result_list.append({'smu_entry': line, 'is': 'Unrecognized', 'description': ''}) return result_list # Load the SMU information smu_loader = SMUInfoLoader(platform, release) file_suffix = smu_loader.file_suffix smu_info_list= [] smu_name_set = set() for line in smu_list: smu_name = get_smu_lookup_name(line) smu_info = smu_loader.get_smu_info(smu_name) if smu_info is None: # Check if the entry is a package type if get_platform(smu_name) == UNKNOWN: unrecognized_list.append(smu_name) else: package_list.append(smu_name) continue if smu_name in smu_name_set: continue smu_name_set.add(smu_name) smu_info_list.append(smu_info) if len(smu_info_list) > 0: # Exclude all the superseded SMUs in smu_info_list excluded_supersede_list = get_excluded_supersede_list(smu_info_list) missing_required_prerequisite_dict = \ get_missing_required_prerequisites(smu_loader, excluded_supersede_list) missing_required_prerequisite_set = get_unique_set_from_dict(missing_required_prerequisite_dict) for pre_requisite_smu in missing_required_prerequisite_set: pre_requisite_smu_info = smu_loader.get_smu_info(pre_requisite_smu) description = pre_requisite_smu_info.description if pre_requisite_smu_info is not None else '' result_list.append({'smu_entry': pre_requisite_smu + '.' + file_suffix, 'is': 'Pre-requisite', 'description':description}) excluded_supersede_dict = get_dict_from_list(excluded_supersede_list) for smu_info in smu_info_list: if smu_info.name not in excluded_supersede_dict: result_list.append({'smu_entry': smu_info.name + '.' + file_suffix, 'is': 'Superseded', 'description': smu_info.description}) else: result_list.append({'smu_entry': smu_info.name + '.' + file_suffix, 'is': 'SMU/SP', 'description': smu_info.description}) if len(package_list) > 0: for entry in package_list: result_list.append({'smu_entry': entry, 'is': 'Package', 'description': ''}) if len(unrecognized_list) > 0: for entry in unrecognized_list: result_list.append({'smu_entry': entry, 'is': 'Unrecognized', 'description': ''}) return result_list
def get_validated_list(smu_list): """ Returns the validated list given the SMU/SP list. A smu_list may contain packages, SMUs, SPs, or junk texts. """ unrecognized_list = [] package_list = [] result_list = [] # Identify the platform and release platform, release = get_platform_and_release(smu_list) if platform == UNKNOWN or release == UNKNOWN: for line in smu_list: result_list.append({'smu_entry': line, 'is': 'Unrecognized'}) return result_list # Load the SMU information smu_loader = SMUInfoLoader(platform, release) file_suffix = smu_loader.file_suffix smu_info_list = [] smu_name_set = set() for line in smu_list: smu_name = get_smu_lookup_name(line) smu_info = smu_loader.get_smu_info(smu_name) if smu_info is None: # Check if the entry is a package type if get_platform(smu_name) == UNKNOWN: unrecognized_list.append(smu_name) else: package_list.append(smu_name) continue if smu_name in smu_name_set: continue smu_name_set.add(smu_name) smu_info_list.append(smu_info) if len(smu_info_list) > 0: # Exclude all the superseded SMUs in smu_info_list excluded_supersede_list = get_excluded_supersede_list(smu_info_list) missing_required_prerequisite_dict = \ get_missing_required_prerequisites(smu_loader, excluded_supersede_list) missing_required_prerequisite_set = get_unique_set_from_dict( missing_required_prerequisite_dict) for pre_requisite_smu in missing_required_prerequisite_set: pre_requisite_smu_info = smu_loader.get_smu_info(pre_requisite_smu) description = pre_requisite_smu_info.description if pre_requisite_smu_info is not None else '' result_list.append({ 'smu_entry': pre_requisite_smu + '.' + file_suffix, 'is': 'Pre-requisite', 'description': description }) excluded_supersede_dict = get_dict_from_list(excluded_supersede_list) for smu_info in smu_info_list: if smu_info.name not in excluded_supersede_dict: result_list.append({ 'smu_entry': smu_info.name + '.' + file_suffix, 'is': 'Superseded', 'description': smu_info.description }) else: result_list.append({ 'smu_entry': smu_info.name + '.' + file_suffix, 'is': 'SMU/SP', 'description': smu_info.description }) if len(package_list) > 0: for entry in package_list: result_list.append({ 'smu_entry': entry, 'is': 'Package', 'description': '' }) if len(unrecognized_list) > 0: for entry in unrecognized_list: result_list.append({ 'smu_entry': entry, 'is': 'Unrecognized', 'description': '' }) return result_list