Skip to content

Commit 0d4dff6

Browse files
committed
Continue using asyncio.
Signed-off-by: Thomas Neidhart <thomas.neidhart@gmail.com>
1 parent 18f27d6 commit 0d4dff6

File tree

4 files changed

+200
-159
lines changed

4 files changed

+200
-159
lines changed

src/python_inspector/api.py

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -285,17 +285,21 @@ def resolve_dependencies(
285285
pdt_output=pdt_output,
286286
analyze_setup_py_insecurely=analyze_setup_py_insecurely,
287287
ignore_errors=ignore_errors,
288+
verbose=verbose,
289+
printer=printer
288290
)
289291

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

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

@@ -325,6 +329,8 @@ def resolve(
325329
pdt_output: bool = False,
326330
analyze_setup_py_insecurely: bool = False,
327331
ignore_errors: bool = False,
332+
verbose: bool = False,
333+
printer=print
328334
):
329335
"""
330336
Resolve dependencies given a ``direct_dependencies`` list of
@@ -351,6 +357,8 @@ def resolve(
351357
pdt_output=pdt_output,
352358
analyze_setup_py_insecurely=analyze_setup_py_insecurely,
353359
ignore_errors=ignore_errors,
360+
verbose=verbose,
361+
printer=printer
354362
)
355363

356364
return resolved_dependencies, packages
@@ -365,6 +373,8 @@ def get_resolved_dependencies(
365373
pdt_output: bool = False,
366374
analyze_setup_py_insecurely: bool = False,
367375
ignore_errors: bool = False,
376+
verbose: bool = False,
377+
printer=print
368378
) -> Tuple[List[Dict], List[str]]:
369379
"""
370380
Return resolved dependencies of a ``requirements`` list of Requirement for
@@ -374,13 +384,31 @@ def get_resolved_dependencies(
374384
Used the provided ``repos`` list of PypiSimpleRepository.
375385
If empty, use instead the PyPI.org JSON API exclusively instead.
376386
"""
387+
provider = PythonInputProvider(
388+
environment=environment,
389+
repos=repos,
390+
analyze_setup_py_insecurely=analyze_setup_py_insecurely,
391+
ignore_errors=ignore_errors,
392+
)
393+
394+
async def gather_version_data():
395+
async def get_version_data(name: str):
396+
versions = await provider.fill_versions_for_package(name)
397+
398+
if verbose:
399+
printer(f" retrieved versions for package '{name}'")
400+
401+
return versions
402+
403+
if verbose:
404+
printer(f"versions:")
405+
406+
return await asyncio.gather(*[get_version_data(requirement.name) for requirement in requirements])
407+
408+
asyncio.run(gather_version_data())
409+
377410
resolver = Resolver(
378-
provider=PythonInputProvider(
379-
environment=environment,
380-
repos=repos,
381-
analyze_setup_py_insecurely=analyze_setup_py_insecurely,
382-
ignore_errors=ignore_errors,
383-
),
411+
provider=provider,
384412
reporter=BaseReporter(),
385413
)
386414
resolver_results = resolver.resolve(requirements=requirements, max_rounds=max_rounds)

src/python_inspector/package_data.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ async def get_pypi_data_from_purl(
5656
bug_tracking_url = get_pypi_bugtracker_url(project_urls)
5757
python_version = get_python_version_from_env_tag(python_version=environment.python_version)
5858
valid_distribution_urls = []
59-
60-
sdist_url = get_sdist_download_url(purl=parsed_purl, repos=repos, python_version=python_version)
59+
sdist_url = await get_sdist_download_url(purl=parsed_purl, repos=repos, python_version=python_version)
6160
if sdist_url:
6261
valid_distribution_urls.append(sdist_url)
6362

@@ -66,14 +65,16 @@ async def get_pypi_data_from_purl(
6665
# if prefer_source is True then only source distribution is used
6766
# in case of no source distribution available then wheel is used
6867
if not valid_distribution_urls or not prefer_source:
69-
wheel_urls = list(
70-
get_wheel_download_urls(
71-
purl=parsed_purl,
72-
repos=repos,
73-
environment=environment,
74-
python_version=python_version,
75-
)
76-
)
68+
wheel_urls = \
69+
[
70+
item
71+
for item in await get_wheel_download_urls(
72+
purl=parsed_purl,
73+
repos=repos,
74+
environment=environment,
75+
python_version=python_version,
76+
)
77+
]
7778
wheel_url = choose_single_wheel(wheel_urls)
7879
if wheel_url:
7980
valid_distribution_urls.insert(0, wheel_url)
@@ -145,38 +146,40 @@ def get_pypi_codeview_url(project_urls: Dict) -> Optional[str]:
145146
return code_view_url
146147

147148

148-
def get_wheel_download_urls(
149+
async def get_wheel_download_urls(
149150
purl: PackageURL,
150151
repos: List[PypiSimpleRepository],
151152
environment: Environment,
152153
python_version: str,
153-
) -> Iterable[str]:
154+
) -> List[str]:
154155
"""
155156
Return a list of download urls for the given purl.
156157
"""
158+
download_urls = []
157159
for repo in repos:
158-
for wheel in utils_pypi.get_supported_and_valid_wheels(
160+
for wheel in await utils_pypi.get_supported_and_valid_wheels(
159161
repo=repo,
160162
name=purl.name,
161163
version=purl.version,
162164
environment=environment,
163165
python_version=python_version,
164166
):
165-
yield wheel.download_url
167+
download_urls.append(await wheel.download_url)
168+
return download_urls
166169

167170

168-
def get_sdist_download_url(
171+
async def get_sdist_download_url(
169172
purl: PackageURL, repos: List[PypiSimpleRepository], python_version: str
170173
) -> str:
171174
"""
172175
Return a list of download urls for the given purl.
173176
"""
174177
for repo in repos:
175-
sdist = utils_pypi.get_valid_sdist(
178+
sdist = await utils_pypi.get_valid_sdist(
176179
repo=repo,
177180
name=purl.name,
178181
version=purl.version,
179182
python_version=python_version,
180183
)
181184
if sdist:
182-
return sdist.download_url
185+
return await sdist.download_url

0 commit comments

Comments
 (0)