[+] improve pip_resolve
1. add -r flag that can parse complicated requirements and format into a temp file for uv pip compile;
This commit is contained in:
parent
6ddfc7d2d7
commit
01aab0517a
@ -3880,7 +3880,9 @@ class Command(enum.StrEnum):
|
||||
backup = 'backup'
|
||||
pip_resolve = 'pip_resolve'
|
||||
|
||||
def pip_resolve(args: list[str]) -> None:
|
||||
def pip_resolve(
|
||||
args: list[str],
|
||||
) -> None:
|
||||
from online.fxreader.pr34.commands_typed.pip import pip_resolve, pip_resolve_t
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
@ -3892,9 +3894,32 @@ def pip_resolve(args: list[str]) -> None:
|
||||
],
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
'-r', '--requirement',
|
||||
default=[],
|
||||
dest='requirements',
|
||||
type=str,
|
||||
action='append',
|
||||
help=r'''
|
||||
requirement,
|
||||
can be multiple in a single parameter,
|
||||
all of them are to be split by whitespace
|
||||
and printed into a temp file,
|
||||
that is fed into uv pip compile
|
||||
''',
|
||||
)
|
||||
|
||||
|
||||
options, argv = parser.parse_known_args(args)
|
||||
|
||||
requirements : Optional[list[str]] = []
|
||||
|
||||
for o in options.requirements:
|
||||
requirements.extend(o.split())
|
||||
|
||||
if len(requirements) == 0:
|
||||
requirements = None
|
||||
|
||||
options.mode = pip_resolve_t.kwargs_t.mode_t(
|
||||
options.mode
|
||||
)
|
||||
@ -3902,6 +3927,7 @@ def pip_resolve(args: list[str]) -> None:
|
||||
resolve_res = pip_resolve(
|
||||
argv,
|
||||
mode=options.mode,
|
||||
requirements=requirements,
|
||||
)
|
||||
|
||||
assert not resolve_res.txt is None
|
||||
|
@ -4,6 +4,7 @@ import sys
|
||||
import enum
|
||||
import dataclasses
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
import unittest.mock
|
||||
import logging
|
||||
@ -77,6 +78,7 @@ def pip_resolve_entries_to_txt(
|
||||
def pip_resolve(
|
||||
argv: list[str],
|
||||
mode: pip_resolve_t.kwargs_t.mode_t,
|
||||
requirements: Optional[list[str]] = None,
|
||||
) -> pip_resolve_t.res_t:
|
||||
if mode is pip_resolve_t.kwargs_t.mode_t.copy_paste:
|
||||
import pip._internal.commands.show
|
||||
@ -487,20 +489,36 @@ def pip_resolve(
|
||||
txt=pip_compile,
|
||||
)
|
||||
elif mode is pip_resolve_t.kwargs_t.mode_t.uv_pip_compile:
|
||||
if argv[0] == '--':
|
||||
del argv[0]
|
||||
with contextlib.ExitStack() as stack:
|
||||
if not requirements is None:
|
||||
# assert len(argv) == 0
|
||||
|
||||
pip_compile = subprocess.check_output(
|
||||
[
|
||||
sys.executable, '-m',
|
||||
'uv', 'pip', 'compile',
|
||||
'--generate-hashes',
|
||||
*argv,
|
||||
],
|
||||
).decode('utf-8')
|
||||
f = stack.enter_context(
|
||||
tempfile.NamedTemporaryFile(
|
||||
suffix='.txt',
|
||||
)
|
||||
)
|
||||
f.write(
|
||||
('\n'.join(requirements)).encode('utf-8')
|
||||
)
|
||||
f.flush()
|
||||
|
||||
return pip_resolve_t.res_t(
|
||||
txt=pip_compile,
|
||||
)
|
||||
argv.append(f.name)
|
||||
|
||||
if argv[0] == '--':
|
||||
del argv[0]
|
||||
|
||||
pip_compile = subprocess.check_output(
|
||||
[
|
||||
sys.executable, '-m',
|
||||
'uv', 'pip', 'compile',
|
||||
'--generate-hashes',
|
||||
*argv,
|
||||
],
|
||||
).decode('utf-8')
|
||||
|
||||
return pip_resolve_t.res_t(
|
||||
txt=pip_compile,
|
||||
)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
Loading…
Reference in New Issue
Block a user