Skip to content

Commit b84ef84

Browse files
committed
taking gloves, as bitten per this dark art
1 parent d4bf8a9 commit b84ef84

File tree

1 file changed

+12
-23
lines changed

1 file changed

+12
-23
lines changed

winpython/packagemetadata.py

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python3
1+
# -*- coding: utf-8 -*-
22
"""
33
packagemetadata.py - get metadata from designated place
44
"""
@@ -8,12 +8,11 @@
88
import zipfile
99
import sys
1010
from pathlib import Path
11-
from collections import defaultdict
12-
import shutil
13-
import subprocess
1411
from typing import Dict, List, Optional, Tuple
1512
from . import utils
16-
13+
import importlib.metadata
14+
import email
15+
from packaging.utils import canonicalize_name
1716
# --- Abstract metadata accessor ---
1817

1918
class PackageMetadata:
@@ -28,11 +27,10 @@ def __init__(self, name, version, requires, summary, description, metadata):
2827

2928
def get_installed_metadata(path = None) -> List[PackageMetadata]:
3029
# Use importlib.metadata or pkg_resources
31-
import importlib.metadata
3230
pkgs = []
3331
distro = importlib.metadata.distributions(path = path) if path else importlib.metadata.distributions()
3432
for dist in distro:
35-
name = dist.metadata['Name']
33+
name = canonicalize_name(dist.metadata['Name'])
3634
version = dist.version
3735
summary = dist.metadata.get("Summary", ""),
3836
description = dist.metadata.get("Description", ""),
@@ -56,7 +54,6 @@ def get_directory_metadata(directory: str) -> List[PackageMetadata]:
5654
return pkgs
5755

5856
def extract_metadata_from_wheel(path: str) -> PackageMetadata:
59-
import zipfile
6057
with zipfile.ZipFile(path) as zf:
6158
for name in zf.namelist():
6259
if name.endswith(r'.dist-info/METADATA') and name.split("/")[1] == "METADATA":
@@ -66,7 +63,6 @@ def extract_metadata_from_wheel(path: str) -> PackageMetadata:
6663
raise ValueError(f"No METADATA found in {path}")
6764

6865
def extract_metadata_from_sdist(path: str) -> PackageMetadata:
69-
import tarfile
7066
with tarfile.open(path, "r:gz") as tf:
7167
for member in tf.getmembers():
7268
if member.name.endswith('PKG-INFO'):
@@ -75,20 +71,13 @@ def extract_metadata_from_sdist(path: str) -> PackageMetadata:
7571
raise ValueError(f"No PKG-INFO found in {path}")
7672

7773
def parse_metadata_file(txt: str) -> PackageMetadata:
78-
name = version = summary = description = ""
79-
requires = []
80-
description_lines = []
81-
in_description = False
82-
for line in txt.splitlines():
83-
if line.startswith('Name: '):
84-
name = line[6:].strip()
85-
elif line.startswith('Version: '):
86-
version = line[9:].strip()
87-
elif line.startswith('Summary: '):
88-
summary = description = line[9:].strip()
89-
elif line.startswith('Requires-Dist: '):
90-
requires.append(line[14:].strip())
91-
return PackageMetadata(name, version, requires, summary, description, {'Name': name, "Summary": summary, "Description": description})
74+
meta = email.message_from_string(txt)
75+
name = canonicalize_name(meta.get('Name', ''))
76+
version = meta.get('Version', '')
77+
summary = meta.get('Summary', '')
78+
description = meta.get('Description', '')
79+
requires = meta.get_all('Requires-Dist') or []
80+
return PackageMetadata(name, version, requires, summary, description, dict(meta.items()))
9281

9382
def main():
9483
if len(sys.argv) > 1:

0 commit comments

Comments
 (0)