Skip to content

Commit c768e36

Browse files
committed
Fix #238: Add build tag to wheel metadata if specified.
1 parent c6fc08e commit c768e36

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

CHANGES.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ Released: Not yet.
1010

1111
- Add the ``interpret_parsed`` function.
1212

13+
- wheel
14+
15+
- Fix #238: Add build tag to wheel metadata if specified.
16+
17+
1318
0.3.9
1419
~~~~~
1520

distlib/wheel.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,8 @@ def build(self, paths, tags=None, wheel_version=None):
453453
'Generator: distlib %s' % __version__,
454454
'Root-Is-Purelib: %s' % is_pure,
455455
]
456+
if self.buildver:
457+
wheel_metadata.append('Build: %s' % self.buildver)
456458
for pyver, abi, arch in self.tags:
457459
wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch))
458460
p = os.path.join(distinfo, 'WHEEL')

tests/test_wheel.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from compat import unittest
1818
from support import DistlibTestCase
1919

20-
from distlib import DistlibException
20+
from distlib import __version__, DistlibException
2121
from distlib.compat import ZipFile, sysconfig, fsencode
2222
from distlib.database import DistributionPath
2323
from distlib.manifest import Manifest
@@ -405,6 +405,33 @@ def check_built_wheel(self, wheel, expected):
405405
expected = b'#!python\n' + expected
406406
self.assertTrue(data, expected)
407407

408+
def check_built_metadata(self, wheel):
409+
# Check the metadata of the built wheel (see #238).
410+
name, version = wheel.name, wheel.version
411+
fn = os.path.join(wheel.dirname, wheel.filename)
412+
self.assertTrue(os.path.exists(fn))
413+
arcname = '%s-%s.dist-info/WHEEL' % (name, version)
414+
with ZipFile(fn, 'r') as zf:
415+
with zf.open(arcname) as bf:
416+
data = bf.read().decode('utf-8')
417+
if wheel.arch[0] == 'any':
418+
is_pure = 'true'
419+
else:
420+
is_pure = 'false'
421+
expected = {
422+
'Wheel-Version': '%d.%d' % wheel.wheel_version,
423+
'Generator': 'distlib %s' % __version__,
424+
'Root-Is-Purelib': is_pure,
425+
'Build': '1foobar',
426+
'Tag': '%s-%s-%s' % (wheel.pyver[0], wheel.abi[0], wheel.arch[0]),
427+
}
428+
actual = {}
429+
for line in data.splitlines():
430+
i = line.find(':')
431+
key, value = line[:i], line[i + 1:].lstrip()
432+
actual[key] = value
433+
self.assertEqual(actual, expected)
434+
408435
def test_build_tags(self):
409436
workdir = tempfile.mkdtemp()
410437
self.addCleanup(shutil.rmtree, workdir)
@@ -453,14 +480,17 @@ def test_build_tags(self):
453480
self.check_built_wheel(wheel, expected)
454481

455482
# Make a non-pure wheel with default tags
483+
# On this last build in the test, set a buildver and check the metadata
456484
paths.pop('purelib')
457485
paths['platlib'] = platlib
486+
wheel.buildver = '1foobar'
458487
wheel.build(paths)
459488
expected['pyver'] = [IMPVER]
460489
expected['abi'] = [ABI]
461490
expected['arch'] = [ARCH]
462-
expected['filename'] = 'dummy-0.1-%s-%s-%s.whl' % (IMPVER, ABI, ARCH)
491+
expected['filename'] = 'dummy-0.1-%s-%s-%s-%s.whl' % (wheel.buildver, IMPVER, ABI, ARCH)
463492
self.check_built_wheel(wheel, expected)
493+
self.check_built_metadata(wheel)
464494

465495
def do_build_and_install(self, dist):
466496
srcdir = tempfile.mkdtemp()

0 commit comments

Comments
 (0)