Skip to content

Commit 18f27d6

Browse files
committed
More cleanups.
Signed-off-by: Thomas Neidhart <thomas.neidhart@gmail.com>
1 parent 0718f51 commit 18f27d6

File tree

5 files changed

+40
-41
lines changed

5 files changed

+40
-41
lines changed

src/python_inspector/api.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import asyncio
1212
import os
1313
from netrc import netrc
14-
from typing import Dict
14+
from typing import Dict, Tuple
1515
from typing import List
1616
from typing import NamedTuple
1717
from typing import Sequence
@@ -365,14 +365,14 @@ def get_resolved_dependencies(
365365
pdt_output: bool = False,
366366
analyze_setup_py_insecurely: bool = False,
367367
ignore_errors: bool = False,
368-
):
368+
) -> Tuple[List[Dict], List[str]]:
369369
"""
370370
Return resolved dependencies of a ``requirements`` list of Requirement for
371-
an ``enviroment`` Environment. The resolved dependencies are formatted as
371+
an ``environment`` Environment. The resolved dependencies are formatted as
372372
parent/children or a nested tree if ``as_tree`` is True.
373373
374374
Used the provided ``repos`` list of PypiSimpleRepository.
375-
If empty, use instead the PyPI.org JSON API exclusively instead
375+
If empty, use instead the PyPI.org JSON API exclusively instead.
376376
"""
377377
resolver = Resolver(
378378
provider=PythonInputProvider(
@@ -386,11 +386,8 @@ def get_resolved_dependencies(
386386
resolver_results = resolver.resolve(requirements=requirements, max_rounds=max_rounds)
387387
package_list = get_package_list(results=resolver_results)
388388
if pdt_output:
389-
return (format_pdt_tree(resolver_results), package_list)
390-
return (
391-
format_resolution(resolver_results, as_tree=as_tree),
392-
package_list,
393-
)
389+
return format_pdt_tree(resolver_results), package_list
390+
return format_resolution(resolver_results, as_tree=as_tree), package_list
394391

395392

396393
def get_requirements_from_direct_dependencies(

src/python_inspector/dependencies.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,26 @@
88
# See https://github.com/nexB/skeleton for support or download.
99
# See https://aboutcode.org for more information about nexB OSS projects.
1010
#
11+
from typing import Iterable, Mapping
1112

1213
from packageurl import PackageURL
1314
from packvers.requirements import Requirement
14-
from pip_requirements_parser import InstallRequirement
1515

1616
from _packagedcode import models
17+
from _packagedcode.models import DependentPackage
1718
from _packagedcode.pypi import PipRequirementsFileHandler
1819
from _packagedcode.pypi import get_requirements_txt_dependencies
1920

2021
"""
21-
Utilities to resolve dependencies .
22+
Utilities to resolve dependencies.
2223
"""
2324

2425
TRACE = False
2526

2627

27-
def get_dependencies_from_requirements(requirements_file="requirements.txt"):
28+
def get_dependencies_from_requirements(requirements_file="requirements.txt") -> Iterable[DependentPackage]:
2829
"""
29-
Yield DependentPackage for each requirement in a `requirement`
30-
file.
30+
Yield DependentPackage for each requirement in a `requirement` file.
3131
"""
3232
dependent_packages, _ = get_requirements_txt_dependencies(
3333
location=requirements_file, include_nested=True
@@ -41,21 +41,20 @@ def get_dependencies_from_requirements(requirements_file="requirements.txt"):
4141
yield dependent_package
4242

4343

44-
def get_extra_data_from_requirements(requirements_file="requirements.txt"):
44+
def get_extra_data_from_requirements(requirements_file="requirements.txt") -> Iterable[Mapping]:
4545
"""
46-
Yield extra_data for each requirement in a `requirement`
47-
file.
46+
Yield extra_data for each requirement in a `requirement` file.
4847
"""
4948
for package_data in PipRequirementsFileHandler.parse(location=requirements_file):
5049
yield package_data.extra_data
5150

5251

53-
def is_requirement_pinned(requirement: Requirement):
52+
def is_requirement_pinned(requirement: Requirement) -> bool:
5453
specifiers = requirement.specifier
5554
return specifiers and len(specifiers) == 1 and next(iter(specifiers)).operator in {"==", "==="}
5655

5756

58-
def get_dependency(specifier):
57+
def get_dependency(specifier) -> DependentPackage:
5958
"""
6059
Return a DependentPackage given a requirement ``specifier`` string.
6160

src/python_inspector/package_data.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
# See https://aboutcode.org for more information about nexB OSS projects.
1010
#
1111

12-
from typing import List, Iterable, Optional
12+
from typing import List, Iterable, Optional, Dict
1313

1414
from packageurl import PackageURL
1515

@@ -78,15 +78,15 @@ async def get_pypi_data_from_purl(
7878
if wheel_url:
7979
valid_distribution_urls.insert(0, wheel_url)
8080

81-
urls = {url.get("url"): url for url in response.get("urls", [])}
81+
urls = {url.get("url"): url for url in response.get("urls") or []}
8282
# iterate over the valid distribution urls and return the first
8383
# one that is matching.
8484
for dist_url in valid_distribution_urls:
8585
if dist_url not in urls:
8686
continue
8787

8888
url_data = urls.get(dist_url)
89-
digests = url_data.get("digests", {})
89+
digests = url_data.get("digests") or {}
9090

9191
return PackageData(
9292
primary_language="Python",
@@ -116,16 +116,18 @@ async def get_pypi_data_from_purl(
116116
return None
117117

118118

119-
def choose_single_wheel(wheel_urls):
119+
def choose_single_wheel(wheel_urls: List[str]) -> Optional[str]:
120120
"""
121121
Sort wheel urls descendingly and return the first one
122122
"""
123123
wheel_urls.sort(reverse=True)
124124
if wheel_urls:
125125
return wheel_urls[0]
126+
else:
127+
return None
126128

127129

128-
def get_pypi_bugtracker_url(project_urls):
130+
def get_pypi_bugtracker_url(project_urls: Dict) -> Optional[str]:
129131
bug_tracking_url = project_urls.get("Tracker")
130132
if not bug_tracking_url:
131133
bug_tracking_url = project_urls.get("Issue Tracker")
@@ -134,7 +136,7 @@ def get_pypi_bugtracker_url(project_urls):
134136
return bug_tracking_url
135137

136138

137-
def get_pypi_codeview_url(project_urls):
139+
def get_pypi_codeview_url(project_urls: Dict) -> Optional[str]:
138140
code_view_url = project_urls.get("Source")
139141
if not code_view_url:
140142
code_view_url = project_urls.get("Code")

src/python_inspector/resolution.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import operator
1212
import os
1313
import tarfile
14-
from typing import Dict
14+
from typing import Dict, Iterable, Optional
1515
from typing import Generator
1616
from typing import List
1717
from typing import NamedTuple
@@ -70,7 +70,7 @@ class Result(NamedTuple):
7070

7171

7272
def get_requirements_from_distribution(
73-
handler: BasePypiHandler,
73+
handler: type[BasePypiHandler],
7474
location: str,
7575
) -> List[Requirement]:
7676
"""
@@ -84,7 +84,7 @@ def get_requirements_from_distribution(
8484
reqs = []
8585
for package_data in handler.parse(location):
8686
dependencies = package_data.dependencies
87-
reqs.extend(get_requirements_from_dependencies(dependencies=dependencies))
87+
reqs.extend(get_requirements_from_dependencies(dependencies=dependencies))
8888
return reqs
8989

9090

@@ -103,7 +103,7 @@ def get_deps_from_distribution(
103103
deps = []
104104
for package_data in handler.parse(location):
105105
dependencies = package_data.dependencies
106-
deps.extend(dependencies=dependencies)
106+
deps.extend(dependencies)
107107
return deps
108108

109109

@@ -254,7 +254,7 @@ def remove_extras(identifier: str) -> str:
254254
return name
255255

256256

257-
def get_reqs_from_requirements_file_in_sdist(sdist_location: str, files: str) -> List[Requirement]:
257+
def get_reqs_from_requirements_file_in_sdist(sdist_location: str, files: List) -> List[Requirement]:
258258
"""
259259
Return a list of parsed requirements from the ``sdist_location`` sdist location
260260
"""
@@ -282,7 +282,7 @@ def get_requirements_from_python_manifest(
282282
"""
283283
Return a list of parsed requirements from the ``sdist_location`` sdist location
284284
"""
285-
# Look in requirements file if and only if they are refered in setup.py or setup.cfg
285+
# Look in requirements file if and only if they are referred in setup.py or setup.cfg
286286
# And no deps have been yielded by requirements file.
287287
requirements = list(
288288
get_reqs_from_requirements_file_in_sdist(
@@ -388,7 +388,7 @@ def get_preference(
388388
return transitive, identifier
389389

390390
def get_versions_for_package(
391-
self, name: str, repo: Union[List[PypiSimpleRepository], None] = None
391+
self, name: str, repo: Optional[PypiSimpleRepository] = None
392392
) -> List[Version]:
393393
"""
394394
Return a list of versions for a package.
@@ -442,7 +442,7 @@ def get_versions_for_package_from_pypi_json_api(self, name: str) -> List[Version
442442

443443
def get_requirements_for_package(
444444
self, purl: PackageURL, candidate: Candidate
445-
) -> Generator[Requirement, None, None]:
445+
) -> Iterable[Requirement]:
446446
"""
447447
Yield requirements for a package.
448448
"""
@@ -524,7 +524,7 @@ def get_requirements_for_package_from_pypi_simple(
524524

525525
def get_requirements_for_package_from_pypi_json_api(
526526
self, purl: PackageURL
527-
) -> List[Requirement]:
527+
) -> Iterable[Requirement]:
528528
"""
529529
Return requirements for a package from the PyPI.org JSON API
530530
"""
@@ -548,7 +548,7 @@ def get_candidates(
548548
bad_versions: List[str],
549549
name: str,
550550
extras: Dict,
551-
) -> Generator[Candidate, None, None]:
551+
) -> Iterable[Candidate]:
552552
"""
553553
Generate candidates for the given identifier. Overridden.
554554
"""
@@ -574,7 +574,7 @@ def _iter_matches(
574574
incompatibilities: Dict,
575575
) -> Generator[Candidate, None, None]:
576576
"""
577-
Yield candidates for the given identifier, requirements and incompatibilities
577+
Yield candidates for the given identifier, requirements and incompatibilities.
578578
"""
579579
name = remove_extras(identifier=identifier)
580580
bad_versions = {c.version for c in incompatibilities[identifier]}

src/python_inspector/utils_pypi.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
"""
9999

100100
TRACE = False
101-
TRACE_DEEP = False
101+
TRACE_DEEP = True
102102
TRACE_ULTRA_DEEP = False
103103

104104
# Supported environments
@@ -265,7 +265,7 @@ def download_wheel(
265265
fetched_wheel_filenames.append(fetched_wheel_filename)
266266

267267
if fetched_wheel_filenames:
268-
# do not futher fetch from other repos if we find in first, typically PyPI
268+
# do not further fetch from other repos if we find in first, typically PyPI
269269
break
270270
return fetched_wheel_filenames
271271

@@ -1770,7 +1770,7 @@ def get_remote_file_content(
17701770
):
17711771
"""
17721772
Fetch and return a tuple of (headers, content) at `url`. Return content as a
1773-
text string if `as_text` is True. Otherwise return the content as bytes.
1773+
text string if `as_text` is True. Otherwise, return the content as bytes.
17741774
17751775
If `header_only` is True, return only (headers, None). Headers is a mapping
17761776
of HTTP headers.
@@ -1779,7 +1779,7 @@ def get_remote_file_content(
17791779
"""
17801780
time.sleep(_delay)
17811781
headers = headers or {}
1782-
# using a GET with stream=True ensure we get the the final header from
1782+
# using a GET with stream=True ensure we get the final header from
17831783
# several redirects and that we can ignore content there. A HEAD request may
17841784
# not get us this last header
17851785
if verbose and not echo_func:
@@ -1834,7 +1834,7 @@ def fetch_and_save(
18341834
):
18351835
"""
18361836
Fetch content at ``path_or_url`` URL or path and save this to
1837-
``dest_dir/filername``. Return the fetched content. Raise an Exception on
1837+
``dest_dir/filename``. Return the fetched content. Raise an Exception on
18381838
errors. Treats the content as text if as_text is True otherwise as treat as
18391839
binary.
18401840
"""
@@ -1845,6 +1845,7 @@ def fetch_and_save(
18451845
verbose=verbose,
18461846
echo_func=echo_func,
18471847
)
1848+
18481849
output = os.path.join(dest_dir, filename)
18491850
wmode = "w" if as_text else "wb"
18501851
with open(output, wmode) as fo:

0 commit comments

Comments
 (0)