From a3e8bb474a8d544c159b9c53a68f8b9eb83a4053 Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Sat, 18 Feb 2023 12:50:42 +0100 Subject: [PATCH] ModuleUpdater: allow new syntax, nicer output --- ModuleUpdate.py | 24 ++++++++++++++++++++---- worlds/zillion/requirements.txt | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/ModuleUpdate.py b/ModuleUpdate.py index 2b6aed1f..a8258ce1 100644 --- a/ModuleUpdate.py +++ b/ModuleUpdate.py @@ -2,6 +2,7 @@ import os import sys import subprocess import pkg_resources +import warnings local_dir = os.path.dirname(__file__) requirements_files = {os.path.join(local_dir, 'requirements.txt')} @@ -39,6 +40,8 @@ def update(yes=False, force=False): path = os.path.join(os.path.dirname(__file__), req_file) with open(path) as requirementsfile: for line in requirementsfile: + if not line or line[0] == "#": + continue # ignore comments if line.startswith(("https://", "git+https://")): # extract name and version for url rest = line.split('/')[-1] @@ -46,8 +49,10 @@ def update(yes=False, force=False): if "#egg=" in rest: # from egg info rest, egg = rest.split("#egg=", 1) - egg = egg.split(";", 1)[0] + egg = egg.split(";", 1)[0].rstrip() if any(compare in egg for compare in ("==", ">=", ">", "<", "<=", "!=")): + warnings.warn(f"Specifying version as #egg={egg} will become unavailable in pip 25.0. " + "Use name @ url#version instead.", DeprecationWarning) line = egg else: egg = "" @@ -58,16 +63,27 @@ def update(yes=False, force=False): rest = rest.replace(".zip", "-").replace(".tar.gz", "-") name, version, _ = rest.split("-", 2) line = f'{egg or name}=={version}' + elif "@" in line and "#" in line: + # PEP 508 does not allow us to specify a version, so we use custom syntax + # name @ url#version ; marker + name, rest = line.split("@", 1) + version = rest.split("#", 1)[1].split(";", 1)[0].rstrip() + line = f"{name.rstrip()}=={version}" + if ";" in rest: # keep marker + line += rest[rest.find(";"):] requirements = pkg_resources.parse_requirements(line) - for requirement in requirements: - requirement = str(requirement) + for requirement in map(str, requirements): try: pkg_resources.require(requirement) except pkg_resources.ResolutionError: if not yes: import traceback traceback.print_exc() - input(f'Requirement {requirement} is not satisfied, press enter to install it') + try: + input(f"\nRequirement {requirement} is not satisfied, press enter to install it") + except KeyboardInterrupt: + print("\nAborting") + sys.exit(1) update_command() return diff --git a/worlds/zillion/requirements.txt b/worlds/zillion/requirements.txt index e92bea19..626579ab 100644 --- a/worlds/zillion/requirements.txt +++ b/worlds/zillion/requirements.txt @@ -1 +1 @@ -git+https://github.com/beauxq/zilliandomizer@cd6a940ad7b585c75a560b91468d6b9eee030559#egg=zilliandomizer==0.5.2 +zilliandomizer @ git+https://github.com/beauxq/zilliandomizer@cd6a940ad7b585c75a560b91468d6b9eee030559#0.5.2