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 573a386

Browse filesBrowse files
authored
Merge pull request #1621 from stonebig/master
more checks, less bagages
2 parents fbc603e + e9da3e5 commit 573a386
Copy full SHA for 573a386

File tree

Expand file treeCollapse file tree

5 files changed

+47
-17
lines changed
Filter options
Expand file treeCollapse file tree

5 files changed

+47
-17
lines changed

‎winpython/__init__.py

Copy file name to clipboardExpand all lines: winpython/__init__.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@
2828
OTHER DEALINGS IN THE SOFTWARE.
2929
"""
3030

31-
__version__ = '16.1.20250525'
31+
__version__ = '16.2.20250529'
3232
__license__ = __doc__
3333
__project_url__ = 'http://winpython.github.io/'

‎winpython/piptree.py

Copy file name to clipboardExpand all lines: winpython/piptree.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from pip._vendor.packaging.markers import Marker
1818
from importlib.metadata import Distribution, distributions
1919
from pathlib import Path
20-
from winpython import utils
20+
from . import utils
2121

2222
logging.basicConfig(level=logging.INFO)
2323
logger = logging.getLogger(__name__)

‎winpython/utils.py

Copy file name to clipboardExpand all lines: winpython/utils.py
-2Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import re
1919
import tarfile
2020
import zipfile
21-
import atexit
22-
import winreg
2321

2422
# SOURCE_PATTERN defines what an acceptable source package name is
2523
SOURCE_PATTERN = r'([a-zA-Z0-9\-\_\.]*)-([0-9\.\_]*[a-z]*[\-]?[0-9]*)(\.zip|\.tar\.gz|\-(py[2-7]*|py[2-7]*\.py[2-7]*)\-none\-any\.whl)'

‎winpython/wheelhouse.py

Copy file name to clipboardExpand all lines: winpython/wheelhouse.py
+43-11Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from email.policy import default
1818
from . import utils
1919

20-
from packaging.utils import canonicalize_name
20+
from packaging.utils import canonicalize_name, parse_wheel_filename, parse_sdist_filename
2121

2222
# Use tomllib if available (Python 3.11+), otherwise fall back to tomli
2323
try:
@@ -193,32 +193,64 @@ def get_pylock_wheels(wheelhouse: Path, lockfile: Path, wheelorigin: Optional[Pa
193193
print(f"\n\n*** We can't install {filename} ! ***\n\n")
194194

195195
def extract_metadata_from_wheel(filepath: Path) -> Optional[Tuple[str, str, str]]:
196-
"get metadata from a wheel package"
196+
"Extract package metadata from a .whl file and validate it matches the filename"
197+
wheel_name = filepath.name
198+
try:
199+
name, version, build, tags = parse_wheel_filename(wheel_name)
200+
filename_name = canonicalize_name(name)
201+
filename_version = str(version)
202+
except Exception as e:
203+
print(f"❌ Could not parse filename: {wheel_name}", e)
204+
return None
205+
197206
with zipfile.ZipFile(filepath, 'r') as z:
198207
# Locate *.dist-info/METADATA file inside but not in a vendored directory (flit-core)
199208
for name in z.namelist():
200209
if name.endswith(r'.dist-info/METADATA') and name.split("/")[1] == "METADATA":
201210
with z.open(name) as meta_file:
202211
metadata = BytesParser(policy=default).parse(meta_file)
203-
name = canonicalize_name(str(metadata.get('Name', 'unknown'))) # Avoid Head type
204-
version = str(metadata.get('Version', 'unknown'))
212+
meta_name = canonicalize_name(str(metadata.get('Name', 'unknown'))) # Avoid Head type
213+
meta_version = str(metadata.get('Version', 'unknown'))
205214
summary = utils.sum_up(str(metadata.get('Summary', '')))
206-
return name, version, summary
215+
# Assert consistency
216+
if meta_name != filename_name or meta_version != filename_version:
217+
print(f"⚠️ Mismatch in {wheel_name}: filename says {filename_name}=={filename_version}, "
218+
f"but METADATA says {meta_name}=={meta_version}")
219+
return None
220+
return meta_name, meta_version , summary
207221
return None
208222

209223
def extract_metadata_from_sdist(filepath: Path) -> Optional[Tuple[str, str, str]]:
210224
"get metadata from a tar.gz or .zip package"
211225
open_func = tarfile.open if filepath.suffixes[-2:] == ['.tar', '.gz'] else zipfile.ZipFile
226+
sdist_name = filepath.name
227+
try:
228+
name, version = parse_sdist_filename(sdist_name)
229+
filename_name = canonicalize_name(name)
230+
filename_version = str(version)
231+
except Exception as e:
232+
print(f"❌ Could not parse filename: {sdist_name}", e)
233+
return None
234+
212235
with open_func(filepath, 'r') as archive:
213236
namelist = archive.getnames() if isinstance(archive, tarfile.TarFile) else archive.namelist()
214237
for name in namelist:
215238
if name.endswith('PKG-INFO'):
216-
content = archive.extractfile(name).read() if isinstance(archive, tarfile.TarFile) else archive.open(name).read()
217-
metadata = message_from_bytes(content)
218-
name = canonicalize_name(str(metadata.get('Name', 'unknown'))) # Avoid Head type
219-
version = str(metadata.get('Version', 'unknown'))
220-
summary = utils.sum_up(str(metadata.get('Summary', '')))
221-
return name, version, summary
239+
if isinstance(archive, tarfile.TarFile):
240+
content = archive.extractfile(name)
241+
else:
242+
content = archive.open(name)
243+
if content:
244+
metadata = BytesParser(policy=default).parse(content)
245+
meta_name = canonicalize_name(str(metadata.get('Name', 'unknown'))) # Avoid Head type
246+
meta_version = str(metadata.get('Version', 'unknown'))
247+
summary = utils.sum_up(str(metadata.get('Summary', '')))
248+
# Assert consistency
249+
if meta_name != filename_name or meta_version != filename_version:
250+
print(f"⚠️ Mismatch in {sdist_name}: filename says {filename_name}=={filename_version}, "
251+
f"but METADATA says {meta_name}=={meta_version}")
252+
return None
253+
return meta_name, meta_version, summary
222254
return None
223255

224256
def list_packages_with_metadata(directory: str) -> List[Tuple[str, str, str]]:

‎winpython/wppm.py

Copy file name to clipboardExpand all lines: winpython/wppm.py
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
import json
1515
from pathlib import Path
1616
from argparse import ArgumentParser, RawTextHelpFormatter
17-
from winpython import utils, piptree, associate
18-
from winpython import wheelhouse as wh
17+
from . import utils, piptree, associate
18+
from . import wheelhouse as wh
1919
from operator import itemgetter
2020
# Workaround for installing PyVISA on Windows from source:
2121
os.environ["HOME"] = os.environ["USERPROFILE"]

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.