[python-wheel] Initial import rhbz#1035770
Bohuslav Kabrda
bkabrda at fedoraproject.org
Tue Dec 3 09:17:04 UTC 2013
commit 62eec5b56e854bdb8eb0e3f3373024d23eea65d8
Author: Slavek Kabrda <bkabrda at redhat.com>
Date: Tue Dec 3 10:16:56 2013 +0100
Initial import rhbz#1035770
.gitignore | 1 +
pydist-schema.json | 341 ++++++++++++++++++++++
python-wheel.spec | 142 +++++++++
sources | 1 +
test-1.0-py2.py3-none-win32.whl | Bin 0 -> 5226 bytes
wheel-0.22-add-test-files-to-manifest.path | 11 +
wheel-0.22-fix-tests-broken-by-keyring-fix.patch | 19 ++
wheel-0.22-legacy-keyring-compatibility.patch | 19 ++
8 files changed, 534 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index e69de29..d0e5913 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/wheel-0.22.0.tar.gz
diff --git a/pydist-schema.json b/pydist-schema.json
new file mode 100644
index 0000000..fc350bf
--- /dev/null
+++ b/pydist-schema.json
@@ -0,0 +1,341 @@
+{
+ "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"
+ },
+ "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"
+ }
+ },
+ "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"
+ },
+ "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"
+ }
+ },
+ "commands": {
+ "description": "Command line interfaces provided by this distribution",
+ "type": "object",
+ "$ref": "#/definitions/commands"
+ },
+ "exports": {
+ "description": "Other exported interfaces provided by this distribution",
+ "type": "object",
+ "$ref": "#/definitions/exports"
+ },
+ "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
+ },
+ "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
+ },
+ "extensions": {
+ "type": "object",
+ "patternProperties": {
+ "^[A-Za-z][0-9A-Za-z_]*([.][0-9A-Za-z_]*)*$": {}
+ },
+ "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
+ },
+ "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]*)*$"
+ }
+ }
+}
diff --git a/python-wheel.spec b/python-wheel.spec
new file mode 100644
index 0000000..0cd57ae
--- /dev/null
+++ b/python-wheel.spec
@@ -0,0 +1,142 @@
+# Created by pyp2rpm-1.0.1
+%global pypi_name wheel
+%global with_python3 1
+
+Name: python-%{pypi_name}
+Version: 0.22.0
+Release: 1%{?dist}
+Summary: A built-package format for Python
+
+License: MIT
+URL: http://bitbucket.org/dholth/wheel/
+Source0: https://pypi.python.org/packages/source/w/%{pypi_name}/%{pypi_name}-%{version}.tar.gz
+# Some test files are not present in tarball, so we include them separately.
+# Upstream pull request to include the files in tarball:
+# https://bitbucket.org/dholth/wheel/pull-request/34 (Patch0 below)
+# (version 0.22 doesn't have a tag, so we're using commit hash to point to the
+# correct testing wheel)
+Source1: https://bitbucket.org/dholth/wheel/src/099352e/wheel/test/test-1.0-py2.py3-none-win32.whl
+Source2: https://bitbucket.org/dholth/wheel/raw/099352e/wheel/test/pydist-schema.json
+Patch0: wheel-0.22-add-test-files-to-manifest.path
+Patch1: wheel-0.22-legacy-keyring-compatibility.patch
+Patch2: wheel-0.22-fix-tests-broken-by-keyring-fix.patch
+BuildArch: noarch
+
+BuildRequires: python-devel
+BuildRequires: python-setuptools
+
+BuildRequires: pytest
+BuildRequires: python-jsonschema
+BuildRequires: python-keyring
+
+%if %{?with_python3}
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+%endif # if with_python3
+
+
+%description
+A built-package format for Python.
+
+A wheel is a ZIP-format archive with a specially formatted filename and the
+.whl extension. It is designed to contain all the files for a PEP 376
+compatible install in a way that is very close to the on-disk format.
+
+%if 0%{?with_python3}
+%package -n python3-%{pypi_name}
+Summary: A built-package format for Python
+
+%description -n python3-%{pypi_name}
+A built-package format for Python.
+
+A wheel is a ZIP-format archive with a specially formatted filename and the
+.whl extension. It is designed to contain all the files for a PEP 376
+compatible install in a way that is very close to the on-disk format.
+
+This is package contains Python 3 version of the package.
+%endif # with_python3
+
+
+%prep
+%setup -q -n %{pypi_name}-%{version}
+
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+
+# copy test files in place
+cp %{SOURCE1} %{pypi_name}/test/
+cp %{SOURCE2} %{pypi_name}/test/
+# header files just has to be there, even empty
+touch %{pypi_name}/test/headers.dist/header.h
+
+# remove unneeded shebangs
+sed -ie '1d' %{pypi_name}/{egg2wheel,wininst2wheel}.py
+
+%if 0%{?with_python3}
+rm -rf %{py3dir}
+cp -a . %{py3dir}
+%endif # with_python3
+
+
+%build
+%{__python} setup.py build
+
+%if 0%{?with_python3}
+pushd %{py3dir}
+%{__python3} setup.py build
+popd
+%endif # with_python3
+
+
+%install
+# Must do the subpackages' install first because the scripts in /usr/bin are
+# overwritten with every setup.py install (and we want the python2 version
+# to be the default for now).
+%if 0%{?with_python3}
+pushd %{py3dir}
+%{__python3} setup.py install --skip-build --root %{buildroot}
+popd
+pushd %{buildroot}%{_bindir}
+for f in $(ls); do mv $f python3-$f; done
+popd
+%endif # with_python3
+
+%{__python} setup.py install --skip-build --root %{buildroot}
+
+
+%check
+# remove setup.cfg that makes pytest require pytest-cov (unnecessary dep)
+rm setup.cfg
+py.test --ignore build
+# no test for Python 3, no python3-jsonschema yet
+%if 0
+pushd %{py3dir}
+rm setup.cfg
+py.test-%{python3_version} --ignore build
+popd
+%endif # with_python3
+
+
+%files
+%doc LICENSE.txt CHANGES.txt README.txt
+%{_bindir}/egg2wheel
+%{_bindir}/wheel
+%{_bindir}/wininst2wheel
+%{python_sitelib}/%{pypi_name}*
+%exclude %{python_sitelib}/%{pypi_name}/test
+%if 0%{?with_python3}
+
+%files -n python3-%{pypi_name}
+%doc LICENSE.txt CHANGES.txt README.txt
+%{_bindir}/python3-egg2wheel
+%{_bindir}/python3-wheel
+%{_bindir}/python3-wininst2wheel
+%{python3_sitelib}/%{pypi_name}*
+%exclude %{python3_sitelib}/%{pypi_name}/test
+%endif # with_python3
+
+
+%changelog
+* Thu Nov 28 2013 Bohuslav Kabrda <bkabrda at redhat.com> - 0.22.0-1
+- Initial package.
diff --git a/sources b/sources
index e69de29..ffb19c8 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+16bb8eb3bdd3d93813295463bb949705 wheel-0.22.0.tar.gz
diff --git a/test-1.0-py2.py3-none-win32.whl b/test-1.0-py2.py3-none-win32.whl
new file mode 100644
index 0000000..dfd3070
Binary files /dev/null and b/test-1.0-py2.py3-none-win32.whl differ
diff --git a/wheel-0.22-add-test-files-to-manifest.path b/wheel-0.22-add-test-files-to-manifest.path
new file mode 100644
index 0000000..2f10a21
--- /dev/null
+++ b/wheel-0.22-add-test-files-to-manifest.path
@@ -0,0 +1,11 @@
+diff -r e59e807a91a8 MANIFEST.in
+--- a/MANIFEST.in Mon Sep 23 10:46:53 2013 +0200
++++ b/MANIFEST.in Thu Nov 28 12:47:15 2013 +0100
+@@ -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 --git a/wheel-0.22-fix-tests-broken-by-keyring-fix.patch b/wheel-0.22-fix-tests-broken-by-keyring-fix.patch
new file mode 100644
index 0000000..2a61c49
--- /dev/null
+++ b/wheel-0.22-fix-tests-broken-by-keyring-fix.patch
@@ -0,0 +1,19 @@
+diff -r e59e807a91a8 wheel/test/test_tool.py
+--- a/wheel/test/test_tool.py Mon Sep 23 10:46:53 2013 +0200
++++ b/wheel/test/test_tool.py Thu Nov 28 13:38:04 2013 +0100
+@@ -3,13 +3,14 @@
+ def test_keygen():
+ def get_keyring():
+ WheelKeys, keyring = tool.get_keyring()
+-
+ class WheelKeysTest(WheelKeys):
+ def save(self):
+ pass
+
+ class keyringTest:
+ backend = keyring.backend
++ class backends:
++ file = keyring.backends.file
+ @classmethod
+ def get_keyring(cls):
+ class keyringTest2:
diff --git a/wheel-0.22-legacy-keyring-compatibility.patch b/wheel-0.22-legacy-keyring-compatibility.patch
new file mode 100644
index 0000000..219915d
--- /dev/null
+++ b/wheel-0.22-legacy-keyring-compatibility.patch
@@ -0,0 +1,19 @@
+changeset: 313:e59e807a91a8
+tag: tip
+user: Pierre Jaury <pierre at jaury.eu>
+date: Mon Sep 23 10:46:53 2013 +0200
+summary: Fix #85 regarding backward compatibility with python-keyring <= 3.0
+
+diff -r bae6c45073bd -r e59e807a91a8 wheel/tool/__init__.py
+--- a/wheel/tool/__init__.py Sun Sep 15 18:08:42 2013 -0400
++++ b/wheel/tool/__init__.py Mon Sep 23 10:46:53 2013 +0200
+@@ -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__)
+
More information about the scm-commits
mailing list