[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