From 704c7b2be07dd11cb4a3ecb33560a254203ce084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=8E=AE=20=28Jade=20Lin=29?= Date: Wed, 4 Aug 2021 23:34:18 +0800 Subject: [PATCH 1/4] Fix pdm show weird package info --- pdm/models/project_info.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/pdm/models/project_info.py b/pdm/models/project_info.py index 4f696c5543..5b205a60e6 100644 --- a/pdm/models/project_info.py +++ b/pdm/models/project_info.py @@ -2,15 +2,21 @@ import itertools import sys -from typing import Any, Iterator +from typing import Any, Iterator, List from pdm import termui from pdm.pep517.metadata import Metadata if sys.version_info >= (3, 8): + from email.message import Message as DistributionMetadata from importlib.metadata import Distribution else: from importlib_metadata import Distribution + from importlib_metadata._meta import PackageMetadata as DistributionMetadata + + +def get_as_dot_list(metadata: DistributionMetadata, key: str) -> List[str]: + return metadata.get(key, "").split(",") class ProjectInfo: @@ -24,6 +30,12 @@ def __init__(self, metadata: Distribution | Metadata) -> None: def _parse(self, data: Distribution) -> dict[str, Any]: metadata = data.metadata + keywords = get_as_dot_list(metadata, "Keywords") + platforms = get_as_dot_list(metadata, "Platform") + project_urls = { + k.strip(): v.strip() + for k, v in (row.split(",") for row in metadata.get_all("Project-URL", [])) + } return { "name": metadata["Name"], "version": metadata["Version"], @@ -32,12 +44,10 @@ def _parse(self, data: Distribution) -> dict[str, Any]: "email": metadata.get("Author-email", ""), "license": metadata.get("License", ""), "requires-python": metadata.get("Requires-Python", ""), - "platform": ", ".join(metadata.get("Platform", [])), - "keywords": ", ".join(metadata.get("Keywords", [])), + "platform": ", ".join(platforms), + "keywords": ", ".join(keywords), "homepage": metadata.get("Home-page", ""), - "project-urls": [ - ": ".join(parts) for parts in metadata.get("Project-URL", []) - ], + "project-urls": [": ".join(parts) for parts in project_urls.items()], } def _parse_self(self, metadata: Metadata) -> dict[str, Any]: From ac1cf605af36be2e63f65934088db5c1048100dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=8E=AE=20=28Jade=20Lin=29?= Date: Wed, 4 Aug 2021 23:37:55 +0800 Subject: [PATCH 2/4] Add news entry file --- news/574.bugfix.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 news/574.bugfix.md diff --git a/news/574.bugfix.md b/news/574.bugfix.md new file mode 100644 index 0000000000..1bf3558d73 --- /dev/null +++ b/news/574.bugfix.md @@ -0,0 +1 @@ +Fix pdm show weird package info. From d0fcd122901e2b6edb0c82da7d89fd4e55e77661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=8E=AE=20=28Jade=20Lin=29?= Date: Wed, 4 Aug 2021 23:47:03 +0800 Subject: [PATCH 3/4] Rename news entry file --- news/{574.bugfix.md => 580.bugfix.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename news/{574.bugfix.md => 580.bugfix.md} (100%) diff --git a/news/574.bugfix.md b/news/580.bugfix.md similarity index 100% rename from news/574.bugfix.md rename to news/580.bugfix.md From 8967ecd3924f706a60e6eca151ba527b9633e57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=8E=AE=20=28Jade=20Lin=29?= Date: Thu, 5 Aug 2021 09:18:30 +0800 Subject: [PATCH 4/4] Clean code --- pdm/models/project_info.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/pdm/models/project_info.py b/pdm/models/project_info.py index 5b205a60e6..975608fa63 100644 --- a/pdm/models/project_info.py +++ b/pdm/models/project_info.py @@ -2,21 +2,15 @@ import itertools import sys -from typing import Any, Iterator, List +from typing import Any, Iterator from pdm import termui from pdm.pep517.metadata import Metadata if sys.version_info >= (3, 8): - from email.message import Message as DistributionMetadata from importlib.metadata import Distribution else: from importlib_metadata import Distribution - from importlib_metadata._meta import PackageMetadata as DistributionMetadata - - -def get_as_dot_list(metadata: DistributionMetadata, key: str) -> List[str]: - return metadata.get(key, "").split(",") class ProjectInfo: @@ -30,8 +24,8 @@ def __init__(self, metadata: Distribution | Metadata) -> None: def _parse(self, data: Distribution) -> dict[str, Any]: metadata = data.metadata - keywords = get_as_dot_list(metadata, "Keywords") - platforms = get_as_dot_list(metadata, "Platform") + keywords = metadata.get("Keywords", "").replace(",", ", ") + platform = metadata.get("Platform", "").replace(",", ", ") project_urls = { k.strip(): v.strip() for k, v in (row.split(",") for row in metadata.get_all("Project-URL", [])) @@ -44,8 +38,8 @@ def _parse(self, data: Distribution) -> dict[str, Any]: "email": metadata.get("Author-email", ""), "license": metadata.get("License", ""), "requires-python": metadata.get("Requires-Python", ""), - "platform": ", ".join(platforms), - "keywords": ", ".join(keywords), + "platform": platform, + "keywords": keywords, "homepage": metadata.get("Home-page", ""), "project-urls": [": ".join(parts) for parts in project_urls.items()], }