ModuleUpdater: allow new syntax, nicer output
This commit is contained in:
parent
e4c95c940a
commit
a3e8bb474a
|
@ -2,6 +2,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
|
import warnings
|
||||||
|
|
||||||
local_dir = os.path.dirname(__file__)
|
local_dir = os.path.dirname(__file__)
|
||||||
requirements_files = {os.path.join(local_dir, 'requirements.txt')}
|
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)
|
path = os.path.join(os.path.dirname(__file__), req_file)
|
||||||
with open(path) as requirementsfile:
|
with open(path) as requirementsfile:
|
||||||
for line in requirementsfile:
|
for line in requirementsfile:
|
||||||
|
if not line or line[0] == "#":
|
||||||
|
continue # ignore comments
|
||||||
if line.startswith(("https://", "git+https://")):
|
if line.startswith(("https://", "git+https://")):
|
||||||
# extract name and version for url
|
# extract name and version for url
|
||||||
rest = line.split('/')[-1]
|
rest = line.split('/')[-1]
|
||||||
|
@ -46,8 +49,10 @@ def update(yes=False, force=False):
|
||||||
if "#egg=" in rest:
|
if "#egg=" in rest:
|
||||||
# from egg info
|
# from egg info
|
||||||
rest, egg = rest.split("#egg=", 1)
|
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 ("==", ">=", ">", "<", "<=", "!=")):
|
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
|
line = egg
|
||||||
else:
|
else:
|
||||||
egg = ""
|
egg = ""
|
||||||
|
@ -58,16 +63,27 @@ def update(yes=False, force=False):
|
||||||
rest = rest.replace(".zip", "-").replace(".tar.gz", "-")
|
rest = rest.replace(".zip", "-").replace(".tar.gz", "-")
|
||||||
name, version, _ = rest.split("-", 2)
|
name, version, _ = rest.split("-", 2)
|
||||||
line = f'{egg or name}=={version}'
|
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)
|
requirements = pkg_resources.parse_requirements(line)
|
||||||
for requirement in requirements:
|
for requirement in map(str, requirements):
|
||||||
requirement = str(requirement)
|
|
||||||
try:
|
try:
|
||||||
pkg_resources.require(requirement)
|
pkg_resources.require(requirement)
|
||||||
except pkg_resources.ResolutionError:
|
except pkg_resources.ResolutionError:
|
||||||
if not yes:
|
if not yes:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
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()
|
update_command()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue