Skip to content

Commit d1dc3b7

Browse files
committed
[GR-47452] Support wheel 0.40
PullRequest: graalpython/2880
2 parents 0be6a19 + 9627f33 commit d1dc3b7

31 files changed

+419
-286
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ workingsets.xml
2121
GRAALPYTHON.dist
2222
GRAALPYTHON_UNIT_TESTS.dist
2323
mx.graalpython/eclipse-launches
24-
asv
2524
*.json
2625
!**/resources/*.json
2726
!graalpython/lib-graalpython/modules/standalone/shared/native-image-resources.json

graalpython/com.oracle.graal.python.test/src/tests/patched_package/patches/patched_package/whl/patched_package-1.1.0.dir

Lines changed: 0 additions & 1 deletion
This file was deleted.

graalpython/com.oracle.graal.python.test/src/tests/patched_package/patches/patched_package/whl/patched_package-1.1.0.patch

Lines changed: 0 additions & 6 deletions
This file was deleted.

graalpython/com.oracle.graal.python.test/src/tests/patched_package/setup.py

Lines changed: 0 additions & 58 deletions
This file was deleted.

graalpython/com.oracle.graal.python.test/src/tests/patched_package/src/patched_package/__init__.py

Lines changed: 0 additions & 41 deletions
This file was deleted.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
2+
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3+
#
4+
# The Universal Permissive License (UPL), Version 1.0
5+
#
6+
# Subject to the condition set forth below, permission is hereby granted to any
7+
# person obtaining a copy of this software, associated documentation and/or
8+
# data (collectively the "Software"), free of charge and under any and all
9+
# copyright rights in the Software, and any and all patent rights owned or
10+
# freely licensable by each licensor hereunder covering either (i) the
11+
# unmodified Software as contributed to or provided by such licensor, or (ii)
12+
# the Larger Works (as defined below), to deal in both
13+
#
14+
# (a) the Software, and
15+
#
16+
# (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
17+
# one is included with the Software each a "Larger Work" to which the Software
18+
# is contributed by such licensors),
19+
#
20+
# without restriction, including without limitation the rights to copy, create
21+
# derivative works of, display, perform, and distribute the Software and make,
22+
# use, sell, offer for sale, import, export, have made, and have sold the
23+
# Software and the Larger Work(s), and to sublicense the foregoing rights on
24+
# either these or other terms.
25+
#
26+
# This license is subject to the following condition:
27+
#
28+
# The above copyright notice and either this complete permission notice or at a
29+
# minimum a reference to the UPL must be included in all copies or substantial
30+
# portions of the Software.
31+
#
32+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
33+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
34+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
35+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
36+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
37+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
38+
# SOFTWARE.
39+
import sys
40+
41+
from pathlib import Path
42+
43+
if sys.implementation.name == 'graalpy':
44+
import ensurepip
45+
46+
bundled_dir = Path(ensurepip.__file__).parent / '_bundled'
47+
pip_wheel = next(bundled_dir.glob('pip-*.whl'))
48+
sys.path.append(str(pip_wheel))
49+
from pip._vendor import tomli
50+
from pip._vendor.packaging.specifiers import SpecifierSet
51+
52+
patch_dir = Path(__graalpython__.core_home) / 'patches'
53+
54+
55+
def validate_metadata(package_dir, metadata):
56+
if unexpected_keys := set(metadata) - {'rules', 'add-sources'}:
57+
assert False, f"Unexpected top-level metadata keys: {unexpected_keys}"
58+
patches = set()
59+
if rules := metadata.get('rules'):
60+
for rule in rules:
61+
if unexpected_keys := set(rule) - {'version', 'patch', 'subdir', 'dist-type', 'install-priority'}:
62+
assert False, f"Unexpected rule keys: {unexpected_keys}"
63+
if patch := rule.get('patch'):
64+
patch_path = package_dir / patch
65+
assert patch_path.is_file(), f"Patch file does not exists: {patch_path}"
66+
patches.add(patch_path)
67+
if install_priority := rule.get('install-priority'):
68+
assert isinstance(install_priority, int), "'rules.install_priority' must be an int"
69+
if dist_type := rule.get('dist-type'):
70+
assert dist_type in ('wheel', 'sdist'), "'rules.dist_type' must be on of 'wheel', 'sdist'"
71+
if version := rule.get('version'):
72+
# Just try that it doesn't raise
73+
SpecifierSet(version)
74+
for file in package_dir.iterdir():
75+
assert file.name == 'metadata.toml' or file in patches, f"Dangling file in patch directory: {file}"
76+
if add_sources := metadata.get('add-sources'):
77+
for add_source in add_sources:
78+
if unexpected_keys := set(add_source) - {'version', 'url'}:
79+
assert False, f"Unexpected add_source keys: {unexpected_keys}"
80+
assert add_source.get('version'), f"Missing 'add_sources.version' key in {package_dir}"
81+
assert add_source.get('url'), f"Missing 'add_sources.url' key in {package_dir}"
82+
83+
84+
def test_patch_metadata():
85+
for package_dir in patch_dir.iterdir():
86+
if package_dir.is_dir():
87+
if (metadata_path := package_dir / 'metadata.toml').is_file():
88+
with open(metadata_path, 'rb') as f:
89+
metadata = tomli.load(f)
90+
validate_metadata(package_dir, metadata)
91+
else:
92+
assert False, f"Patch directory without metadata: {package_dir}"

0 commit comments

Comments
 (0)