[+] improve pip_resolve
1. do not download anything; 2. provide hashes per dependency; 3. test that works on numpy
This commit is contained in:
parent
9b5fff93c0
commit
d643e8f97b
@ -3892,9 +3892,13 @@ def pip_resolve(args: list[str]) -> None:
|
||||
|
||||
from online.fxreader.pr34.commands_typed.pip import pip_resolve
|
||||
sys.stdout.write('\n'.join([
|
||||
'%s %s' % (
|
||||
'#%s\n%s %s' % (
|
||||
o.url,
|
||||
o.constraint,
|
||||
'--hash:sha256=%s' % o.sha256,
|
||||
' '.join([
|
||||
'--hash:sha256=%s' % o2
|
||||
for o2 in o.sha256
|
||||
])
|
||||
)
|
||||
for o in pip_resolve(
|
||||
argv,
|
||||
@ -3909,10 +3913,12 @@ def commands_cli(
|
||||
if argv is None:
|
||||
argv = sys.argv[1:]
|
||||
|
||||
logging.getLogger().setLevel(logging.INFO)
|
||||
logger.setLevel(logging.INFO)
|
||||
handler = logging.StreamHandler(sys.stderr)
|
||||
logging.getLogger().addHandler(handler)
|
||||
from online.fxreader.pr34.commands_typed.logging import setup as logging_setup
|
||||
logging_setup()
|
||||
#logging.getLogger().setLevel(logging.INFO)
|
||||
#logger.setLevel(logging.INFO)
|
||||
#handler = logging.StreamHandler(sys.stderr)
|
||||
#logging.getLogger().addHandler(handler)
|
||||
|
||||
msg : Optional[str] = None
|
||||
|
||||
|
@ -10,6 +10,7 @@ import pip._internal.cli.main
|
||||
import pip._internal.network.download
|
||||
import pip._internal.resolution.base
|
||||
import pip._internal.resolution.resolvelib.resolver
|
||||
import pip._internal.operations.prepare
|
||||
import unittest.mock
|
||||
import logging
|
||||
|
||||
@ -137,20 +138,30 @@ def pip_resolve(
|
||||
downloader_call_def = pip._internal.network.download.Downloader.__call__
|
||||
|
||||
def downloader_call(*args):
|
||||
# import ipdb
|
||||
# ipdb.set_trace()
|
||||
# print(args)
|
||||
|
||||
logger.warn(dict(
|
||||
logger.info(dict(
|
||||
url=args[1].url,
|
||||
))
|
||||
|
||||
return downloader_call_def(*args)
|
||||
|
||||
batch_downloader_call_def = pip._internal.network.download.BatchDownloader.__call__
|
||||
|
||||
def batch_downloader_call(*args):
|
||||
# print(args)
|
||||
|
||||
logger.info(dict(
|
||||
args=args,
|
||||
))
|
||||
|
||||
return [
|
||||
(o, ('/dev/null', None))
|
||||
for o in args[1]
|
||||
]
|
||||
|
||||
#base_resolver_resolve_def = pip._internal.resolution.base.BaseResolver.resolve
|
||||
base_resolver_resolve_def = pip._internal.resolution.resolvelib.resolver.Resolver.resolve
|
||||
|
||||
reqs = []
|
||||
result_requirements = []
|
||||
|
||||
def base_resolver_resolve(*args, **kwargs):
|
||||
# print(args, kwargs)
|
||||
@ -160,9 +171,52 @@ def pip_resolve(
|
||||
**kwargs
|
||||
)
|
||||
|
||||
reqs.append(res)
|
||||
result_requirements.append(res)
|
||||
raise NotImplementedError
|
||||
return res
|
||||
|
||||
get_http_url_def = pip._internal.operations.prepare.get_http_url
|
||||
|
||||
def get_http_url(link, download, download_dir=None, hashes=None):
|
||||
|
||||
logger.info(dict(
|
||||
url=link.url,
|
||||
hashes=hashes,
|
||||
))
|
||||
|
||||
if link.url.endswith('.whl'):
|
||||
print('blah')
|
||||
hashes = None
|
||||
|
||||
return '/dev/null', None
|
||||
else:
|
||||
return get_http_url_def(
|
||||
link,
|
||||
download,
|
||||
download_dir,
|
||||
hashes
|
||||
)
|
||||
|
||||
prepare_linked_requirements_more_def = \
|
||||
pip._internal.operations.prepare.RequirementPreparer\
|
||||
.prepare_linked_requirements_more
|
||||
|
||||
def prepare_linked_requirements_more(
|
||||
_self, reqs, *args, **kwargs
|
||||
):
|
||||
result_requirements.append(reqs)
|
||||
raise NotImplementedError
|
||||
|
||||
_complete_partial_requirements_def = \
|
||||
pip._internal.operations.prepare.RequirementPreparer\
|
||||
._complete_partial_requirements
|
||||
|
||||
def _complete_partial_requirements(
|
||||
_self, reqs, *args, **kwargs
|
||||
):
|
||||
result_requirements.append(reqs)
|
||||
raise NotImplementedError
|
||||
|
||||
patches = []
|
||||
patches.append(
|
||||
unittest.mock.patch.object(
|
||||
@ -173,6 +227,13 @@ def pip_resolve(
|
||||
)
|
||||
#patches.append(
|
||||
# unittest.mock.patch.object(
|
||||
# pip._internal.network.download.BatchDownloader,
|
||||
# '__call__',
|
||||
# batch_downloader_call
|
||||
# )
|
||||
#)
|
||||
#patches.append(
|
||||
# unittest.mock.patch.object(
|
||||
# pip._internal.resolution.base.BaseResolver, 'resolve', base_resolver_resolve))
|
||||
|
||||
patches.append(
|
||||
@ -182,6 +243,27 @@ def pip_resolve(
|
||||
base_resolver_resolve
|
||||
)
|
||||
)
|
||||
patches.append(
|
||||
unittest.mock.patch.object(
|
||||
pip._internal.operations.prepare,
|
||||
'get_http_url',
|
||||
get_http_url,
|
||||
)
|
||||
)
|
||||
patches.append(
|
||||
unittest.mock.patch.object(
|
||||
pip._internal.operations.prepare.RequirementPreparer,
|
||||
'prepare_linked_requirements_more',
|
||||
prepare_linked_requirements_more
|
||||
)
|
||||
)
|
||||
#patches.append(
|
||||
# unittest.mock.patch.object(
|
||||
# pip._internal.operations.prepare.RequirementPreparer,
|
||||
# '_complete_partial_requirements',
|
||||
# _complete_partial_requirements
|
||||
# )
|
||||
#)
|
||||
|
||||
with contextlib.ExitStack() as stack:
|
||||
for p in patches:
|
||||
@ -189,6 +271,7 @@ def pip_resolve(
|
||||
|
||||
pip._internal.cli.main.main([
|
||||
'download',
|
||||
'-q',
|
||||
'--no-cache',
|
||||
'-d',
|
||||
'/dev/null',
|
||||
@ -196,16 +279,25 @@ def pip_resolve(
|
||||
# 'numpy',
|
||||
])
|
||||
|
||||
return sum([
|
||||
[
|
||||
pip_resolve_t.res_t.download_info_t(
|
||||
constraint=k,
|
||||
sha256=v.download_info.info.hashes['sha256'],
|
||||
url=v.download_info.url,
|
||||
)
|
||||
for k, v in o.requirements.items()
|
||||
]
|
||||
for o in reqs
|
||||
], [])
|
||||
#return sum([
|
||||
# [
|
||||
# pip_resolve_t.res_t.download_info_t(
|
||||
# constraint=k,
|
||||
# sha256=v.download_info.info.hashes['sha256'],
|
||||
# url=v.download_info.url,
|
||||
# )
|
||||
# for k, v in o.requirements.items()
|
||||
# ]
|
||||
# for o in result_requirements
|
||||
#], [])
|
||||
logger.warn(result_requirements)
|
||||
return [
|
||||
pip_resolve_t.res_t.download_info_t(
|
||||
constraint=str(o.req),
|
||||
sha256=o.hashes()._allowed['sha256'],
|
||||
url=o.link.url,
|
||||
)
|
||||
for o in sum(result_requirements, [])
|
||||
]
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
Loading…
Reference in New Issue
Block a user