#! /usr/bin/python # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2022 Marcel Telka # # # Usage: # python-requires PACKAGE [EXTRA] # # Print requirements for PACKAGE. Evaluated and normalized. # If PACKAGE is - evaluate and normalize stdin. # With optional EXTRA argument passed print requirements for such extra only. # import sys import re try: from importlib.metadata import requires from packaging.requirements import Requirement import subprocess except: exit() if len(sys.argv) < 2: exit() e = {'extra': sys.argv[2]} if len(sys.argv) > 2 else None reqs = requires(sys.argv[1]) if sys.argv[1] != "-" else sys.stdin.readlines() try: for req in reqs: try: r = Requirement(re.sub(r"#.*", "", req)) except: continue m = r.marker if (not m and not e) or (m and m.evaluate(e) and (not e or not m.evaluate())): print(re.sub(r"[-_.]+", "-", r.name).lower()) for extra in r.extras: subprocess.run([sys.argv[0], r.name, extra]) except: pass