コード例 #1
0
    def parsed_sections(self):
        """
        Treeinfo parsed data.

        """
        parser = SortedConfigParser()
        self.serialize(parser)

        general = self.original_parser._sections.get("general")
        build_timestamp = ""

        if general:
            if "general" not in parser._sections:
                parser._sections["general"] = general

            if "." in str(general.get("timestamp")):
                build_timestamp = float(general["timestamp"])

        tree = self.original_parser._sections.get("tree", {})

        if "." in str(tree.get("build_timestamp")):
            build_timestamp = float(tree.get["build_timestamp"])

        if build_timestamp and parser._sections.get("general",
                                                    {}).get("timestamp"):
            parser._sections["general"]["timestamp"] = build_timestamp

        if build_timestamp and parser._sections.get("tree",
                                                    {}).get("build_timestamp"):
            parser._sections["tree"]["build_timestamp"] = build_timestamp

        return parser._sections
コード例 #2
0
def get_kickstart_data(remote):
    """
    Get Kickstart data from remote.

    """
    kickstart = {}
    remote_url = remote.url if remote.url[-1] == "/" else f"{remote.url}/"
    namespaces = [".treeinfo", "treeinfo"]
    for namespace in namespaces:
        downloader = remote.get_downloader(url=urljoin(remote_url, namespace))

        try:
            result = downloader.fetch()
        except ClientResponseError as exc:
            if 404 == exc.status:
                continue
            raise

        parser = SortedConfigParser()
        with open(result.path, "r") as treeinfo:
            parser.read_file(treeinfo)
        treeinfo_parsed = parser._sections
        sha256 = result.artifact_attributes["sha256"]
        kickstart = KickstartData(treeinfo_parsed).to_dict(hash=sha256)
        break

    return kickstart
コード例 #3
0
    def parsed_sections(self):
        """
        Treeinfo parsed data.

        """
        parser = SortedConfigParser()
        self.serialize(parser)

        if "general" in self.original_parser._sections:
            if "general" not in parser._sections:
                parser._sections["general"] = self.original_parser._sections[
                    "general"]

        return parser._sections
コード例 #4
0
def get_kickstart_data(remote):
    """
    Get Kickstart data from remote.

    """
    kickstart = {}
    namespaces = [".treeinfo", "treeinfo"]
    for namespace in namespaces:
        downloader = remote.get_downloader(url=urljoin(remote.url, namespace))

        try:
            result = downloader.fetch()
        except ClientResponseError as exc:
            if 404 == exc.status:
                continue
            raise

        kickstart = TreeInfo()
        kickstart.load(f=result.path)
        parser = SortedConfigParser()
        kickstart.serialize(parser)
        kickstart_parsed = parser._sections
        sha256 = result.artifact_attributes["sha256"]
        kickstart = KickstartData(kickstart_parsed).to_dict(hash=sha256)
        break

    return kickstart
コード例 #5
0
ファイル: treeinfo.py プロジェクト: pulp/pulp_rpm
    def parsed_sections(self):
        """
        Treeinfo parsed data.

        """
        parser = SortedConfigParser()
        self.serialize(parser)

        general = self.original_parser._sections.get("general")
        build_timestamp = ""

        if general:
            if "general" not in parser._sections:
                parser._sections["general"] = general

            if general.get("timestamp"):
                build_timestamp = float(general["timestamp"])

        tree = self.original_parser._sections.get("tree", {})

        if tree.get("build_timestamp"):
            build_timestamp = float(tree.get("build_timestamp"))

        if build_timestamp and parser._sections.get("general", {}).get("timestamp"):
            parser._sections["general"]["timestamp"] = build_timestamp

        if build_timestamp and parser._sections.get("tree", {}).get("build_timestamp"):
            parser._sections["tree"]["build_timestamp"] = build_timestamp

        release = self.original_parser._sections.get("release", {})

        if "is_layered" in release:
            parser._sections["release"]["is_layered"] = json.loads(release["is_layered"])

        return parser._sections
