Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 6175a71

Browse filesBrowse files
authored
Merge pull request #1634 from stonebig/master
taking gloves, as bitten per this dark art
2 parents 0863194 + b84ef84 commit 6175a71
Copy full SHA for 6175a71

File tree

Expand file treeCollapse file tree

1 file changed

+12
-23
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+12
-23
lines changed

‎winpython/packagemetadata.py

Copy file name to clipboardExpand all lines: winpython/packagemetadata.py
+12-23Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.