def __init__(self, distribution, packages): """The graph can be built from all packages or from selected. The decision is up to user of the class. :param distribution: OS distribution :type distribution: string :param packages: list of packages in question :type packages: [string] """ # TODO(jchaloup): # - inject the product together with buildsystem client self.product = "Fedora" self.distribution = distribution self.packages = packages # TODO(jchaloup): # - inject the client so the class can be used with Brew and CentOS as well self.client = FakeKojiClient() # TODO(jchaloup): # - inject the act and replace it with datasource instead # so the artefact/data can be picked from more sources self.act = ActFactory().bake("scan-distribution-build")
from gofed_lib.pkgdb.client import FakePkgDBClient from gofed_lib.kojiclient import FakeKojiClient, KojiClient if __name__ == "__main__": s1 = DistributionSnapshot().load("/home/jchaloup/Projects/gofed/infra/snapshot1.json") s2 = DistributionSnapshot().load("/home/jchaloup/Projects/gofed/infra/snapshot2.json") data = s2.compare(s1) print data["new_rpms"] exit(1) snapshot = DistributionSnapshot("rawhide", "1.5") client = FakePkgDBClient() kojiclient = FakeKojiClient() packages = client.getGolangPackages() for package in packages: try: data = kojiclient.getLatestRPMS("rawhide", package) except KeyError as e: print e continue snapshot.setRpms(package, data["rpms"]) print json.dumps(snapshot.json()) exit(1) file = "/home/jchaloup/Packages/etcd/fedora/etcd/etcd-5e6eb7e19d6385adfabb1f1caea03e732f9348ad/Godeps/Godeps.json"
class DistributionLatestBuildGraphDataset: def __init__(self, distribution, packages): """The graph can be built from all packages or from selected. The decision is up to user of the class. :param distribution: OS distribution :type distribution: string :param packages: list of packages in question :type packages: [string] """ # TODO(jchaloup): # - inject the product together with buildsystem client self.product = "Fedora" self.distribution = distribution self.packages = packages # TODO(jchaloup): # - inject the client so the class can be used with Brew and CentOS as well self.client = FakeKojiClient() # TODO(jchaloup): # - inject the act and replace it with datasource instead # so the artefact/data can be picked from more sources self.act = ActFactory().bake("scan-distribution-build") def build(self): """Build dataset for a given list of buildes """ # TODO(jchaloup): specify json schema for a dataset # get a list of latest rpms for selected packages counter = 0 builder = DatasetBuilder() for pkg in self.packages: if pkg in [ "golang-github-aws-aws-sdk-go", "golang-googlecode-google-api-go-client", "golang-googlecode-google-api-client", ]: continue try: data = self.client.getLatestRPMS("rawhide", pkg) except ValueError as e: logging.error("ValueError: %s" % e) continue except KeyError as e: logging.error("KeyError: %s" % e) continue rpms = [] for rpm in data["rpms"]: rpm_name = Rpm(data["name"], rpm["name"]).name() # if not rpm_name.endswith("devel"): # and not rpm["name"].endswith("unit-test"): # continue rpms.append({"name": rpm["name"]}) # get artefact data = { "product": self.product, "distribution": self.distribution, "build": {"name": data["name"], "rpms": rpms}, } try: artefacts = self.act.call(data) except FunctionFailedError as e: logging.error(e) continue for rpm in artefacts["packages"]: builder.addArtefact(artefacts["packages"][rpm], rpm) # if counter == 40: # break # counter = counter + 1 return builder.build().dataset()