Hello community,
here is the log from the commit of package python-wheel for openSUSE:Factory checked in at 2015-04-07 09:29:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-wheel (Old)
and /work/SRC/openSUSE:Factory/.python-wheel.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-wheel"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-wheel/python-wheel.changes 2014-02-12 07:08:11.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-wheel.new/python-wheel.changes 2015-04-07 09:29:25.000000000 +0200
@@ -1,0 +2,32 @@
+Wed Apr 1 21:04:26 UTC 2015 - benoit.monin@gmx.fr
+
+- update to version 0.24.0:
+ * The python tag used for pure-python packages is now .pyN (major
+ version only). This change actually occurred in 0.23.0 when the
+ --python-tag option was added, but was not explicitly mentioned
+ in the changelog then.
+ * wininst2wheel and egg2wheel removed. Use "wheel convert
+ [archive]" instead.
+ * Wheel now supports setuptools style conditional requirements via
+ the extras_require={} syntax. Separate 'extra' names from
+ conditions using the : character. Wheel's own setup.py does
+ this. (The empty-string extra is the same as install_requires.)
+ These conditional requirements should work the same whether the
+ package is installed by wheel or by setup.py.
+- additional changes from 0.23.0:
+ * Compatibiltiy tag flags added to the bdist_wheel command
+ * sdist should include files necessary for tests
+ * 'wheel convert' can now also convert unpacked eggs to wheel
+ * Rename pydist.json to metadata.json to avoid stepping on the PEP
+ * The --skip-scripts option has been removed, and not generating
+ scripts is now the default. The option was a temporary approach
+ until installers could generate scripts themselves. That is now
+ the case with pip 1.5 and later. Note that using pip 1.4 to
+ install a wheel without scripts will leave the installation
+ without entry-point wrappers. The "wheel install-scripts"
+ command can be used to generate the scripts in such cases.
+ * Thank you contributors
+- removed wininst2wheel and egg2wheel:
+ they are not in 0.24.0 anymore
+
+-------------------------------------------------------------------
Old:
----
wheel-0.22.0.tar.gz
New:
----
wheel-0.24.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-wheel.spec ++++++
--- /var/tmp/diff_new_pack.8ooODK/_old 2015-04-07 09:29:25.000000000 +0200
+++ /var/tmp/diff_new_pack.8ooODK/_new 2015-04-07 09:29:25.000000000 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-wheel
#
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python-wheel
-Version: 0.22.0
+Version: 0.24.0
Release: 0
Summary: A built-package format for Python
License: MIT
@@ -77,7 +77,7 @@
%install
python setup.py install --prefix=%{_prefix} --root=%{buildroot}
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
-for b in egg2wheel wheel wininst2wheel ; do
+for b in wheel ; do
mv %{buildroot}%{_bindir}/$b %{buildroot}%{_bindir}/$b-%{py_ver}
touch %{buildroot}%{_sysconfdir}/alternatives/$b
ln -sf %{_sysconfdir}/alternatives/$b %{buildroot}/%{_bindir}/$b
@@ -87,9 +87,7 @@
python setup.py test
%post
-update-alternatives --install %{_bindir}/wheel wheel %{_bindir}/wheel-%{py_ver} 20 \
- --slave %{_bindir}/egg2wheel egg2wheel %{_bindir}/egg2wheel-%{py_ver} \
- --slave %{_bindir}/wininst2wheel wininst2wheel %{_bindir}/wininst2wheel-%{py_ver}
+update-alternatives --install %{_bindir}/wheel wheel %{_bindir}/wheel-%{py_ver} 20
%postun
if [ $1 -eq 0 ] ; then
@@ -99,15 +97,9 @@
%files
%defattr(-,root,root,-)
%doc CHANGES.txt README.txt LICENSE.txt
-%{_bindir}/egg2wheel
-%{_bindir}/egg2wheel-%{py_ver}
%{_bindir}/wheel
%{_bindir}/wheel-%{py_ver}
-%{_bindir}/wininst2wheel
-%{_bindir}/wininst2wheel-%{py_ver}
%ghost %{_sysconfdir}/alternatives/wheel
-%ghost %{_sysconfdir}/alternatives/egg2wheel
-%ghost %{_sysconfdir}/alternatives/wininst2wheel
%{python_sitelib}/wheel-%{version}-py%{py_ver}.egg-info
%{python_sitelib}/wheel/
++++++ wheel-0.22.0.tar.gz -> wheel-0.24.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/CHANGES.txt new/wheel-0.24.0/CHANGES.txt
--- old/wheel-0.22.0/CHANGES.txt 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/CHANGES.txt 2014-07-06 18:40:16.000000000 +0200
@@ -1,3 +1,31 @@
+0.24.0
+======
+- The python tag used for pure-python packages is now .pyN (major version
+ only). This change actually occurred in 0.23.0 when the --python-tag
+ option was added, but was not explicitly mentioned in the changelog then.
+- wininst2wheel and egg2wheel removed. Use "wheel convert [archive]"
+ instead.
+- Wheel now supports setuptools style conditional requirements via the
+ extras_require={} syntax. Separate 'extra' names from conditions using
+ the : character. Wheel's own setup.py does this. (The empty-string
+ extra is the same as install_requires.) These conditional requirements
+ should work the same whether the package is installed by wheel or
+ by setup.py.
+
+0.23.0
+======
+- Compatibiltiy tag flags added to the bdist_wheel command
+- sdist should include files necessary for tests
+- 'wheel convert' can now also convert unpacked eggs to wheel
+- Rename pydist.json to metadata.json to avoid stepping on the PEP
+- The --skip-scripts option has been removed, and not generating scripts is now
+ the default. The option was a temporary approach until installers could
+ generate scripts themselves. That is now the case with pip 1.5 and later.
+ Note that using pip 1.4 to install a wheel without scripts will leave the
+ installation without entry-point wrappers. The "wheel install-scripts"
+ command can be used to generate the scripts in such cases.
+- Thank you contributors
+
0.22.0
======
- Include entry_points.txt, scripts a.k.a. commands, in experimental
@@ -10,7 +38,7 @@
- Pregenerated scripts are the default again.
- "setup.py bdist_wheel --skip-scripts" turns them off.
- setuptools is no longer a listed requirement for the 'wheel'
- package. It is of course still required in order for bdist_wheel
+ package. It is of course still required in order for bdist_wheel
to work.
- "python -m wheel" avoids importing pkg_resources until it's necessary.
@@ -117,8 +145,8 @@
0.9.5
=====
-- Wheel's own wheel file can be executed by Python, and can install itself:
- ``python wheel-0.9.5-py27-none-any/wheel install ...``
+- Wheel's own wheel file can be executed by Python, and can install itself:
+ ``python wheel-0.9.5-py27-none-any/wheel install ...``
- Use argparse; basic ``wheel install`` command should run with only stdlib
dependencies.
- Allow requires_dist in setup.cfg's [metadata] section. In addition to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/LICENSE.txt new/wheel-0.24.0/LICENSE.txt
--- old/wheel-0.22.0/LICENSE.txt 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/LICENSE.txt 2014-07-06 18:40:16.000000000 +0200
@@ -1,4 +1,4 @@
-"wheel" copyright (c) 2012 Daniel Holth and
+"wheel" copyright (c) 2012-2014 Daniel Holth and
contributors.
The MIT License
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/MANIFEST.in new/wheel-0.24.0/MANIFEST.in
--- old/wheel-0.22.0/MANIFEST.in 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/MANIFEST.in 2014-07-06 18:40:16.000000000 +0200
@@ -1,4 +1,7 @@
include wheel/*.txt *.txt *.sh
recursive-include wheel/test *.py
+include wheel/test/test-1.0-py2.py3-none-win32.whl
+include wheel/test/headers.dist/header.h
+include wheel/test/pydist-schema.json
prune wheel/test/*/dist
prune wheel/test/*/build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/PKG-INFO new/wheel-0.24.0/PKG-INFO
--- old/wheel-0.22.0/PKG-INFO 2013-09-16 00:09:16.000000000 +0200
+++ new/wheel-0.24.0/PKG-INFO 2014-07-06 18:56:22.000000000 +0200
@@ -1,8 +1,8 @@
Metadata-Version: 1.1
Name: wheel
-Version: 0.22.0
+Version: 0.24.0
Summary: A built-package format for Python.
-Home-page: http://bitbucket.org/dholth/wheel/
+Home-page: http://bitbucket.org/pypa/wheel/
Author: Daniel Holth
Author-email: dholth@fastmail.fm
License: MIT
@@ -27,7 +27,7 @@
The wheel documentation is at http://wheel.rtfd.org/. The file format
is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/).
- The reference implementation is at http://bitbucket.org/dholth/wheel/
+ The reference implementation is at https://bitbucket.org/pypa/wheel
Why not egg?
------------
@@ -49,6 +49,34 @@
+ 0.24.0
+ ======
+ - The python tag used for pure-python packages is now .pyN (major version
+ only). This change actually occurred in 0.23.0 when the --python-tag
+ option was added, but was not explicitly mentioned in the changelog then.
+ - wininst2wheel and egg2wheel removed. Use "wheel convert [archive]"
+ instead.
+ - Wheel now supports setuptools style conditional requirements via the
+ extras_require={} syntax. Separate 'extra' names from conditions using
+ the : character. Wheel's own setup.py does this. (The empty-string
+ extra is the same as install_requires.) These conditional requirements
+ should work the same whether the package is installed by wheel or
+ by setup.py.
+
+ 0.23.0
+ ======
+ - Compatibiltiy tag flags added to the bdist_wheel command
+ - sdist should include files necessary for tests
+ - 'wheel convert' can now also convert unpacked eggs to wheel
+ - Rename pydist.json to metadata.json to avoid stepping on the PEP
+ - The --skip-scripts option has been removed, and not generating scripts is now
+ the default. The option was a temporary approach until installers could
+ generate scripts themselves. That is now the case with pip 1.5 and later.
+ Note that using pip 1.4 to install a wheel without scripts will leave the
+ installation without entry-point wrappers. The "wheel install-scripts"
+ command can be used to generate the scripts in such cases.
+ - Thank you contributors
+
0.22.0
======
- Include entry_points.txt, scripts a.k.a. commands, in experimental
@@ -61,7 +89,7 @@
- Pregenerated scripts are the default again.
- "setup.py bdist_wheel --skip-scripts" turns them off.
- setuptools is no longer a listed requirement for the 'wheel'
- package. It is of course still required in order for bdist_wheel
+ package. It is of course still required in order for bdist_wheel
to work.
- "python -m wheel" avoids importing pkg_resources until it's necessary.
@@ -168,8 +196,8 @@
0.9.5
=====
- - Wheel's own wheel file can be executed by Python, and can install itself:
- ``python wheel-0.9.5-py27-none-any/wheel install ...``
+ - Wheel's own wheel file can be executed by Python, and can install itself:
+ ``python wheel-0.9.5-py27-none-any/wheel install ...``
- Use argparse; basic ``wheel install`` command should run with only stdlib
dependencies.
- Allow requires_dist in setup.cfg's [metadata] section. In addition to
@@ -263,3 +291,4 @@
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
+Classifier: Programming Language :: Python :: 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/README.txt new/wheel-0.24.0/README.txt
--- old/wheel-0.22.0/README.txt 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/README.txt 2014-07-06 18:40:16.000000000 +0200
@@ -19,7 +19,7 @@
The wheel documentation is at http://wheel.rtfd.org/. The file format
is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/).
-The reference implementation is at http://bitbucket.org/dholth/wheel/
+The reference implementation is at https://bitbucket.org/pypa/wheel
Why not egg?
------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/setup.cfg new/wheel-0.24.0/setup.cfg
--- old/wheel-0.22.0/setup.cfg 2013-09-16 00:09:16.000000000 +0200
+++ new/wheel-0.24.0/setup.cfg 2014-07-06 18:56:22.000000000 +0200
@@ -2,18 +2,9 @@
addopts = --ignore=dist --ignore=build --cov=wheel
[metadata]
-provides-extra =
- tool
- signatures
- faster-signatures
-requires-dist =
- argparse; python_version == '2.6'
- keyring; extra == 'signatures'
- dirspec; sys.platform != 'win32' and extra == 'signatures'
- ed25519ll; extra == 'faster-signatures'
license-file = LICENSE.txt
-[wheel]
+[bdist_wheel]
universal = 1
[egg_info]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/setup.py new/wheel-0.24.0/setup.py
--- old/wheel-0.22.0/setup.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/setup.py 2014-07-06 18:48:58.000000000 +0200
@@ -1,4 +1,4 @@
-import os.path, sys, codecs, re
+import os.path, codecs, re
from setuptools import setup
@@ -6,21 +6,10 @@
README = codecs.open(os.path.join(here, 'README.txt'), encoding='utf8').read()
CHANGES = codecs.open(os.path.join(here, 'CHANGES.txt'), encoding='utf8').read()
-with codecs.open(os.path.join(os.path.dirname(__file__), 'wheel', '__init__.py'),
+with codecs.open(os.path.join(os.path.dirname(__file__), 'wheel', '__init__.py'),
encoding='utf8') as version_file:
metadata = dict(re.findall(r"""__([a-z]+)__ = "([^"]+)""", version_file.read()))
-#
-# All these requirements are overridden by setup.cfg when wheel is built
-# as a wheel:
-#
-signature_reqs = ['keyring']
-if sys.platform != 'win32':
- signature_reqs.append('dirspec')
-install_requires = []
-if sys.version_info[:2] < (2, 7):
- install_requires.append('argparse')
-
setup(name='wheel',
version=metadata['version'],
description='A built-package format for Python.',
@@ -35,22 +24,24 @@
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.2",
"Programming Language :: Python :: 3.3",
+ "Programming Language :: Python :: 3.4",
],
author='Daniel Holth',
author_email='dholth@fastmail.fm',
- url='http://bitbucket.org/dholth/wheel/',
+ url='http://bitbucket.org/pypa/wheel/',
keywords=['wheel', 'packaging'],
license='MIT',
packages=[
- 'wheel',
- 'wheel.test',
- 'wheel.tool',
+ 'wheel',
+ 'wheel.test',
+ 'wheel.tool',
'wheel.signatures'
],
- install_requires=install_requires,
extras_require={
- 'signatures': signature_reqs,
- 'faster-signatures': ['ed25519ll'],
+ ':python_version=="2.6"': ['argparse'],
+ 'signatures': ['keyring'],
+ 'signatures:sys_platform!="win32"': ['pyxdg'],
+ 'faster-signatures': ['ed25519ll'],
'tool': []
},
tests_require=['jsonschema', 'pytest', 'coverage', 'pytest-cov'],
@@ -58,8 +49,6 @@
zip_safe=False,
entry_points = """\
[console_scripts]
-wininst2wheel = wheel.wininst2wheel:main
-egg2wheel = wheel.egg2wheel:main
wheel = wheel.tool:main
[distutils.commands]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/__init__.py new/wheel-0.24.0/wheel/__init__.py
--- old/wheel-0.22.0/wheel/__init__.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/__init__.py 2014-07-06 18:40:16.000000000 +0200
@@ -1,2 +1,2 @@
# __variables__ with double-quoted values will be available in setup.py:
-__version__ = "0.22.0"
+__version__ = "0.24.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/bdist_wheel.py new/wheel-0.24.0/wheel/bdist_wheel.py
--- old/wheel-0.22.0/wheel/bdist_wheel.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/bdist_wheel.py 2014-07-06 18:40:16.000000000 +0200
@@ -71,12 +71,15 @@
('group=', 'g',
"Group name used when creating a tar file"
" [default: current group]"),
- ('skip-scripts', None,
- "skip building the setuptools console_scripts",
- "(default: false)"),
+ ('universal', None,
+ "make a universal wheel"
+ " (default: false)"),
+ ('python-tag=', None,
+ "Python implementation compatibility tag"
+ " (default: py%s)" % get_impl_ver()[0]),
]
- boolean_options = ['keep-temp', 'skip-build', 'relative']
+ boolean_options = ['keep-temp', 'skip-build', 'relative', 'universal']
def initialize_options(self):
self.bdist_dir = None
@@ -92,7 +95,8 @@
self.relative = False
self.owner = None
self.group = None
- self.skip_scripts = False
+ self.universal = False
+ self.python_tag = 'py' + get_impl_ver()[0]
def finalize_options(self):
if self.bdist_dir is None:
@@ -108,6 +112,14 @@
self.root_is_purelib = self.distribution.is_pure()
+ # Support legacy [wheel] section for setting universal
+ wheel = self.distribution.get_option_dict('wheel')
+ if 'universal' in wheel:
+ # please don't define this in your global configs
+ val = wheel['universal'][1].strip()
+ if val.lower() in ('1', 'true', 'yes'):
+ self.universal = True
+
@property
def wheel_dist_name(self):
"""Return distribution full name with - replaced with _"""
@@ -117,31 +129,24 @@
def get_tag(self):
supported_tags = pep425tags.get_supported()
- purity = self.distribution.is_pure()
- impl_ver = get_impl_ver()
- abi_tag = 'none'
- plat_name = 'any'
- impl_name = 'py'
- if purity:
- wheel = self.distribution.get_option_dict('wheel')
- if 'universal' in wheel:
- # please don't define this in your global configs
- val = wheel['universal'][1].strip()
- if val.lower() in ('1', 'true', 'yes'):
- impl_name = 'py2.py3'
- impl_ver = ''
- tag = (impl_name + impl_ver, abi_tag, plat_name)
+ if self.distribution.is_pure():
+ if self.universal:
+ impl = 'py2.py3'
+ else:
+ impl = self.python_tag
+ tag = (impl, 'none', 'any')
else:
plat_name = self.plat_name
if plat_name is None:
plat_name = get_platform()
plat_name = plat_name.replace('-', '_').replace('.', '_')
impl_name = get_abbr_impl()
+ impl_ver = get_impl_ver()
# PEP 3149 -- no SOABI in Py 2
# For PyPy?
# "pp%s%s" % (sys.pypy_version_info.major,
# sys.pypy_version_info.minor)
- abi_tag = sysconfig.get_config_vars().get('SOABI', abi_tag)
+ abi_tag = sysconfig.get_config_vars().get('SOABI', 'none')
if abi_tag.startswith('cpython-'):
abi_tag = 'cp' + abi_tag.rsplit('-', 1)[-1]
@@ -176,10 +181,11 @@
install.skip_build = self.skip_build
install.warn_dir = False
- if self.skip_scripts:
- # A wheel without setuptools scripts is more cross-platform.
- install_scripts = self.reinitialize_command('install_scripts')
- install_scripts.no_ep = True
+ # A wheel without setuptools scripts is more cross-platform.
+ # Use the (undocumented) `no_ep` option to setuptools'
+ # install_scripts command to avoid creating entry point scripts.
+ install_scripts = self.reinitialize_command('install_scripts')
+ install_scripts.no_ep = True
# Use a custom scheme for the archive, because we have to decide
# at installation time which scheme to use.
@@ -281,19 +287,19 @@
return metadata['license_file'][1]
def setupcfg_requirements(self):
- """Generate requirements from setup.cfg as
+ """Generate requirements from setup.cfg as
('Requires-Dist', 'requirement; qualifier') tuples. From a metadata
section in setup.cfg:
-
+
[metadata]
provides-extra = extra1
extra2
requires-dist = requirement; qualifier
another; qualifier2
unqualified
-
+
Yields
-
+
('Provides-Extra', 'extra1'),
('Provides-Extra', 'extra2'),
('Requires-Dist', 'requirement; qualifier'),
@@ -381,8 +387,8 @@
metadata_path = os.path.join(distinfo_path, 'METADATA')
self.add_requirements(metadata_path)
- # XXX not a final specification
- metadata_json_path = os.path.join(distinfo_path, 'pydist.json')
+ # XXX intentionally a different path than the PEP.
+ metadata_json_path = os.path.join(distinfo_path, 'metadata.json')
pymeta = pkginfo_to_dict(metadata_path,
distribution=self.distribution)
@@ -393,16 +399,14 @@
description_filename)
with open(description_path, "wb") as description_file:
description_file.write(description_text.encode('utf-8'))
- pymeta['document_names'] = pymeta.get('document_names', {})
- pymeta['document_names']['description'] = description_filename
+ pymeta['extensions']['python.details']['document_names']['description'] = description_filename
# XXX heuristically copy any LICENSE/LICENSE.txt?
license = self.license_file()
if license:
license_filename = 'LICENSE.txt'
shutil.copy(license, os.path.join(self.distinfo_dir, license_filename))
- pymeta['document_names'] = pymeta.get('document_names', {})
- pymeta['document_names']['license'] = license_filename
+ pymeta['extensions']['python.details']['document_names']['license'] = license_filename
with open(metadata_json_path, "w") as metadata_json:
json.dump(pymeta, metadata_json)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/egg2wheel.py new/wheel-0.24.0/wheel/egg2wheel.py
--- old/wheel-0.22.0/wheel/egg2wheel.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/egg2wheel.py 2014-07-06 18:40:16.000000000 +0200
@@ -5,9 +5,9 @@
import tempfile
import zipfile
import wheel.bdist_wheel
+import shutil
import distutils.dist
from distutils.archive_util import make_archive
-from shutil import rmtree
from argparse import ArgumentParser
from glob import iglob
@@ -16,9 +16,20 @@
def egg2wheel(egg_path, dest_dir):
egg_info = egg_info_re.match(os.path.basename(egg_path)).groupdict()
- egg = zipfile.ZipFile(egg_path)
dir = tempfile.mkdtemp(suffix="_e2w")
- egg.extractall(dir)
+ if os.path.isfile(egg_path):
+ # assume we have a bdist_egg otherwise
+ egg = zipfile.ZipFile(egg_path)
+ egg.extractall(dir)
+ else:
+ # support buildout-style installed eggs directories
+ for pth in os.listdir(egg_path):
+ src = os.path.join(egg_path, pth)
+ if os.path.isfile(src):
+ shutil.copy2(src, dir)
+ else:
+ shutil.copytree(src, os.path.join(dir, pth))
+
dist_info = "%s-%s" % (egg_info['name'], egg_info['ver'])
abi = 'none'
pyver = egg_info['pyver'].replace('.', '')
@@ -41,7 +52,7 @@
bw.write_record(dir, dist_info_dir)
filename = make_archive(os.path.join(dest_dir, wheel_name), 'zip', root_dir=dir)
os.rename(filename, filename[:-3] + 'whl')
- rmtree(dir)
+ shutil.rmtree(dir)
def main():
parser = ArgumentParser()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/metadata.py new/wheel-0.24.0/wheel/metadata.py
--- old/wheel-0.22.0/wheel/metadata.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/metadata.py 2014-07-06 18:40:16.000000000 +0200
@@ -49,7 +49,7 @@
def handle_requires(metadata, pkg_info, key):
"""
- Place the runtime requirements from pkg_info into metadata.
+ Place the runtime requirements from pkg_info into metadata.
"""
may_requires = defaultdict(list)
for value in pkg_info.get_all(key):
@@ -85,15 +85,16 @@
def pkginfo_to_dict(path, distribution=None):
"""
Convert PKG-INFO to a prototype Metadata 2.0 (PEP 426) dict.
-
- The description is included under the key ['description'] rather than
+
+ The description is included under the key ['description'] rather than
being written to a separate file.
-
+
path: path to PKG-INFO file
distribution: optional distutils Distribution()
"""
- metadata = {"generator":"bdist_wheel (" + wheel.__version__ + ")"}
+ metadata = defaultdict(lambda: defaultdict(lambda: defaultdict(dict)))
+ metadata["generator"] = "bdist_wheel (" + wheel.__version__ + ")"
try:
unicode
pkg_info = read_pkg_info(path)
@@ -141,7 +142,10 @@
metadata['extras'].extend(pkg_info.get_all(key))
elif low_key == 'home_page':
- metadata['project_urls'] = {'Home':pkg_info[key]}
+ metadata['extensions']['python.details']['project_urls'] = {'Home':pkg_info[key]}
+
+ elif low_key == 'keywords':
+ metadata['keywords'] = KEYWORDS_RE.split(pkg_info[key])
else:
metadata[low_key] = pkg_info[key]
@@ -173,7 +177,7 @@
contact['role'] = role
contacts.append(contact)
if contacts:
- metadata['contacts'] = contacts
+ metadata['extensions']['python.details']['contacts'] = contacts
# convert entry points to exports
try:
@@ -186,17 +190,17 @@
name, export = str(item).split(' = ', 1)
exports[group][name] = export
if exports:
- metadata['exports'] = exports
+ metadata['extensions']['python.exports'] = exports
except IOError:
pass
# copy console_scripts entry points to commands
- if 'exports' in metadata:
+ if 'python.exports' in metadata['extensions']:
for (ep_script, wrap_script) in (('console_scripts', 'wrap_console'),
('gui_scripts', 'wrap_gui')):
- if ep_script in metadata['exports']:
- metadata['commands'] = metadata.get('commands', {})
- metadata['commands'][wrap_script] = metadata['exports'][ep_script]
+ if ep_script in metadata['extensions']['python.exports']:
+ metadata['extensions']['python.commands'][wrap_script] = \
+ metadata['extensions']['python.exports'][ep_script]
return metadata
@@ -231,9 +235,15 @@
requires = open(requires_path).read()
for extra, reqs in pkg_resources.split_sections(requires):
condition = ''
+ if extra and ':' in extra: # setuptools extra:condition syntax
+ extra, condition = extra.split(':', 1)
if extra:
pkg_info['Provides-Extra'] = extra
- condition = '; extra == %s' % repr(extra)
+ if condition:
+ condition += " and "
+ condition += 'extra == %s' % repr(extra)
+ if condition:
+ condition = '; ' + condition
for new_req in convert_requirements(reqs):
pkg_info['Requires-Dist'] = new_req + condition
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/test/pydist-schema.json new/wheel-0.24.0/wheel/test/pydist-schema.json
--- old/wheel-0.22.0/wheel/test/pydist-schema.json 1970-01-01 01:00:00.000000000 +0100
+++ new/wheel-0.24.0/wheel/test/pydist-schema.json 2014-07-06 18:40:16.000000000 +0200
@@ -0,0 +1,362 @@
+{
+ "id": "http://www.python.org/dev/peps/pep-0426/",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "title": "Metadata for Python Software Packages 2.0",
+ "type": "object",
+ "properties": {
+ "metadata_version": {
+ "description": "Version of the file format",
+ "type": "string",
+ "pattern": "^(\\d+(\\.\\d+)*)$"
+ },
+ "generator": {
+ "description": "Name and version of the program that produced this file.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])( \\(.*\\))?$"
+ },
+ "name": {
+ "description": "The name of the distribution.",
+ "type": "string",
+ "$ref": "#/definitions/distribution_name"
+ },
+ "version": {
+ "description": "The distribution's public version identifier",
+ "type": "string",
+ "pattern": "^(\\d+(\\.\\d+)*)((a|b|c|rc)(\\d+))?(\\.(post)(\\d+))?(\\.(dev)(\\d+))?$"
+ },
+ "source_label": {
+ "description": "A constrained identifying text string",
+ "type": "string",
+ "pattern": "^[0-9a-z_.-+]+$"
+ },
+ "source_url": {
+ "description": "A string containing a full URL where the source for this specific version of the distribution can be downloaded.",
+ "type": "string",
+ "format": "uri"
+ },
+ "summary": {
+ "description": "A one-line summary of what the distribution does.",
+ "type": "string"
+ },
+ "extras": {
+ "description": "A list of optional sets of dependencies that may be used to define conditional dependencies in \"may_require\" and similar fields.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "$ref": "#/definitions/extra_name"
+ }
+ },
+ "meta_requires": {
+ "description": "A list of subdistributions made available through this metadistribution.",
+ "type": "array",
+ "$ref": "#/definitions/dependencies"
+ },
+ "run_requires": {
+ "description": "A list of other distributions needed to run this distribution.",
+ "type": "array",
+ "$ref": "#/definitions/dependencies"
+ },
+ "test_requires": {
+ "description": "A list of other distributions needed when this distribution is tested.",
+ "type": "array",
+ "$ref": "#/definitions/dependencies"
+ },
+ "build_requires": {
+ "description": "A list of other distributions needed when this distribution is built.",
+ "type": "array",
+ "$ref": "#/definitions/dependencies"
+ },
+ "dev_requires": {
+ "description": "A list of other distributions needed when this distribution is developed.",
+ "type": "array",
+ "$ref": "#/definitions/dependencies"
+ },
+ "provides": {
+ "description": "A list of strings naming additional dependency requirements that are satisfied by installing this distribution. These strings must be of the form Name or Name (Version)",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "$ref": "#/definitions/provides_declaration"
+ }
+ },
+ "modules": {
+ "description": "A list of modules and/or packages available for import after installing this distribution.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "$ref": "#/definitions/qualified_name"
+ }
+ },
+ "namespaces": {
+ "description": "A list of namespace packages this distribution contributes to",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "$ref": "#/definitions/qualified_name"
+ }
+ },
+ "obsoleted_by": {
+ "description": "A string that indicates that this project is no longer being developed. The named project provides a substitute or replacement.",
+ "type": "string",
+ "$ref": "#/definitions/requirement"
+ },
+ "supports_environments": {
+ "description": "A list of strings specifying the environments that the distribution explicitly supports.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "$ref": "#/definitions/environment_marker"
+ }
+ },
+ "install_hooks": {
+ "description": "The install_hooks field is used to define various operations that may be invoked on a distribution in a platform independent manner.",
+ "type": "object",
+ "properties": {
+ "postinstall": {
+ "type": "string",
+ "$ref": "#/definitions/export_specifier"
+ },
+ "preuninstall": {
+ "type": "string",
+ "$ref": "#/definitions/export_specifier"
+ }
+ }
+ },
+ "extensions": {
+ "description": "Extensions to the metadata may be present in a mapping under the 'extensions' key.",
+ "type": "object",
+ "$ref": "#/definitions/extensions"
+ }
+ },
+
+ "required": ["metadata_version", "name", "version", "summary"],
+ "additionalProperties": false,
+
+ "definitions": {
+ "contact": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+ },
+ "dependencies": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "$ref": "#/definitions/dependency"
+ }
+ },
+ "dependency": {
+ "type": "object",
+ "properties": {
+ "extra": {
+ "type": "string",
+ "$ref": "#/definitions/extra_name"
+ },
+ "environment": {
+ "type": "string",
+ "$ref": "#/definitions/environment_marker"
+ },
+ "requires": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "$ref": "#/definitions/requirement"
+ }
+ }
+ },
+ "required": ["requires"],
+ "additionalProperties": false
+ },
+ "extensions": {
+ "type": "object",
+ "patternProperties": {
+ "^[A-Za-z][0-9A-Za-z_]*([.][0-9A-Za-z_]*)*$": {}
+ },
+ "properties": {
+ "python.details" : {
+ "description": "More information regarding the distribution.",
+ "type": "object",
+ "properties": {
+ "document_names": {
+ "description": "Names of supporting metadata documents",
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string",
+ "$ref": "#/definitions/document_name"
+ },
+ "changelog": {
+ "type": "string",
+ "$ref": "#/definitions/document_name"
+ },
+ "license": {
+ "type": "string",
+ "$ref": "#/definitions/document_name"
+ }
+ },
+ "additionalProperties": false
+ },
+ "keywords": {
+ "description": "A list of additional keywords to be used to assist searching for the distribution in a larger catalog.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "license": {
+ "description": "A string indicating the license covering the distribution.",
+ "type": "string"
+ },
+ "classifiers": {
+ "description": "A list of strings, with each giving a single classification value for the distribution.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "python.project" : {
+ "description": "More information regarding the creation and maintenance of the distribution.",
+ "$ref": "#/definitions/project_or_integrator"
+ },
+ "python.integrator" : {
+ "description": "More information regarding the downstream redistributor of the distribution.",
+ "$ref": "#/definitions/project_or_integrator"
+ },
+ "python.commands" : {
+ "description": "Command line interfaces provided by this distribution",
+ "type": "object",
+ "$ref": "#/definitions/commands"
+ },
+ "python.exports" : {
+ "description": "Other exported interfaces provided by this distribution",
+ "type": "object",
+ "$ref": "#/definitions/exports"
+ }
+ },
+ "additionalProperties": false
+ },
+ "commands": {
+ "type": "object",
+ "properties": {
+ "wrap_console": {
+ "type": "object",
+ "$ref": "#/definitions/command_map"
+ },
+ "wrap_gui": {
+ "type": "object",
+ "$ref": "#/definitions/command_map"
+ },
+ "prebuilt": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "$ref": "#/definitions/relative_path"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "exports": {
+ "type": "object",
+ "patternProperties": {
+ "^[A-Za-z][0-9A-Za-z_]*([.][0-9A-Za-z_]*)*$": {
+ "type": "object",
+ "patternProperties": {
+ ".": {
+ "type": "string",
+ "$ref": "#/definitions/export_specifier"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "command_map": {
+ "type": "object",
+ "patternProperties": {
+ "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$": {
+ "type": "string",
+ "$ref": "#/definitions/export_specifier"
+ }
+ },
+ "additionalProperties": false
+ },
+ "project_or_integrator" : {
+ "type": "object",
+ "properties" : {
+ "contacts": {
+ "description": "A list of contributor entries giving the recommended contact points for getting more information about the project.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "$ref": "#/definitions/contact"
+ }
+ },
+ "contributors": {
+ "description": "A list of contributor entries for other contributors not already listed as current project points of contact.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "$ref": "#/definitions/contact"
+ }
+ },
+ "project_urls": {
+ "description": "A mapping of arbitrary text labels to additional URLs relevant to the project.",
+ "type": "object"
+ }
+ }
+ },
+ "distribution_name": {
+ "type": "string",
+ "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$"
+ },
+ "requirement": {
+ "type": "string"
+ },
+ "provides_declaration": {
+ "type": "string"
+ },
+ "environment_marker": {
+ "type": "string"
+ },
+ "document_name": {
+ "type": "string"
+ },
+ "extra_name" : {
+ "type": "string",
+ "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$"
+ },
+ "relative_path" : {
+ "type": "string"
+ },
+ "export_specifier": {
+ "type": "string",
+ "pattern": "^([A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*)(:[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*)?(\\[[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?\\])?$"
+ },
+ "qualified_name" : {
+ "type": "string",
+ "pattern": "^[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*$"
+ },
+ "prefixed_name" : {
+ "type": "string",
+ "pattern": "^[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_0-9]*)*$"
+ }
+ }
+}
Files old/wheel-0.22.0/wheel/test/test-1.0-py2.py3-none-win32.whl and new/wheel-0.24.0/wheel/test/test-1.0-py2.py3-none-win32.whl differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_basic.py new/wheel-0.24.0/wheel/test/test_basic.py
--- old/wheel-0.22.0/wheel/test/test_basic.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/test/test_basic.py 2014-07-06 18:40:16.000000000 +0200
@@ -94,11 +94,22 @@
This also verifies the integrity of our testing wheel files.
"""
for dist in test_distributions:
- distdir = pkg_resources.resource_filename('wheel.test',
+ distdir = pkg_resources.resource_filename('wheel.test',
os.path.join(dist, 'dist'))
for wheelfile in (w for w in os.listdir(distdir) if w.endswith('.whl')):
wheel.tool.unpack(os.path.join(distdir, wheelfile), distdir)
+def test_no_scripts():
+ """Make sure entry point scripts are not generated."""
+ dist = "complex-dist"
+ basedir = pkg_resources.resource_filename('wheel.test', dist)
+ for (dirname, subdirs, filenames) in os.walk(basedir):
+ for filename in filenames:
+ if filename.endswith('.whl'):
+ whl = ZipFile(os.path.join(dirname, filename))
+ for entry in whl.infolist():
+ assert not '.data/scripts/' in entry.filename
+
def test_pydist():
"""Make sure pydist.json exists and validates against our schema."""
# XXX this test may need manual cleanup of older wheels
@@ -118,11 +129,11 @@
if filename.endswith('.whl'):
whl = ZipFile(os.path.join(dirname, filename))
for entry in whl.infolist():
- if entry.filename.endswith('/pydist.json'):
+ if entry.filename.endswith('/metadata.json'):
pymeta = json.loads(whl.read(entry).decode('utf-8'))
jsonschema.validate(pymeta, pymeta_schema)
valid += 1
- assert valid > 0, "No pydist.json found"
+ assert valid > 0, "No metadata.json found"
def test_util():
"""Test functions in util.py."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_tagopt.py new/wheel-0.24.0/wheel/test/test_tagopt.py
--- old/wheel-0.22.0/wheel/test/test_tagopt.py 1970-01-01 01:00:00.000000000 +0100
+++ new/wheel-0.24.0/wheel/test/test_tagopt.py 2014-07-06 18:40:16.000000000 +0200
@@ -0,0 +1,112 @@
+"""
+Tests for the bdist_wheel tag options (--python-tag and --universal)
+"""
+
+import sys
+import shutil
+import pytest
+import py.path
+import tempfile
+import subprocess
+
+SETUP_PY = """\
+from setuptools import setup
+
+setup(
+ name="Test",
+ version="1.0",
+ author_email="author@example.com",
+ py_modules=["test"],
+)
+"""
+
+@pytest.fixture
+def temp_pkg(request):
+ tempdir = tempfile.mkdtemp()
+ def fin():
+ shutil.rmtree(tempdir)
+ request.addfinalizer(fin)
+ temppath = py.path.local(tempdir)
+ temppath.join('test.py').write('print("Hello, world")')
+ temppath.join('setup.py').write(SETUP_PY)
+ return temppath
+
+def test_default_tag(temp_pkg):
+ subprocess.check_call([sys.executable, 'setup.py', 'bdist_wheel'],
+ cwd=str(temp_pkg))
+ dist_dir = temp_pkg.join('dist')
+ assert dist_dir.check(dir=1)
+ wheels = dist_dir.listdir()
+ assert len(wheels) == 1
+ assert wheels[0].basename.startswith('Test-1.0-py%s-' % (sys.version[0],))
+ assert wheels[0].ext == '.whl'
+
+def test_explicit_tag(temp_pkg):
+ subprocess.check_call(
+ [sys.executable, 'setup.py', 'bdist_wheel', '--python-tag=py32'],
+ cwd=str(temp_pkg))
+ dist_dir = temp_pkg.join('dist')
+ assert dist_dir.check(dir=1)
+ wheels = dist_dir.listdir()
+ assert len(wheels) == 1
+ assert wheels[0].basename.startswith('Test-1.0-py32-')
+ assert wheels[0].ext == '.whl'
+
+def test_universal_tag(temp_pkg):
+ subprocess.check_call(
+ [sys.executable, 'setup.py', 'bdist_wheel', '--universal'],
+ cwd=str(temp_pkg))
+ dist_dir = temp_pkg.join('dist')
+ assert dist_dir.check(dir=1)
+ wheels = dist_dir.listdir()
+ assert len(wheels) == 1
+ assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
+ assert wheels[0].ext == '.whl'
+
+def test_universal_beats_explicit_tag(temp_pkg):
+ subprocess.check_call(
+ [sys.executable, 'setup.py', 'bdist_wheel', '--universal', '--python-tag=py32'],
+ cwd=str(temp_pkg))
+ dist_dir = temp_pkg.join('dist')
+ assert dist_dir.check(dir=1)
+ wheels = dist_dir.listdir()
+ assert len(wheels) == 1
+ assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
+ assert wheels[0].ext == '.whl'
+
+def test_universal_in_setup_cfg(temp_pkg):
+ temp_pkg.join('setup.cfg').write('[bdist_wheel]\nuniversal=1')
+ subprocess.check_call(
+ [sys.executable, 'setup.py', 'bdist_wheel'],
+ cwd=str(temp_pkg))
+ dist_dir = temp_pkg.join('dist')
+ assert dist_dir.check(dir=1)
+ wheels = dist_dir.listdir()
+ assert len(wheels) == 1
+ assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
+ assert wheels[0].ext == '.whl'
+
+def test_pythontag_in_setup_cfg(temp_pkg):
+ temp_pkg.join('setup.cfg').write('[bdist_wheel]\npython_tag=py32')
+ subprocess.check_call(
+ [sys.executable, 'setup.py', 'bdist_wheel'],
+ cwd=str(temp_pkg))
+ dist_dir = temp_pkg.join('dist')
+ assert dist_dir.check(dir=1)
+ wheels = dist_dir.listdir()
+ assert len(wheels) == 1
+ assert wheels[0].basename.startswith('Test-1.0-py32-')
+ assert wheels[0].ext == '.whl'
+
+def test_legacy_wheel_section_in_setup_cfg(temp_pkg):
+ temp_pkg.join('setup.cfg').write('[wheel]\nuniversal=1')
+ subprocess.check_call(
+ [sys.executable, 'setup.py', 'bdist_wheel'],
+ cwd=str(temp_pkg))
+ dist_dir = temp_pkg.join('dist')
+ assert dist_dir.check(dir=1)
+ wheels = dist_dir.listdir()
+ assert len(wheels) == 1
+ assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
+ assert wheels[0].ext == '.whl'
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_tool.py new/wheel-0.24.0/wheel/test/test_tool.py
--- old/wheel-0.22.0/wheel/test/test_tool.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/test/test_tool.py 2014-07-06 18:40:16.000000000 +0200
@@ -10,6 +10,8 @@
class keyringTest:
backend = keyring.backend
+ class backends:
+ file = keyring.backends.file
@classmethod
def get_keyring(cls):
class keyringTest2:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/tool/__init__.py new/wheel-0.24.0/wheel/tool/__init__.py
--- old/wheel-0.22.0/wheel/tool/__init__.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/tool/__init__.py 2014-07-06 18:47:02.000000000 +0200
@@ -30,7 +30,7 @@
from ..signatures import keys
import keyring
except ImportError:
- raise WheelError("Install wheel[signatures] (requires keyring, dirspec) for signatures.")
+ raise WheelError("Install wheel[signatures] (requires keyring, pyxdg) for signatures.")
return keys.WheelKeys, keyring
def keygen(get_keyring=get_keyring):
@@ -47,7 +47,7 @@
kr = keyring.get_keyring()
kr.set_password("wheel", vk, sk)
sys.stdout.write("Created Ed25519 keypair with vk={0}\n".format(vk))
- if isinstance(kr, keyring.backend.BasicFileKeyring):
+ if isinstance(kr, keyring.backends.file.BaseKeyring):
sys.stdout.write("in {0}\n".format(kr.file_path))
else:
sys.stdout.write("in %r\n" % kr.__class__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/util.py new/wheel-0.24.0/wheel/util.py
--- old/wheel-0.22.0/wheel/util.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/util.py 2014-07-06 18:40:16.000000000 +0200
@@ -6,7 +6,7 @@
import json
import hashlib
-__all__ = ['urlsafe_b64encode', 'urlsafe_b64decode', 'utf8',
+__all__ = ['urlsafe_b64encode', 'urlsafe_b64decode', 'utf8',
'to_json', 'from_json', 'matches_requirement']
def urlsafe_b64encode(data):
@@ -118,11 +118,11 @@
yield path
else:
def save_config_path(*resource):
- import dirspec.basedir
- return dirspec.basedir.save_config_path(*resource)
+ import xdg.BaseDirectory
+ return xdg.BaseDirectory.save_config_path(*resource)
def load_config_paths(*resource):
- import dirspec.basedir
- return dirspec.basedir.load_config_paths(*resource)
+ import xdg.BaseDirectory
+ return xdg.BaseDirectory.load_config_paths(*resource)
def matches_requirement(req, wheels):
"""List of wheels matching a requirement.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/PKG-INFO new/wheel-0.24.0/wheel.egg-info/PKG-INFO
--- old/wheel-0.22.0/wheel.egg-info/PKG-INFO 2013-09-16 00:09:16.000000000 +0200
+++ new/wheel-0.24.0/wheel.egg-info/PKG-INFO 2014-07-06 18:56:21.000000000 +0200
@@ -1,8 +1,8 @@
Metadata-Version: 1.1
Name: wheel
-Version: 0.22.0
+Version: 0.24.0
Summary: A built-package format for Python.
-Home-page: http://bitbucket.org/dholth/wheel/
+Home-page: http://bitbucket.org/pypa/wheel/
Author: Daniel Holth
Author-email: dholth@fastmail.fm
License: MIT
@@ -27,7 +27,7 @@
The wheel documentation is at http://wheel.rtfd.org/. The file format
is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/).
- The reference implementation is at http://bitbucket.org/dholth/wheel/
+ The reference implementation is at https://bitbucket.org/pypa/wheel
Why not egg?
------------
@@ -49,6 +49,34 @@
+ 0.24.0
+ ======
+ - The python tag used for pure-python packages is now .pyN (major version
+ only). This change actually occurred in 0.23.0 when the --python-tag
+ option was added, but was not explicitly mentioned in the changelog then.
+ - wininst2wheel and egg2wheel removed. Use "wheel convert [archive]"
+ instead.
+ - Wheel now supports setuptools style conditional requirements via the
+ extras_require={} syntax. Separate 'extra' names from conditions using
+ the : character. Wheel's own setup.py does this. (The empty-string
+ extra is the same as install_requires.) These conditional requirements
+ should work the same whether the package is installed by wheel or
+ by setup.py.
+
+ 0.23.0
+ ======
+ - Compatibiltiy tag flags added to the bdist_wheel command
+ - sdist should include files necessary for tests
+ - 'wheel convert' can now also convert unpacked eggs to wheel
+ - Rename pydist.json to metadata.json to avoid stepping on the PEP
+ - The --skip-scripts option has been removed, and not generating scripts is now
+ the default. The option was a temporary approach until installers could
+ generate scripts themselves. That is now the case with pip 1.5 and later.
+ Note that using pip 1.4 to install a wheel without scripts will leave the
+ installation without entry-point wrappers. The "wheel install-scripts"
+ command can be used to generate the scripts in such cases.
+ - Thank you contributors
+
0.22.0
======
- Include entry_points.txt, scripts a.k.a. commands, in experimental
@@ -61,7 +89,7 @@
- Pregenerated scripts are the default again.
- "setup.py bdist_wheel --skip-scripts" turns them off.
- setuptools is no longer a listed requirement for the 'wheel'
- package. It is of course still required in order for bdist_wheel
+ package. It is of course still required in order for bdist_wheel
to work.
- "python -m wheel" avoids importing pkg_resources until it's necessary.
@@ -168,8 +196,8 @@
0.9.5
=====
- - Wheel's own wheel file can be executed by Python, and can install itself:
- ``python wheel-0.9.5-py27-none-any/wheel install ...``
+ - Wheel's own wheel file can be executed by Python, and can install itself:
+ ``python wheel-0.9.5-py27-none-any/wheel install ...``
- Use argparse; basic ``wheel install`` command should run with only stdlib
dependencies.
- Allow requires_dist in setup.cfg's [metadata] section. In addition to
@@ -263,3 +291,4 @@
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
+Classifier: Programming Language :: Python :: 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/SOURCES.txt new/wheel-0.24.0/wheel.egg-info/SOURCES.txt
--- old/wheel-0.22.0/wheel.egg-info/SOURCES.txt 2013-09-16 00:09:16.000000000 +0200
+++ new/wheel-0.24.0/wheel.egg-info/SOURCES.txt 2014-07-06 18:56:22.000000000 +0200
@@ -31,16 +31,20 @@
wheel/signatures/ed25519py.py
wheel/signatures/keys.py
wheel/test/__init__.py
+wheel/test/pydist-schema.json
+wheel/test/test-1.0-py2.py3-none-win32.whl
wheel/test/test_basic.py
wheel/test/test_install.py
wheel/test/test_keys.py
wheel/test/test_paths.py
wheel/test/test_ranking.py
wheel/test/test_signatures.py
+wheel/test/test_tagopt.py
wheel/test/test_tool.py
wheel/test/test_wheelfile.py
wheel/test/complex-dist/setup.py
wheel/test/complex-dist/complexdist/__init__.py
+wheel/test/headers.dist/header.h
wheel/test/headers.dist/headersdist.py
wheel/test/headers.dist/setup.py
wheel/test/simple.dist/setup.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/entry_points.txt new/wheel-0.24.0/wheel.egg-info/entry_points.txt
--- old/wheel-0.22.0/wheel.egg-info/entry_points.txt 2013-09-16 00:09:16.000000000 +0200
+++ new/wheel-0.24.0/wheel.egg-info/entry_points.txt 2014-07-06 18:56:21.000000000 +0200
@@ -1,6 +1,4 @@
[console_scripts]
-wininst2wheel = wheel.wininst2wheel:main
-egg2wheel = wheel.egg2wheel:main
wheel = wheel.tool:main
[distutils.commands]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/requires.txt new/wheel-0.24.0/wheel.egg-info/requires.txt
--- old/wheel-0.22.0/wheel.egg-info/requires.txt 2013-09-16 00:09:16.000000000 +0200
+++ new/wheel-0.24.0/wheel.egg-info/requires.txt 2014-07-06 18:56:21.000000000 +0200
@@ -5,7 +5,12 @@
[signatures]
keyring
-dirspec
[faster-signatures]
-ed25519ll
\ No newline at end of file
+ed25519ll
+
+[:python_version=="2.6"]
+argparse
+
+[signatures:sys_platform!="win32"]
+pyxdg
\ No newline at end of file