예제 #1
0
def parse(location):
    """
    Return an RpmPackage object for the file at location or None if the file is
    not an RPM.
    """
    infos = info(location, include_desc=True)
    logger_debug('parse: infos', infos)
    if not infos:
        return

    epoch = int(infos.epoch) if infos.epoch else None

    asserted_licenses = []
    if infos.license:
        asserted_licenses = [models.AssertedLicense(license=infos.license)]

    related_packages = []
    if infos.source_rpm:
        epoch, name, version, release, _arch = nevra.from_name(infos.source_rpm)
        evr = EVR(version, release, epoch)
        related_packages = [
            RPMRelatedPackage(name=name, version=evr, payload_type=models.payload_src)]

    package = RpmPackage(
        summary=infos.summary,
        description=infos.description,
        name=infos.name,
        version=EVR(version=infos.version, release=infos.release, epoch=epoch or None),
        homepage_url=infos.url,
        distributors=[models.Party(name=infos.distribution)],
        vendors=[models.Party(name=infos.vendor)],
        asserted_licenses=asserted_licenses,
        related_packages=related_packages
    )
    return package
예제 #2
0
def parse(location):
    """
    Return an RpmPackage object for the file at location or None if the file is
    not an RPM.
    """
    infos = info(location, include_desc=True)
    logger_debug('parse: infos', infos)
    if not infos:
        return

    epoch = int(infos.epoch) if infos.epoch else None

    asserted_licenses = []
    if infos.license:
        asserted_licenses = [models.AssertedLicense(license=infos.license)]

    related_packages = []
    if infos.source_rpm:
        epoch, name, version, release, _arch = nevra.from_name(
            infos.source_rpm)
        evr = EVR(version, release, epoch)
        related_packages = [
            RPMRelatedPackage(name=name,
                              version=evr,
                              payload_type=models.payload_src)
        ]

    package = RpmPackage(summary=infos.summary,
                         description=infos.description,
                         name=infos.name,
                         version=EVR(version=infos.version,
                                     release=infos.release,
                                     epoch=epoch or None),
                         homepage_url=infos.url,
                         distributors=[models.Party(name=infos.distribution)],
                         vendors=[models.Party(name=infos.vendor)],
                         asserted_licenses=asserted_licenses,
                         related_packages=related_packages)
    return package
예제 #3
0
 def test_rpm_details_imagemagickcpp(self):
     expected7 = (None, 'ImageMagick-c++', '5.5.6', '15', 'i386')
     output7 = nevra.from_name('ImageMagick-c++-5.5.6-15.i386.rpm')
     assert expected7 == output7
예제 #4
0
 def test_rpm_details_2048(self):
     expected5 = (None, '2048-cli', '0.9', '4.git20141214.723738c.el6',
                  'src')
     output5 = nevra.from_name('2048-cli-0.9-4.git20141214.723738c.el6.src')
     assert expected5 == output5
예제 #5
0
 def test_rpm_details_barebones(self):
     expected6 = (None, 'BareBonesBrowserLaunch', '3.1', '1.el6', 'src')
     output6 = nevra.from_name('BareBonesBrowserLaunch-3.1-1.el6.src')
     assert expected6 == output6
예제 #6
0
 def test_rpm_details_flash_player(self):
     expected3 = (None, 'flash-player', '11.0.1.152', '2.1.1', 'nosrc')
     output3 = nevra.from_name('flash-player-11.0.1.152-2.1.1.nosrc')
     assert expected3 == output3
예제 #7
0
 def test_rpm_details_firmware(self):
     expected4 = (None, 'FirmwareUpdateKit', '1.6', '6.1.2', 'src')
     output4 = nevra.from_name('FirmwareUpdateKit-1.6-6.1.2.src')
     assert expected4 == output4
예제 #8
0
 def test_rpm_details_imagemagick(self):
     expected2 = (None, 'ImageMagick-c++-devel', '6.0.7.1', '14', 'sparc')
     output2 = nevra.from_name('ImageMagick-c++-devel-6.0.7.1-14.sparc')
     assert expected2 == output2
