def test_get_packages(self): self.configure_streams() packages = [] self.driver.get_packages( self.connection, gen_repository("test", url="http://host/centos/os/x86_64/"), packages.append) self.connection.open_stream.assert_any_call( "http://host/centos/os/x86_64/repodata/repomd.xml") self.connection.open_stream.assert_any_call( "http://host/centos/os/x86_64/repodata/groups.xml.gz") self.connection.open_stream.assert_any_call( "http://host/centos/os/x86_64/repodata/primary.xml.gz") self.assertEqual(2, len(packages)) package = packages[0] self.assertEqual("test1", package.name) self.assertEqual("1.1.1.1-1.el7", package.version) self.assertEqual(100, package.filesize) self.assertEqual( FileChecksum( None, None, 'e8ed9e0612e813491ed5e7c10502a39e' '43ec665afd1321541dea211202707a65'), package.checksum) self.assertEqual("Packages/test1.rpm", package.filename) self.assertItemsEqual(['test2 (= 0:1.1.1.1-1.el7)'], (str(x) for x in package.requires)) self.assertItemsEqual( ["file (any)", "/usr/bin/test1 (any)", "/usr/bin/test1-bin (any)"], (str(x) for x in package.provides)) self.assertItemsEqual(["test-old (any)"], (str(x) for x in package.obsoletes)) self.assertTrue(package.mandatory) self.assertFalse(packages[1].mandatory)
def load_package_from_file(self, repository, filepath): fullpath = utils.get_path_from_url(repository.url + filepath) _, size, checksum = next( iter( utils.get_size_and_checksum_for_files([fullpath], _checksum_collector))) pkg = createrepo.yumbased.YumLocalPackage(filename=fullpath) hdr = pkg.returnLocalHeader() return Package( repository=repository, name=hdr["name"], version=RpmPackageVersion(hdr['epoch'], hdr['version'], hdr['release']), filesize=int(hdr['size']), filename=filepath, checksum=FileChecksum(*checksum), mandatory=False, requires=self._parse_package_relations(pkg.requires), obsoletes=self._parse_package_relations(pkg.obsoletes), provides=self._get_provides_from_rpm(pkg), group=hdr["group"], )
def get_packages(self, connection, repository, consumer): index = self._get_url_of_metafile(repository, "Packages.gz") stream = GzipDecompress(connection.open_stream(index)) self.logger.info("loading packages from %s ...", repository) pkg_iter = deb822.Packages.iter_paragraphs(stream) counter = 0 for dpkg in pkg_iter: try: consumer( Package( repository=repository, name=dpkg["package"], version=Version(dpkg['version']), filesize=int(dpkg.get('size', -1)), filename=dpkg["filename"], checksum=FileChecksum( md5=dpkg.get("md5sum"), sha1=dpkg.get("sha1"), sha256=dpkg.get("sha256"), ), mandatory=self._is_mandatory(dpkg), # Recommends are installed by default (since Lucid) requires=self._get_relations(dpkg, "depends", "pre-depends", "recommends"), # The deb does not have obsoletes section obsoletes=[], provides=self._get_relations(dpkg, "provides"), group=dpkg.get("section"), )) except KeyError as e: self.logger.error("Malformed index %s - %s: %s", repository, six.text_type(dpkg), six.text_type(e)) raise counter += 1 self.logger.info("loaded: %d packages from %s.", counter, repository)
def load_package_from_file(self, repository, filename): filepath = utils.get_path_from_url(repository.url + filename) _, size, checksum = next( iter( utils.get_size_and_checksum_for_files([filepath], _checksum_collector))) with closing(debfile.DebFile(filepath)) as deb: debcontrol = deb822.Packages( deb.control.get_content(debfile.CONTROL_FILE)) return Package( repository=repository, name=debcontrol["package"], version=Version(debcontrol['version']), filesize=int(debcontrol.get('size', size)), filename=filename, checksum=FileChecksum(*checksum), mandatory=self._is_mandatory(debcontrol), requires=self._get_relations(debcontrol, "depends", "pre-depends", "recommends"), provides=self._get_relations(debcontrol, "provides"), obsoletes=[], group=debcontrol.get('section'), )
def _get_checksum(self, pkg_tag): """Gets checksum from package tag.""" checksum = dict.fromkeys(("md5", "sha1", "sha256"), None) checksum_tag = pkg_tag.find("./main:checksum", _NAMESPACES) checksum[checksum_tag.attrib["type"]] = checksum_tag.text return FileChecksum(**checksum)