Date: Wednesday, February 20, 2019 @ 11:54:40 Author: foxxx0 Revision: 434677
upgpkg: python-websocket-client 0.54.0-2 add patch for EINTR handling from: https://github.com/websocket-client/websocket-client/pull/528 Added: python-websocket-client/trunk/retry-connect-on-EINTR.patch Modified: python-websocket-client/trunk/PKGBUILD ------------------------------+ PKGBUILD | 38 +++++++++++++--------- retry-connect-on-EINTR.patch | 68 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 15 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2019-02-20 10:50:49 UTC (rev 434676) +++ PKGBUILD 2019-02-20 11:54:40 UTC (rev 434677) @@ -1,40 +1,48 @@ # Maintainer: Felix Yan <[email protected]> +# Contributor: Thore Bödecker <[email protected]> # Contributor: Matmas <[email protected]> # Contributor: Thomas Gubler <[email protected]> # Contributor: Daniel YC Lin <dlin.tw at gmail> # Contributor: Florian Bruhin <[email protected]> -pkgname=(python-websocket-client python2-websocket-client) +_pkgbase='websocket-client' +__pkgbase="${_pkgbase//-/_}" +pkgname=("python-${_pkgbase}" "python2-${_pkgbase}") pkgver=0.54.0 -pkgrel=1 +pkgrel=2 pkgdesc="WebSocket client library for Python" arch=(any) -url="https://github.com/liris/websocket-client" +url="https://github.com/${_pkgbase}/${_pkgbase}" license=('LGPL') makedepends=('python-setuptools' 'python2-setuptools' 'python-six' 'python2-six') -source=(https://pypi.io/packages/source/w/websocket-client/websocket_client-$pkgver.tar.gz) -sha512sums=('ba4dfb6b879ec88ca446f44a77b91bbace55faa1a276f493174f3dc5b96b4d400d43c886798666da98e331610f71b4629f894d97f4614acf8d64affe8370bfec') +source=("https://pypi.io/packages/source/w/${_pkgbase}/${__pkgbase}-${pkgver}.tar.gz" + 'retry-connect-on-EINTR.patch') +sha512sums=('ba4dfb6b879ec88ca446f44a77b91bbace55faa1a276f493174f3dc5b96b4d400d43c886798666da98e331610f71b4629f894d97f4614acf8d64affe8370bfec' + '51c1c84de6f6c7600aa4bbacb923908acd69b4ae2dc21e0861c9f3e14e339580b0b094991821c2b34277fb427d4cbbd2407360316b267a3e67354ca89725c50c') prepare() { # Not sure why the conditions are not working :/ - sed -i "s/'backports.ssl_match_hostname'//" websocket_client-$pkgver/setup.py + sed -i "s/'backports.ssl_match_hostname'//" "${srcdir}/${__pkgbase}-${pkgver}/setup.py" - cp -a websocket_client-$pkgver{,-py2} + cd "${srcdir}/${__pkgbase}-${pkgver}" + patch -p1 -N -l -i "${srcdir}/retry-connect-on-EINTR.patch" + + cp -a "${srcdir}/${__pkgbase}-${pkgver}"{,-py2} } build() { - cd "$srcdir"/websocket_client-$pkgver + cd "${srcdir}/${__pkgbase}-${pkgver}" python setup.py build - cd "$srcdir"/websocket_client-$pkgver-py2 + cd "${srcdir}/${__pkgbase}-${pkgver}-py2" python2 setup.py build } check() { - cd "$srcdir"/websocket_client-$pkgver + cd "${srcdir}/${__pkgbase}-${pkgver}" python setup.py test - cd "$srcdir"/websocket_client-$pkgver-py2 + cd "${srcdir}/${__pkgbase}-${pkgver}-py2" python2 setup.py test } @@ -41,17 +49,17 @@ package_python-websocket-client() { depends=('python-six') - cd websocket_client-$pkgver + cd "${srcdir}/${__pkgbase}-${pkgver}" python setup.py install --root="$pkgdir" --optimize=1 - install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" } package_python2-websocket-client() { depends=('python2-six') - cd websocket_client-$pkgver-py2 + cd "${srcdir}/${__pkgbase}-${pkgver}-py2" python2 setup.py install --root="$pkgdir" --optimize=1 - install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" mv "$pkgdir"/usr/bin/wsdump{,2}.py } Added: retry-connect-on-EINTR.patch =================================================================== --- retry-connect-on-EINTR.patch (rev 0) +++ retry-connect-on-EINTR.patch 2019-02-20 11:54:40 UTC (rev 434677) @@ -0,0 +1,68 @@ +From 9a146e32e153fa1e0111b216f32c4b0e35ec9c12 Mon Sep 17 00:00:00 2001 +From: Trygve Aaberge <[email protected]> +Date: Tue, 19 Feb 2019 23:55:59 +0100 +Subject: [PATCH] Retry connect on "Interrupted system call" + +When connecting to a socket, EINTR ("Interrupted system call") may be +raised if the application receives a signal at the same time. Prior to +Python 3.5, applications has to handle this themselves by retrying the +connection. For more details, see https://www.python.org/dev/peps/pep-0475/ + +Fixes #527 +--- + websocket/_http.py | 38 ++++++++++++++++++++++---------------- + 1 file changed, 22 insertions(+), 16 deletions(-) + +diff --git a/websocket/_http.py b/websocket/_http.py +index e7f1e2e..dd982db 100644 +--- a/websocket/_http.py ++++ b/websocket/_http.py +@@ -166,26 +166,32 @@ def _open_socket(addrinfo_list, sockopt, timeout): + sock.setsockopt(*opts) + + address = addrinfo[4] +- try: +- sock.connect(address) +- err = None +- except ProxyConnectionError as error: +- err = WebSocketProxyException(str(error)) +- err.remote_ip = str(address[0]) +- continue +- except socket.error as error: +- error.remote_ip = str(address[0]) ++ err = None ++ while not err: + try: +- eConnRefused = (errno.ECONNREFUSED, errno.WSAECONNREFUSED) +- except: +- eConnRefused = (errno.ECONNREFUSED, ) +- if error.errno in eConnRefused: +- err = error ++ sock.connect(address) ++ except ProxyConnectionError as error: ++ err = WebSocketProxyException(str(error)) ++ err.remote_ip = str(address[0]) + continue ++ except socket.error as error: ++ error.remote_ip = str(address[0]) ++ try: ++ eConnRefused = (errno.ECONNREFUSED, errno.WSAECONNREFUSED) ++ except: ++ eConnRefused = (errno.ECONNREFUSED, ) ++ if error.errno == errno.EINTR: ++ continue ++ elif error.errno in eConnRefused: ++ err = error ++ continue ++ else: ++ raise error + else: +- raise error ++ break + else: +- break ++ continue ++ break + else: + raise err +