예제 #9
0
 def test_rpm_details_imagemagick(self):
     expected2 = (None, 'ImageMagick-c++-devel', '6.0.7.1', '14', 'sparc')
     output2 = nevra.from_name('ImageMagick-c++-devel-6.0.7.1-14.sparc')
     assert expected2 == output2
예제 #10
0
 def test_rpm_details_xfree(self):
     expected8 = (None, 'XFree86-ISO8859-9-75dpi-fonts', '4.3.0', '97.EL', 'x86_64')
     output8 = nevra.from_name('XFree86-ISO8859-9-75dpi-fonts-4.3.0-97.EL.x86_64.rpm')
     assert expected8 == output8
예제 #11
0
def parse(location):
    """
    Return an RpmPackage object for the file at location or None if
    the file is not an RPM.
    """
    tags = get_rpm_tags(location, include_desc=True)
    if TRACE: logger_debug('parse: tags', tags)
    if not tags:
        return

    name = tags.name

    try:
        epoch = tags.epoch and int(tags.epoch) or None
    except ValueError:
        epoch = None

    evr = EVR(version=tags.version or None,
              release=tags.release or None,
              epoch=epoch).to_string()

    qualifiers = {}
    os = tags.os
    if os and os.lower() != 'linux':
        qualifiers['os'] = os

    arch = tags.arch
    if arch:
        qualifiers['arch'] = arch

    source_packages = []
    if tags.source_rpm:
        src_epoch, src_name, src_version, src_release, src_arch = nevra.from_name(
            tags.source_rpm)
        src_evr = EVR(src_version, src_release, src_epoch).to_string()
        src_qualifiers = {}
        if src_arch:
            src_qualifiers['arch'] = src_arch

        src_purl = models.PackageURL(type=RpmPackage.default_type,
                                     name=src_name,
                                     version=src_evr,
                                     qualifiers=src_qualifiers).to_string()

        if TRACE: logger_debug('parse: source_rpm', src_purl)
        source_packages = [src_purl]

    parties = []
    if tags.distribution:
        parties.append(models.Party(name=tags.distribution,
                                    role='distributor'))
    if tags.vendor:
        parties.append(models.Party(name=tags.vendor, role='vendor'))

    description = build_description(tags.summary, tags.description)

    if TRACE:
        data = dict(name=name,
                    version=evr,
                    description=description or None,
                    homepage_url=tags.url or None,
                    parties=parties,
                    declared_license=tags.license or None,
                    source_packages=source_packages)
        logger_debug('parse: data to create a package:\n', data)

    package = RpmPackage(name=name,
                         version=evr,
                         description=description or None,
                         homepage_url=tags.url or None,
                         parties=parties,
                         declared_license=tags.license or None,
                         source_packages=source_packages)
    if TRACE:
        logger_debug('parse: created package:\n', package)

    return package
예제 #12
0
 def test_rpm_details_barebones(self):
     expected6 = (None, 'BareBonesBrowserLaunch', '3.1', '1.el6', 'src')
     output6 = nevra.from_name('BareBonesBrowserLaunch-3.1-1.el6.src')
     assert expected6 == output6
예제 #13
0
 def test_rpm_details_imagemagickcpp(self):
     expected7 = (None, 'ImageMagick-c++', '5.5.6', '15', 'i386')
     output7 = nevra.from_name('ImageMagick-c++-5.5.6-15.i386.rpm')
     assert expected7 == output7
예제 #14
0
 def test_rpm_details_2048(self):
     expected5 = (None, '2048-cli', '0.9', '4.git20141214.723738c.el6', 'src')
     output5 = nevra.from_name('2048-cli-0.9-4.git20141214.723738c.el6.src')
     assert expected5 == output5
예제 #15
0
 def test_rpm_details_firmware(self):
     expected4 = (None, 'FirmwareUpdateKit', '1.6', '6.1.2', 'src')
     output4 = nevra.from_name('FirmwareUpdateKit-1.6-6.1.2.src')
     assert expected4 == output4
