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
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
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
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
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
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
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
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
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
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
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
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
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