Blame SOURCES/ansible-generator

rdobuilder 6b0be9
#!/usr/bin/python3
rdobuilder 6b0be9
rdobuilder 6b0be9
# Copyright (C) 2020 Igor Raits <ignatenkobrain@fedoraproject.org>.
rdobuilder 6b0be9
#
rdobuilder 6b0be9
# Fedora-License-Identifier: GPLv3+
rdobuilder 6b0be9
# SPDX-2.0-License-Identifier: GPL-3.0+
rdobuilder 6b0be9
# SPDX-3.0-License-Identifier: GPL-3.0-or-later
rdobuilder 6b0be9
#
rdobuilder 6b0be9
# This program is free software.
rdobuilder 6b0be9
# For more information on the license, see COPYING.
rdobuilder 6b0be9
# For more information on free software, see
rdobuilder 6b0be9
# <https://www.gnu.org/philosophy/free-sw.en.html>.
rdobuilder 6b0be9
rdobuilder 6b0be9
import argparse
rdobuilder 6b0be9
import json
rdobuilder 6b0be9
import re
rdobuilder 6b0be9
import sys
rdobuilder 6b0be9
rdobuilder 6b0be9
rdobuilder 6b0be9
def main():
rdobuilder 6b0be9
    parser = argparse.ArgumentParser()
rdobuilder 6b0be9
    group = parser.add_mutually_exclusive_group(required=True)
rdobuilder 6b0be9
    group.add_argument(
rdobuilder 6b0be9
        "-P", "--provides", action="store_const", const="provides", dest="action"
rdobuilder 6b0be9
    )
rdobuilder 6b0be9
    group.add_argument(
rdobuilder 6b0be9
        "-R", "--requires", action="store_const", const="requires", dest="action"
rdobuilder 6b0be9
    )
rdobuilder 6b0be9
    args = parser.parse_args()
rdobuilder 6b0be9
rdobuilder 6b0be9
    files = sys.stdin.read().splitlines()
rdobuilder 6b0be9
rdobuilder 6b0be9
    for f in files:
rdobuilder 6b0be9
        with open(f, "r") as fobj:
rdobuilder 6b0be9
            info = json.load(fobj)["collection_info"]
rdobuilder 6b0be9
            if args.action == "provides":
rdobuilder 6b0be9
                print(
rdobuilder 6b0be9
                    f"ansible-collection({info['namespace']}.{info['name']}) = {info['version']}"
rdobuilder 6b0be9
                )
rdobuilder 6b0be9
            if args.action == "requires":
rdobuilder 6b0be9
                # Require either ansible-core or a version of ansible 2.9 that
rdobuilder 6b0be9
                # supports collections but prefer ansible-core.
rdobuilder 6b0be9
                print("(ansible-core or (ansible < 2.10.0 with ansible >= 2.9.10))")
rdobuilder 6b0be9
                for dep, req in info.get("dependencies", {}).items():
rdobuilder 6b0be9
                    print(f"ansible-collection({dep})", end="")
rdobuilder 6b0be9
                    if req == "*":
rdobuilder 6b0be9
                        print()
rdobuilder 6b0be9
                        continue
rdobuilder 6b0be9
                    m = re.match(r"^>=(\d+\.\d+\.\d+)$", req)
rdobuilder 6b0be9
                    if m:
rdobuilder 6b0be9
                        print(f" >= {m.group(1)}")
rdobuilder 6b0be9
                        continue
rdobuilder 6b0be9
                    raise NotImplementedError(
rdobuilder 6b0be9
                        "Generation of dependencies different than '*' or '>=' is not supported yet"
rdobuilder 6b0be9
                    )
rdobuilder 6b0be9
rdobuilder 6b0be9
rdobuilder 6b0be9
if __name__ == "__main__":
rdobuilder 6b0be9
    main()