Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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})
Beispiel #6
0
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})
Beispiel #7
0
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})
Beispiel #8
0
    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
Beispiel #9
0
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})
Beispiel #10
0
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})
Beispiel #11
0
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)
Beispiel #12
0
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
Beispiel #13
0
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)
Beispiel #14
0
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
Beispiel #15
0
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
Beispiel #16
0
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
Beispiel #18
0
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)
Beispiel #19
0
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)
Beispiel #20
0
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
Beispiel #21
0
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
Beispiel #22
0
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})
Beispiel #23
0
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
Beispiel #24
0
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