Skip to content

Commit 43aa0c5

Browse files
committed
Continue using asyncio.
Signed-off-by: Thomas Neidhart <[email protected]>
1 parent 47a3de4 commit 43aa0c5

File tree

4 files changed

+201
-158
lines changed

4 files changed

+201
-158
lines changed

src/python_inspector/api.py

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -284,17 +284,21 @@ def resolve_dependencies(
284284
pdt_output=pdt_output,
285285
analyze_setup_py_insecurely=analyze_setup_py_insecurely,
286286
ignore_errors=ignore_errors,
287+
verbose=verbose,
288+
printer=printer
287289
)
288290

289291
async def gather_pypi_data():
290292
async def get_pypi_data(package):
291-
if verbose:
292-
printer(f" package '{package}'")
293-
294-
return await get_pypi_data_from_purl(
293+
data = await get_pypi_data_from_purl(
295294
package, repos=repos, environment=environment, prefer_source=prefer_source
296295
)
297296

297+
if verbose:
298+
printer(f" retrieved package '{package}'")
299+
300+
return data
301+
298302
if verbose:
299303
printer(f"retrieve data from pypi:")
300304

@@ -324,6 +328,8 @@ def resolve(
324328
pdt_output: bool = False,
325329
analyze_setup_py_insecurely: bool = False,
326330
ignore_errors: bool = False,
331+
verbose: bool = False,
332+
printer=print
327333
):
328334
"""
329335
Resolve dependencies given a ``direct_dependencies`` list of
@@ -350,6 +356,8 @@ def resolve(
350356
pdt_output=pdt_output,
351357
analyze_setup_py_insecurely=analyze_setup_py_insecurely,
352358
ignore_errors=ignore_errors,
359+
verbose=verbose,
360+
printer=printer
353361
)
354362

355363
return resolved_dependencies, packages
@@ -364,6 +372,8 @@ def get_resolved_dependencies(
364372
pdt_output: bool = False,
365373
analyze_setup_py_insecurely: bool = False,
366374
ignore_errors: bool = False,
375+
verbose: bool = False,
376+
printer=print
367377
) -> Tuple[List[Dict], List[str]]:
368378
"""
369379
Return resolved dependencies of a ``requirements`` list of Requirement for
@@ -373,15 +383,34 @@ def get_resolved_dependencies(
373383
Used the provided ``repos`` list of PypiSimpleRepository.
374384
If empty, use instead the PyPI.org JSON API exclusively instead.
375385
"""
386+
provider = PythonInputProvider(
387+
environment=environment,
388+
repos=repos,
389+
analyze_setup_py_insecurely=analyze_setup_py_insecurely,
390+
ignore_errors=ignore_errors,
391+
)
392+
393+
async def gather_version_data():
394+
async def get_version_data(name: str):
395+
versions = await provider.fill_versions_for_package(name)
396+
397+
if verbose:
398+
printer(f" retrieved versions for package '{name}'")
399+
400+
return versions
401+
402+
if verbose:
403+
printer(f"versions:")
404+
405+
return await asyncio.gather(*[get_version_data(requirement.name) for requirement in requirements])
406+
407+
asyncio.run(gather_version_data())
408+
376409
resolver = Resolver(
377-
provider=PythonInputProvider(
378-
environment=environment,
379-
repos=repos,
380-
analyze_setup_py_insecurely=analyze_setup_py_insecurely,
381-
ignore_errors=ignore_errors,
382-
),
410+
provider=provider,
383411
reporter=BaseReporter(),
384412
)
413+
385414
resolver_results = resolver.resolve(requirements=requirements, max_rounds=max_rounds)
386415
package_list = get_package_list(results=resolver_results)
387416
if pdt_output:

src/python_inspector/package_data.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,23 @@ async def get_pypi_data_from_purl(
5757
python_version = get_python_version_from_env_tag(python_version=environment.python_version)
5858

5959
valid_distribution_urls = []
60-
sdist_url = get_sdist_download_url(purl=parsed_purl, repos=repos, python_version=python_version)
60+
sdist_url = await get_sdist_download_url(purl=parsed_purl, repos=repos, python_version=python_version)
6161
if sdist_url:
6262
valid_distribution_urls.append(sdist_url)
6363

6464
# if prefer_source is True then only source distribution is used
6565
# in case of no source distribution available then wheel is used
6666
if not valid_distribution_urls or not prefer_source:
67-
wheel_urls = list(
68-
get_wheel_download_urls(
69-
purl=parsed_purl,
70-
repos=repos,
71-
environment=environment,
72-
python_version=python_version,
73-
)
74-
)
67+
wheel_urls = \
68+
[
69+
item
70+
for item in await get_wheel_download_urls(
71+
purl=parsed_purl,
72+
repos=repos,
73+
environment=environment,
74+
python_version=python_version,
75+
)
76+
]
7577
wheel_url = choose_single_wheel(wheel_urls)
7678
if wheel_url:
7779
valid_distribution_urls.insert(0, wheel_url)
@@ -142,38 +144,40 @@ def get_pypi_codeview_url(project_urls: Dict) -> Optional[str]:
142144
return code_view_url
143145

144146

145-
def get_wheel_download_urls(
147+
async def get_wheel_download_urls(
146148
purl: PackageURL,
147149
repos: List[PypiSimpleRepository],
148150
environment: Environment,
149151
python_version: str,
150-
) -> Iterable[str]:
152+
) -> List[str]:
151153
"""
152154
Return a list of download urls for the given purl.
153155
"""
156+
download_urls = []
154157
for repo in repos:
155-
for wheel in utils_pypi.get_supported_and_valid_wheels(
158+
for wheel in await utils_pypi.get_supported_and_valid_wheels(
156159
repo=repo,
157160
name=purl.name,
158161
version=purl.version,
159162
environment=environment,
160163
python_version=python_version,
161164
):
162-
yield wheel.download_url
165+
download_urls.append(await wheel.download_url)
166+
return download_urls
163167

164168

165-
def get_sdist_download_url(
169+
async def get_sdist_download_url(
166170
purl: PackageURL, repos: List[PypiSimpleRepository], python_version: str
167171
) -> str:
168172
"""
169173
Return a list of download urls for the given purl.
170174
"""
171175
for repo in repos:
172-
sdist = utils_pypi.get_valid_sdist(
176+
sdist = await utils_pypi.get_valid_sdist(
173177
repo=repo,
174178
name=purl.name,
175179
version=purl.version,
176180
python_version=python_version,
177181
)
178182
if sdist:
179-
return sdist.download_url
183+
return await sdist.download_url

0 commit comments

Comments
 (0)