예제 #16
0
 def test_rpm_details_flash_player(self):
     expected3 = (None, 'flash-player', '11.0.1.152', '2.1.1', 'nosrc')
     output3 = nevra.from_name('flash-player-11.0.1.152-2.1.1.nosrc')
     assert expected3 == output3
예제 #17
0
 def test_rpm_details_xfree(self):
     expected8 = (None, 'XFree86-ISO8859-9-75dpi-fonts', '4.3.0', '97.EL',
                  'x86_64')
     output8 = nevra.from_name(
         'XFree86-ISO8859-9-75dpi-fonts-4.3.0-97.EL.x86_64.rpm')
     assert expected8 == output8
예제 #18
0
 def test_rpm_details_cups(self):
     expected1 = (None, 'cups', '1.1.17', '13.3.29', 'src')
     output1 = nevra.from_name('cups-1.1.17-13.3.29.src')
     assert expected1 == output1
예제 #19
0
    def parse(cls, location):
        rpm_tags = get_rpm_tags(location, include_desc=True)

        if TRACE: logger_debug('recognize: rpm_tags', rpm_tags)
        if not rpm_tags:
            return

        name = rpm_tags.name

        try:
            epoch = rpm_tags.epoch and int(rpm_tags.epoch) or None
        except ValueError:
            epoch = None

        evr = EVR(
            version=rpm_tags.version or None,
            release=rpm_tags.release or None,
            epoch=epoch).to_string()

        qualifiers = {}
        os = rpm_tags.os
        if os and os.lower() != 'linux':
            qualifiers['os'] = os

        arch = rpm_tags.arch
        if arch:
            qualifiers['arch'] = arch

        source_packages = []
        if rpm_tags.source_rpm:
            sepoch, sname, sversion, srel, sarch = nevra.from_name(rpm_tags.source_rpm)
            src_evr = EVR(sversion, srel, sepoch).to_string()
            src_qualifiers = {}
            if sarch:
                src_qualifiers['arch'] = sarch

            src_purl = models.PackageURL(
                type=cls.default_package_type,
                # TODO: namespace=cls.default_package_namespace,
                name=sname,
                version=src_evr,
                qualifiers=src_qualifiers
            ).to_string()

            if TRACE: logger_debug('recognize: source_rpm', src_purl)
            source_packages = [src_purl]

        parties = []

        # TODO: also use me to craft a namespace!!!
        # TODO: assign a namespace to Package URL based on distro names.
        # CentOS
        # Fedora Project
        # OpenMandriva Lx
        # openSUSE Tumbleweed
        # Red Hat

        if rpm_tags.distribution:
            parties.append(models.Party(name=rpm_tags.distribution, role='distributor'))

        if rpm_tags.vendor:
            parties.append(models.Party(name=rpm_tags.vendor, role='vendor'))

        description = build_description(summary=rpm_tags.summary, description=rpm_tags.description)

        if TRACE:
            data = dict(
                name=name,
                version=evr,
                description=description or None,
                homepage_url=rpm_tags.url or None,
                parties=parties,
                declared_license=rpm_tags.license or None,
                source_packages=source_packages,
            )
            logger_debug('recognize: data to create a package:\n', data)

        package = models.PackageData(
            datasource_id=cls.datasource_id,
            type=cls.default_package_type,
            # TODO: namespace=cls.default_package_namespace,
            name=name,
            version=evr,
            description=description or None,
            homepage_url=rpm_tags.url or None,
            parties=parties,
            declared_license=rpm_tags.license or None,
            source_packages=source_packages,
        )

        if TRACE:
            logger_debug('recognize: created package:\n', package)

        yield package
예제 #20
0
 def test_rpm_details_cups(self):
     expected1 = (None, 'cups', '1.1.17', '13.3.29', 'src')
     output1 = nevra.from_name('cups-1.1.17-13.3.29.src')
     assert expected1 == output1