diff --git a/piplicenses.py b/piplicenses.py index 8c5ed54..a9f9613 100755 --- a/piplicenses.py +++ b/piplicenses.py @@ -39,9 +39,9 @@ from enum import Enum, auto from functools import partial from importlib import metadata as importlib_metadata -from importlib.metadata import Distribution +from importlib.metadata import Distribution, PackageMetadata from pathlib import Path -from typing import TYPE_CHECKING, cast +from typing import cast import tomli from prettytable import ALL as RULE_ALL @@ -50,10 +50,6 @@ from prettytable import NONE as RULE_NONE from prettytable import PrettyTable -if TYPE_CHECKING: # pragma: no cover - from email.message import Message - - open = open # allow monkey patching __pkgname__ = "pip-licenses" @@ -96,7 +92,7 @@ ) -def extract_homepage(metadata: Message) -> str | None: +def extract_homepage(metadata: PackageMetadata) -> str | None: """Extracts the homepage attribute from the package metadata. Not all python packages have defined a home-page attribute. @@ -151,7 +147,7 @@ def normalize_pkg_name(pkg_name: str) -> str: return PATTERN_DELIMITER.sub("-", pkg_name).lower() -METADATA_KEYS: dict[str, list[Callable[[Message], str | None]]] = { +METADATA_KEYS: dict[str, list[Callable[[PackageMetadata], str | None]]] = { "home-page": [extract_homepage], "author": [ lambda metadata: metadata.get("author"), @@ -235,9 +231,7 @@ def get_pkg_info(pkg: Distribution) -> dict[str, str | list[str]]: for field_name, field_selector_fns in METADATA_KEYS.items(): value = None for field_selector_fn in field_selector_fns: - # Type hint of `Distribution.metadata` states `PackageMetadata` - # but it's actually of type `email.Message` - value = field_selector_fn(metadata) # type: ignore + value = field_selector_fn(metadata) if value: break pkg_info[field_name] = value or LICENSE_UNKNOWN