1
from io import StringIO
6
from .distribution import Distribution
7
from .distribution import must_decode
8
from .distribution import parse
11
class Wheel(Distribution):
13
def __init__(self, filename, metadata_version=None):
14
self.filename = filename
15
self.metadata_version = metadata_version
16
self.extractMetadata()
19
fqn = os.path.abspath(os.path.normpath(self.filename))
20
if not os.path.exists(fqn):
21
raise ValueError('No such file: %s' % fqn)
23
if fqn.endswith('.whl'):
24
archive = zipfile.ZipFile(fqn)
25
names = archive.namelist()
28
return archive.read(name)
30
raise ValueError('Not a known archive format: %s' % fqn)
33
tuples = [x.split('/') for x in names if 'METADATA' in x]
34
schwarz = sorted([(len(x), x) for x in tuples])
35
for path in [x[1] for x in schwarz]:
36
candidate = '/'.join(path)
37
data = read_file(candidate)
38
if b'Metadata-Version' in data:
43
raise ValueError('No METADATA in archive: %s' % fqn)
45
def parse(self, data):
46
super(Wheel, self).parse(data)
47
fp = StringIO(must_decode(data))
49
self.description = msg.get_payload()