diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3a80f9c --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +SOURCES/botocore-1.8.35.tar.gz +SOURCES/futures-3.0.3.tar.gz +SOURCES/jmespath-0.9.0.tar.gz +SOURCES/s3transfer-0.1.13.tar.gz diff --git a/.python-s3transfer.metadata b/.python-s3transfer.metadata new file mode 100644 index 0000000..ac279bd --- /dev/null +++ b/.python-s3transfer.metadata @@ -0,0 +1,4 @@ +c840d5ad691cb1558d3c194b03d7059ba7c51808 SOURCES/botocore-1.8.35.tar.gz +dc5271473c4b8eda549b66339bee0f916cce1e92 SOURCES/futures-3.0.3.tar.gz +642800c1bc901a440639d5743c9cd74ba59c2d4a SOURCES/jmespath-0.9.0.tar.gz +a20649f9ae6b363fd8064b3b45c1227db8162e81 SOURCES/s3transfer-0.1.13.tar.gz diff --git a/SOURCES/botocore-1.8.35-fix_dateutil_version.patch b/SOURCES/botocore-1.8.35-fix_dateutil_version.patch new file mode 100644 index 0000000..c2d9fe7 --- /dev/null +++ b/SOURCES/botocore-1.8.35-fix_dateutil_version.patch @@ -0,0 +1,34 @@ +diff -ur botocore-1.5.3.orig/requirements.txt botocore-1.5.3/requirements.txt +--- botocore-1.5.3.orig/requirements.txt 2017-01-20 11:06:07.081344531 +0000 ++++ botocore-1.5.3/requirements.txt 2017-01-20 11:06:56.409021742 +0000 +@@ -1,5 +1,5 @@ + tox>=2.5.0,<3.0.0 +-python-dateutil>=2.1,<3.0.0 ++python-dateutil>=1.4,<3.0.0 + nose==1.3.0 + mock==1.3.0 + wheel==0.24.0 +diff -ur botocore-1.5.3.orig/setup.cfg botocore-1.5.3/setup.cfg +--- botocore-1.5.3.orig/setup.cfg 2017-01-20 11:06:07.082344504 +0000 ++++ botocore-1.5.3/setup.cfg 2017-01-20 11:07:15.994496531 +0000 +@@ -3,7 +3,7 @@ + + [metadata] + requires-dist = +- python-dateutil>=2.1,<3.0.0 ++ python-dateutil>=1.4,<3.0.0 + jmespath>=0.7.1,<1.0.0 + docutils>=0.10 + ordereddict==1.1; python_version=="2.6" +diff -ur botocore-1.5.3.orig/setup.py botocore-1.5.3/setup.py +--- botocore-1.5.3.orig/setup.py 2017-01-20 11:06:07.078344611 +0000 ++++ botocore-1.5.3/setup.py 2017-01-20 11:07:27.367191557 +0000 +@@ -6,7 +6,7 @@ + + + requires = ['jmespath>=0.7.1,<1.0.0', +- 'python-dateutil>=2.1,<3.0.0', ++ 'python-dateutil>=1.4,<3.0.0', + 'docutils>=0.10'] + + diff --git a/SOURCES/bundled-futures-botocore-jmespath.patch b/SOURCES/bundled-futures-botocore-jmespath.patch new file mode 100644 index 0000000..dba4cc0 --- /dev/null +++ b/SOURCES/bundled-futures-botocore-jmespath.patch @@ -0,0 +1,112 @@ +diff -uNr a/bundled/botocore/botocore/paginate.py b/bundled/botocore/botocore/paginate.py +--- a/bundled/botocore/botocore/paginate.py 2018-01-26 00:00:58.000000000 +0100 ++++ b/bundled/botocore/botocore/paginate.py 2018-02-12 15:17:06.811746874 +0100 +@@ -15,6 +15,8 @@ + + from botocore.compat import six + ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + import jmespath + import json + import base64 +diff -uNr a/bundled/botocore/botocore/waiter.py b/bundled/botocore/botocore/waiter.py +--- a/bundled/botocore/botocore/waiter.py 2018-01-26 00:00:58.000000000 +0100 ++++ b/bundled/botocore/botocore/waiter.py 2018-02-12 15:17:23.455515958 +0100 +@@ -10,6 +10,8 @@ + # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + # ANY KIND, either express or implied. See the License for the specific + # language governing permissions and limitations under the License. ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + import jmespath + import logging + import time +diff -uNr a/s3transfer/compat.py b/s3transfer/compat.py +--- a/s3transfer/compat.py 2016-12-16 00:54:07.000000000 +0100 ++++ b/s3transfer/compat.py 2018-02-12 15:15:17.126268646 +0100 +@@ -16,6 +16,7 @@ + import errno + import socket + ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + from botocore.compat import six + + +diff -uNr a/s3transfer/download.py b/s3transfer/download.py +--- a/s3transfer/download.py 2016-12-16 00:54:07.000000000 +0100 ++++ b/s3transfer/download.py 2018-02-12 15:15:17.127268632 +0100 +@@ -18,6 +18,8 @@ + import heapq + + ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + from botocore.compat import six + from botocore.exceptions import IncompleteReadError + from botocore.vendored.requests.packages.urllib3.exceptions import \ +diff -uNr a/s3transfer/exceptions.py b/s3transfer/exceptions.py +--- a/s3transfer/exceptions.py 2016-12-16 00:54:07.000000000 +0100 ++++ b/s3transfer/exceptions.py 2018-02-12 15:15:17.128268618 +0100 +@@ -10,6 +10,8 @@ + # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + # ANY KIND, either express or implied. See the License for the specific + # language governing permissions and limitations under the License. ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + from concurrent.futures import CancelledError + + +diff -uNr a/s3transfer/futures.py b/s3transfer/futures.py +--- a/s3transfer/futures.py 2016-12-16 00:54:07.000000000 +0100 ++++ b/s3transfer/futures.py 2018-02-12 15:15:17.128268618 +0100 +@@ -10,11 +10,12 @@ + # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + # ANY KIND, either express or implied. See the License for the specific + # language governing permissions and limitations under the License. ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + from concurrent import futures + from collections import namedtuple + import copy + import logging +-import sys + import threading + + from s3transfer.compat import MAXINT +diff -uNr a/s3transfer/__init__.py b/s3transfer/__init__.py +--- a/s3transfer/__init__.py 2016-12-16 00:54:07.000000000 +0100 ++++ b/s3transfer/__init__.py 2018-02-12 15:15:17.128268618 +0100 +@@ -131,6 +131,8 @@ + import threading + import random + import string ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + import concurrent.futures + + from botocore.compat import six +diff -uNr a/s3transfer/subscribers.py b/s3transfer/subscribers.py +--- a/s3transfer/subscribers.py 2016-12-16 00:54:07.000000000 +0100 ++++ b/s3transfer/subscribers.py 2018-02-12 15:15:17.129268604 +0100 +@@ -10,6 +10,8 @@ + # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + # ANY KIND, either express or implied. See the License for the specific + # language governing permissions and limitations under the License. ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + from botocore.compat import six + + from s3transfer.compat import accepts_kwargs +diff -uNr a/s3transfer/upload.py b/s3transfer/upload.py +--- a/s3transfer/upload.py 2016-12-16 00:54:07.000000000 +0100 ++++ b/s3transfer/upload.py 2018-02-12 15:15:17.129268604 +0100 +@@ -12,6 +12,8 @@ + # language governing permissions and limitations under the License. + import math + ++import sys ++sys.path.insert(0, '/usr/lib/fence-agents/bundled') + from botocore.compat import six + + from s3transfer.compat import seekable, readable diff --git a/SPECS/python-s3transfer.spec b/SPECS/python-s3transfer.spec new file mode 100644 index 0000000..b75bc56 --- /dev/null +++ b/SPECS/python-s3transfer.spec @@ -0,0 +1,257 @@ +%if 0%{?rhel} && 0%{?rhel} <= 7 +%bcond_with python3 +# Minimum nose version is 1.3.3, while EL7 has 1.3.0 +%bcond_with tests +%else +%bcond_without python3 +%bcond_without tests +%endif + +%global pypi_name s3transfer + +%global bundled_lib_dir bundled +# python-futures +%global futures_version 3.0.3 +%global futures_dir %{bundled_lib_dir}/futures +# python-botocore +%global botocore_version 1.8.35 +%global botocore_dir %{bundled_lib_dir}/botocore +# python-jmespath +%global jmespath_version 0.9.0 +%global jmespath_dir %{bundled_lib_dir}/jmespath + +Name: python-%{pypi_name} +Version: 0.1.13 +Release: 1%{?dist} +Summary: An Amazon S3 Transfer Manager + +License: ASL 2.0 +URL: https://github.com/boto/s3transfer +Source0: %{pypi_name}-%{version}.tar.gz +Source1: https://pypi.python.org/packages/source/f/futures/futures-%{futures_version}.tar.gz +Source2: https://pypi.io/packages/source/b/botocore/botocore-%{botocore_version}.tar.gz +Source3: https://pypi.python.org/packages/source/j/jmespath/jmespath-%{jmespath_version}.tar.gz +Patch0: bundled-futures-botocore-jmespath.patch +Patch1: botocore-1.8.35-fix_dateutil_version.patch + +BuildArch: noarch + +BuildRequires: python-devel +BuildRequires: python-setuptools +Obsoletes: python2-%{pypi_name} +%if %{with tests} +BuildRequires: python-nose +BuildRequires: python-mock +BuildRequires: python-wheel +BuildRequires: python-botocore +BuildRequires: python-coverage +BuildRequires: python-unittest2 +%endif # tests +# python-futures bundle +#Requires: python-futures +# python-botocore bundle +#Requires: python-botocore + +# python-futures bundle +Provides: bundled(python-futures) = %{futures_version} +# python-botocore bundle +Provides: bundled(python-botocore) = %{botocore_version} +# python-jmespath bundle +#Requires: python-jmespath >= 0.7.1 +Provides: bundled(python-jmespath) = %{jmespath_version} +Requires: python-dateutil >= 1.4 +Requires: python-docutils >= 0.10 + +%description +S3transfer is a Python library for managing Amazon S3 transfers. + +%if %{with python3} +%package -n python3-%{pypi_name} +Summary: An Amazon S3 Transfer Manager +BuildRequires: python3-devel +BuildRequires: python3-setuptools +%if %{with tests} +BuildRequires: python3-nose +BuildRequires: python3-mock +BuildRequires: python3-wheel +BuildRequires: python3-botocore +BuildRequires: python3-coverage +BuildRequires: python3-unittest2 +%endif # tests +Requires: python3-botocore +%{?python_provide:%python_provide python3-%{pypi_name}} + +%description -n python3-%{pypi_name} +S3transfer is a Python library for managing Amazon S3 transfers. +%endif # python3 + +%prep +%setup -q -n %{pypi_name}-%{version} +# Remove online tests (see https://github.com/boto/s3transfer/issues/8) +rm -rf tests/integration + +# bundles +mkdir -p %{bundled_lib_dir} + +# python-futures bundle +tar -xzf %SOURCE1 -C %{bundled_lib_dir} +mv %{bundled_lib_dir}/futures-%{futures_version} %{futures_dir} +cp %{futures_dir}/LICENSE futures_LICENSE + +# python-botocore bundle +tar -xzf %SOURCE2 -C %{bundled_lib_dir} +mv %{bundled_lib_dir}/botocore-%{botocore_version} %{botocore_dir} +cp %{botocore_dir}/LICENSE.txt botocore_LICENSE.txt +cp %{botocore_dir}/README.rst botocore_README.rst + +# python-jmespath bundle +tar -xzf %SOURCE3 -C %{bundled_lib_dir} +mv %{bundled_lib_dir}/jmespath-%{jmespath_version} %{jmespath_dir} +cp %{botocore_dir}/LICENSE.txt jmespath_LICENSE.txt +cp %{botocore_dir}/README.rst jmespath_README.rst + +# append bundled-directory to search path +%patch0 -p1 + +pushd %{botocore_dir} +%patch1 -p1 +sed -i -e '1 d' botocore/vendored/requests/packages/chardet/chardetect.py +sed -i -e '1 d' botocore/vendored/requests/certs.py +rm -rf botocore.egg-info +# Remove online tests +rm -rf tests/integration +popd + +pushd %{jmespath_dir} +rm -rf jmespath.egg-info +popd + +%build +%py2_build +%if %{with python3} +%py3_build +%endif # python3 + +# python-futures bundle +pushd %{futures_dir} +%{__python2} setup.py build +popd + +# python-botocore bundle +pushd %{botocore_dir} +%{__python2} setup.py build +popd + +# python-jmespath bundle +pushd %{jmespath_dir} +CFLAGS="%{optflags}" %{__python} setup.py %{?py_setup_args} build --executable="%{__python2} -s" +popd + +%install +%py2_install +%if %{with python3} +%py3_install +%endif # python3 + +# python-futures bundle +pushd %{futures_dir} +%{__python2} setup.py install -O1 --skip-build --root %{buildroot} --install-lib %{_libdir}/fence-agents/bundled +popd + +# python-botocore bundle +pushd %{botocore_dir} +%{__python2} setup.py install -O1 --skip-build --root %{buildroot} --install-lib %{_libdir}/fence-agents/bundled +popd + +# python-jmespath bundle +pushd %{jmespath_dir} +CFLAGS="%{optflags}" %{__python} setup.py %{?py_setup_args} install -O1 --skip-build --root %{buildroot} --install-lib %{_libdir}/fence-agents/bundled +mv %{buildroot}/%{_bindir}/jp.py %{buildroot}/%{_bindir}/jp.py-%{python2_version} +ln -sf %{_bindir}/jp.py-%{python2_version} %{buildroot}/%{_bindir}/jp.py-2 +ln -sf %{_bindir}/jp.py-%{python2_version} %{buildroot}/%{_bindir}/jp.py +popd + +%if %{with tests} +%check +nosetests-%{python2_version} --with-coverage --cover-erase --cover-package s3transfer --with-xunit --cover-xml -v tests/unit/ tests/functional/ +%if %{with python3} +nosetests-%{python3_version} --with-coverage --cover-erase --cover-package s3transfer --with-xunit --cover-xml -v tests/unit/ tests/functional/ +%endif # python3 +%endif # tests + +%files -n python-%{pypi_name} +%{!?_licensedir:%global license %doc} +%doc README.rst botocore_README.rst jmespath_README.rst +%license LICENSE.txt futures_LICENSE botocore_LICENSE.txt jmespath_LICENSE.txt +%{python_sitelib}/%{pypi_name} +%{python_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info +# python-futures and python-botocore bundles +%{_libdir}/fence-agents/bundled +%exclude %{_bindir}/jp.py* + +%if %{with python3} +%files -n python3-%{pypi_name} +%doc README.rst +%license LICENSE.txt +%{python3_sitelib}/%{pypi_name} +%{python3_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info +%endif # python3 + +%changelog +* Thu May 24 2018 Oyvind Albrigtsen - 0.1.13-1 +- Fix "python2-s3transfer" from EPEL issue by adding it to Obsoletes +- Rebase to v0.1.13 to fix missing "max_bandwidth" issue + + Resolves: rhbz#1576985 + Resolves: rhbz#1578083 + +* Mon Feb 12 2018 Oyvind Albrigtsen - 0.1.10-8 +- Bundle python-futures, python-botocore and python-jmespath + + Resolves: rhbz#1509441 + +* Thu Jul 27 2017 Fedora Release Engineering - 0.1.10-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 0.1.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Dec 28 2016 Fabio Alessandro Locati - 0.1.10-1 +- Update to 0.1.10 + +* Mon Dec 19 2016 Miro HronĨok - 0.1.9-2 +- Rebuild for Python 3.6 + +* Thu Oct 27 2016 Fabio Alessandro Locati - 0.1.9-1 +- Update to 0.1.9 + +* Mon Oct 10 2016 Fabio Alessandro Locati - 0.1.7-1 +- Uodate to 0.1.7 + +* Sun Oct 02 2016 Fabio Alessandro Locati - 0.1.5-1 +- Update to 0.1.5 + +* Wed Sep 28 2016 Fabio Alessandro Locati - 0.1.4-1 +- Update to 0.1.4 + +* Wed Sep 07 2016 Fabio Alessandro Locati - 0.1.3-1 +- Update to 0.1.3 + +* Thu Aug 04 2016 Fabio Alessandro Locati - 0.1.1-1 +- Update to 0.1.1 + +* Tue Aug 02 2016 Fabio Alessandro Locati - 0.1.0-1 +- Update to 0.1.0 + +* Tue Jul 19 2016 Fedora Release Engineering - 0.0.1-4 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Wed Feb 24 2016 Fabio Alessandro Locati - 0.0.1-3 +- Cleanup the spec a little bit +- Remove patch + +* Tue Feb 23 2016 Fabio Alessandro Locati - 0.0.1-2 +- Add patch to remove tests needing web connection + +* Tue Feb 23 2016 Fabio Alessandro Locati - 0.0.1-1 +- Initial package.