コード例 #6
0
def create_treeinfo(distribution_tree):
    """
    Create treeinfo file.

    Args:
        distirbution_tree(app.models.DistributionTree): a distirbution_tree object

    Returns:
        f(File): treeinfo file.

    """
    parser = SortedConfigParser()
    treeinfo = {}

    treeinfo["header"] = {
        "type": "productmd.treeinfo",
        "version": distribution_tree.header_version,
    }

    treeinfo["release"] = {
        "name": distribution_tree.release_name,
        "short": distribution_tree.release_short,
        "version": distribution_tree.release_version,
        "is_layered": distribution_tree.release_is_layered,
    }

    if distribution_tree.base_product_name:
        treeinfo["base_product"] = {
            "name": distribution_tree.base_product_name,
            "short": distribution_tree.base_product_short,
            "version": distribution_tree.base_product_version,
        }

    treeinfo["tree"] = {
        "arch": distribution_tree.arch,
        "build_timestamp": distribution_tree.build_timestamp,
    }

    stage2 = {}
    media = {}

    if distribution_tree.instimage:
        stage2.update({"instimage": distribution_tree.instimage})

    if distribution_tree.mainimage:
        stage2.update({"mainimage": distribution_tree.mainimage})

    if stage2:
        treeinfo["stage2"] = stage2

    if distribution_tree.discnum:
        media.update({"discnum": distribution_tree.discnum})

    if distribution_tree.totaldiscs:
        media.update({"totaldiscs": distribution_tree.totaldiscs})

    if media:
        treeinfo["media"] = media

    checksums = {}
    for checksum in distribution_tree.checksums.all():
        checksums.update({checksum.path: checksum.checksum})

    if checksums:
        treeinfo["checksums"] = checksums

    tree_platforms = set()
    for image in distribution_tree.images.all():
        platforms = image.platforms.split(",")
        tree_platforms.update(platforms)

        for platform in platforms:
            current = treeinfo.get(f"images-{platform}", {})
            current.update({image.name: image.path})
            treeinfo[f"images-{platform}"] = current

    treeinfo["tree"].update({"platforms": ",".join(tree_platforms)})

    for addon in distribution_tree.addons.all():
        treeinfo[f"addon-{addon.uid}"] = {
            "id": addon.addon_id,
            "uid": addon.uid,
            "name": addon.name,
            "type": addon.type,
            "packages": addon.packages,
            "repository": addon.addon_id,
        }
    variants = []
    nullables = [
        "source_packages", "source_repository", "debug_packages",
        "debug_repository", "identity"
    ]
    for variant in distribution_tree.variants.all():
        variants.append(variant.uid)
        treeinfo[f"variant-{variant.uid}"] = {
            "id": variant.variant_id,
            "uid": variant.uid,
            "name": variant.name,
            "type": variant.type,
            "packages": variant.packages,
            "repository": variant.variant_id,
        }

        for nullable in nullables:
            if getattr(variant, nullable):
                treeinfo[f"variant-{variant.uid}"].update(
                    {nullable: getattr(variant, nullable)})

    treeinfo["tree"].update({"variants": ", ".join(variants)})

    variants = sorted(variants)
    first_variant = treeinfo[f"variant-{variants[0]}"] if variants else {
        "packages": ".",
        "uid": ""
    }
    first_variant["repository"] = "."
    treeinfo["general"] = {
        "family": treeinfo["release"]["name"],
        "version": treeinfo["release"]["version"],
        "name":
        f"{treeinfo['release']['name']} {treeinfo['release']['version']}",
        "arch": treeinfo["tree"]["arch"],
        "platforms": treeinfo["tree"]["platforms"],
        "packagedir": first_variant["packages"],
        "repository": first_variant["repository"],
        "timestamp": treeinfo["tree"]["build_timestamp"],
        "variant": first_variant["uid"],
    }

    parser.read_dict(treeinfo)

    with open(".treeinfo", "w") as f:
        parser.write(f)

    return f