Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-geventhttpclient for
openSUSE:Factory checked in at 2021-02-16 22:34:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-geventhttpclient (Old)
and /work/SRC/openSUSE:Factory/.python-geventhttpclient.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-geventhttpclient"
Tue Feb 16 22:34:46 2021 rev:5 rq:872871 version:1.4.5
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-geventhttpclient/python-geventhttpclient.changes
2020-12-16 10:59:45.595527011 +0100
+++
/work/SRC/openSUSE:Factory/.python-geventhttpclient.new.28504/python-geventhttpclient.changes
2021-02-16 22:35:01.549540827 +0100
@@ -1,0 +2,8 @@
+Tue Feb 16 14:50:32 UTC 2021 - Ben Greiner <[email protected]>
+
+- Update to 1.4.5
+ * Don't auto parse query string. Add params keyword argument.
+- don't try to set a nonexistend attribute for a test
+ gh#gwik/geventhttpclient#137
+
+-------------------------------------------------------------------
Old:
----
geventhttpclient-1.4.4.tar.gz
New:
----
geventhttpclient-1.4.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-geventhttpclient.spec ++++++
--- /var/tmp/diff_new_pack.CmDRDR/_old 2021-02-16 22:35:02.185541674 +0100
+++ /var/tmp/diff_new_pack.CmDRDR/_new 2021-02-16 22:35:02.189541679 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-geventhttpclient
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-geventhttpclient
-Version: 1.4.4
+Version: 1.4.5
Release: 0
Summary: HTTP client library for gevent
License: MIT
@@ -58,6 +58,8 @@
%prep
%autosetup -p1 -n geventhttpclient-%{version}
+# don't try to set this nonexistent attribute -- gh#gwik/geventhttpclient#137
+sed -i '/sock.last_seen_sni/ d' src/geventhttpclient/tests/test_ssl.py
%build
%python_build
++++++ geventhttpclient-1.4.4.tar.gz -> geventhttpclient-1.4.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/geventhttpclient-1.4.4/MANIFEST.in
new/geventhttpclient-1.4.5/MANIFEST.in
--- old/geventhttpclient-1.4.4/MANIFEST.in 2020-07-05 19:44:57.000000000
+0200
+++ new/geventhttpclient-1.4.5/MANIFEST.in 2020-12-05 17:16:36.000000000
+0100
@@ -7,3 +7,4 @@
include LICENSE-MIT
include README.mdown
include CHANGELOG
+include pytest.ini
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/geventhttpclient-1.4.4/PKG-INFO
new/geventhttpclient-1.4.5/PKG-INFO
--- old/geventhttpclient-1.4.4/PKG-INFO 2020-07-05 19:48:02.137912300 +0200
+++ new/geventhttpclient-1.4.5/PKG-INFO 2020-12-05 17:19:08.273149700 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: geventhttpclient
-Version: 1.4.4
+Version: 1.4.5
Summary: http client library for gevent
Home-page: http://github.com/gwik/geventhttpclient
Author: Antonin Amand
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/geventhttpclient-1.4.4/pytest.ini
new/geventhttpclient-1.4.5/pytest.ini
--- old/geventhttpclient-1.4.4/pytest.ini 1970-01-01 01:00:00.000000000
+0100
+++ new/geventhttpclient-1.4.5/pytest.ini 2020-12-05 17:16:36.000000000
+0100
@@ -0,0 +1,3 @@
+[pytest]
+markers =
+ online: tests which require internet access
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/geventhttpclient-1.4.4/setup.py
new/geventhttpclient-1.4.5/setup.py
--- old/geventhttpclient-1.4.4/setup.py 2020-07-05 19:44:57.000000000 +0200
+++ new/geventhttpclient-1.4.5/setup.py 2020-12-05 17:16:36.000000000 +0100
@@ -43,7 +43,7 @@
]
setup(name='geventhttpclient',
- version = '1.4.4',
+ version = '1.4.5',
description = 'http client library for gevent',
long_description = DESC,
url="http://github.com/gwik/geventhttpclient",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/geventhttpclient-1.4.4/src/geventhttpclient/__init__.py
new/geventhttpclient-1.4.5/src/geventhttpclient/__init__.py
--- old/geventhttpclient-1.4.4/src/geventhttpclient/__init__.py 2020-07-05
19:44:57.000000000 +0200
+++ new/geventhttpclient-1.4.5/src/geventhttpclient/__init__.py 2020-12-05
17:16:36.000000000 +0100
@@ -1,6 +1,6 @@
# package
-__version__ = "1.4.4"
+__version__ = "1.4.5"
from geventhttpclient.client import HTTPClient
from geventhttpclient.url import URL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/geventhttpclient-1.4.4/src/geventhttpclient/tests/test_url.py
new/geventhttpclient-1.4.5/src/geventhttpclient/tests/test_url.py
--- old/geventhttpclient-1.4.4/src/geventhttpclient/tests/test_url.py
2020-07-05 19:44:57.000000000 +0200
+++ new/geventhttpclient-1.4.5/src/geventhttpclient/tests/test_url.py
2020-12-05 17:16:36.000000000 +0100
@@ -9,8 +9,7 @@
assert url.path == '/subdir/file.py'
assert url.host == 'getgauss.com'
assert url.port == 80
- assert url['param'] == 'value'
- assert url['other'] == 'true'
+ assert url.query_string == 'param=value&other=true'
assert url.fragment == 'frag'
def test_path_only():
@@ -18,14 +17,29 @@
assert url.host == ''
assert url.port == None
assert url.path == '/path/to/something'
- assert url['param'] == 'value'
- assert url['other'] == 'true'
+ assert url.query_string == 'param=value&other=true'
+
+def test_params():
+ url = URL(url_full, params={"pp":"hello"})
+ assert url.path == '/subdir/file.py'
+ assert url.host == 'getgauss.com'
+ assert url.port == 80
+ assert url.query_string == 'param=value&other=true&pp=hello'
+ assert url.fragment == 'frag'
+
+def test_params_urlencoded():
+ url = URL(url_full, params={"a/b":"c/d"})
+ assert url.path == '/subdir/file.py'
+ assert url.host == 'getgauss.com'
+ assert url.port == 80
+ assert url.query_string == 'param=value&other=true&a%2Fb=c%2Fd'
+ assert url.fragment == 'frag'
def test_empty():
url = URL()
assert url.host == ''
assert url.port == 80
- assert url.query == {}
+ assert url.query_string == ''
assert url.fragment == ''
assert url.netloc == ''
assert str(url) == 'http:///'
@@ -46,7 +60,7 @@
assert updated.host == url.host
assert updated.port == url.port
assert updated.path == '/test.html'
- assert updated.query == {}
+ assert updated.query_string == ''
assert updated.fragment == ''
def test_redirection_rel_path():
@@ -57,7 +71,7 @@
assert updated.port == url.port
assert updated.path.startswith('/subdir/')
assert updated.path.endswith(redir.split('?', 1)[0])
- assert updated.query == {'key': 'val'}
+ assert updated.query_string == 'key=val'
assert updated.fragment == ''
def test_redirection_full_path():
@@ -69,16 +83,10 @@
assert getattr(updated, attr) == getattr(url_full2, attr)
assert str(url_full2) == url_full2_plain
-def test_set_safe_encoding():
- class SafeModURL(URL):
- quoting_safe = '*'
- surl = '/path/to/something?param=value&other=*'
-
- assert URL(surl).query_string == 'other=%2A¶m=value' or
URL(surl).query_string == 'param=value&other=%2A'
- assert SafeModURL(surl).query_string == 'other=*¶m=value' or
SafeModURL(surl).query_string == 'param=value&other=*'
- URL.quoting_safe = '*'
- assert URL(surl).query_string == 'other=*¶m=value' or
URL(surl).query_string == 'param=value&other=*'
- URL.quoting_safe = ''
+
+def test_params():
+ assert URL("/some/url", params={"a":"b", "c":2}).query_string == "a=b&c=2"
+
def test_equality():
assert URL('https://example.com/') != URL('http://example.com/')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/geventhttpclient-1.4.4/src/geventhttpclient/tests/test_useragent.py
new/geventhttpclient-1.4.5/src/geventhttpclient/tests/test_useragent.py
--- old/geventhttpclient-1.4.4/src/geventhttpclient/tests/test_useragent.py
2020-07-05 19:44:57.000000000 +0200
+++ new/geventhttpclient-1.4.5/src/geventhttpclient/tests/test_useragent.py
2020-12-05 17:16:36.000000000 +0100
@@ -56,6 +56,13 @@
return [b"redirected"]
return wsgi_handler
+def check_querystring():
+ def wsgi_handler(env, start_response):
+ querystring = env["QUERY_STRING"]
+ start_response('200 OK', [("Content-type", "text/plaim")])
+ return [querystring.encode("utf-8")]
+ return wsgi_handler
+
def set_cookie():
def wsgi_handler(env, start_response):
start_response('200 OK', [('Set-Cookie', 'testcookie=testdata')])
@@ -100,6 +107,17 @@
assert resp.status_code == 200
assert b"redirected" == resp.content
+def test_params():
+ with wsgiserver(check_querystring()):
+ resp = UserAgent().urlopen('http://127.0.0.1:54323/?param1=b',
params={"param2":"hello"})
+ assert resp.status_code == 200
+ assert resp.content == b"param1=b¶m2=hello"
+
+def test_params_quoted():
+ with wsgiserver(check_querystring()):
+ resp = UserAgent().urlopen('http://127.0.0.1:54323/?a/b',
params={"path":"/"})
+ assert resp.status_code == 200
+ assert resp.content == b"a/b&path=%2F"
def test_server_error_with_bytes():
with wsgiserver(internal_server_error()):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/geventhttpclient-1.4.4/src/geventhttpclient/url.py
new/geventhttpclient-1.4.5/src/geventhttpclient/url.py
--- old/geventhttpclient-1.4.4/src/geventhttpclient/url.py 2020-07-05
19:44:57.000000000 +0200
+++ new/geventhttpclient-1.4.5/src/geventhttpclient/url.py 2020-12-05
17:16:36.000000000 +0100
@@ -1,10 +1,14 @@
import six
if six.PY3:
from urllib import parse as urlparse
+ from urllib.parse import urlencode
from urllib.parse import quote_plus
+ from collections.abc import Mapping
+ basestring = (str, bytes)
else:
import urlparse
- from urllib import quote_plus
+ from urllib import quote_plus, urlencode
+ from collections import Mapping
DEFAULT_PORTS = {
'http': 80,
@@ -12,6 +16,32 @@
}
+def to_key_val_list(value):
+ """Take an object and test to see if it can be represented as a
+ dictionary. If it can be, return a list of tuples, e.g.,
+ ::
+ >>> to_key_val_list([('key', 'val')])
+ [('key', 'val')]
+ >>> to_key_val_list({'key': 'val'})
+ [('key', 'val')]
+ >>> to_key_val_list('string')
+ Traceback (most recent call last):
+ ...
+ ValueError: cannot encode objects that are not 2-tuples
+ :rtype: list
+ """
+ if value is None:
+ return None
+
+ if isinstance(value, (str, bytes, bool, int)):
+ raise ValueError('cannot encode objects that are not 2-tuples')
+
+ if isinstance(value, Mapping):
+ value = value.items()
+
+ return list(value)
+
+
class URL(object):
""" A mutable URL class
@@ -28,21 +58,16 @@
>>> str(url)
'http://getgauss.com/urls?param=asdfa'
- You can manipulate query arguments.
- >>> url.query['auth_token'] = 'asdfaisdfuasdf'
- >>> url
- URL(http://getgauss.com/urls?auth_token=asdfaisdfuasdf¶m=asdfa)
-
You can change attributes.
>>> url.host = 'infrae.com'
>>> url
URL(http://infrae.com/urls?auth_token=asdfaisdfuasdf¶m=asdfa)
"""
- __slots__ = ('scheme', 'host', 'port', 'path', 'query', 'fragment',
'user', 'password')
+ __slots__ = ('scheme', 'host', 'port', 'path', 'query', 'fragment',
'user', 'password', 'params')
quoting_safe = ''
- def __init__(self, url=None):
+ def __init__(self, url=None, params=None):
if url is not None:
scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
else:
@@ -81,13 +106,9 @@
self.password = password
self.path = path or ''
-
- self.query = dict()
- for key, value in six.iteritems(urlparse.parse_qs(query)):
- if len(value) > 1:
- self.query[key] = value
- else:
- self.query[key] = value[0]
+
+ self.query = query
+ self.params = params
@property
def netloc(self):
@@ -133,21 +154,40 @@
def __eq__(self, other):
return str(self) == str(other)
-
+
+ @staticmethod
+ def _encode_params(data):
+ """Encode parameters in a piece of data.
+ Will successfully encode parameters when passed as a dict or a list of
+ 2-tuples.
+ """
+
+ if isinstance(data, (str, bytes)):
+ return data
+ elif hasattr(data, 'read'):
+ return data
+ elif hasattr(data, '__iter__'):
+ result = []
+ for k, vs in to_key_val_list(data):
+ if isinstance(vs, basestring) or not hasattr(vs, '__iter__'):
+ vs = [vs]
+ for v in vs:
+ if v is not None:
+ result.append(
+ (k.encode('utf-8') if isinstance(k, str) else k,
+ v.encode('utf-8') if isinstance(v, str) else v))
+ return urlencode(result, doseq=True)
+ else:
+ return data
+
@property
def query_string(self):
- params = []
- for key, value in six.iteritems(self.query):
- if isinstance(value, list):
- for item in value:
- params.append("%s=%s" % (
- quote_plus(key), quote_plus(str(item),
safe=self.quoting_safe)))
- else:
- params.append("%s=%s" % (
- quote_plus(key), quote_plus(str(value),
safe=self.quoting_safe)))
- if params:
- return "&".join(params)
- return ''
+ query = []
+ if self.query:
+ query.append(self.query)
+ if self.params:
+ query.append(self._encode_params(self.params))
+ return "&".join(query)
@property
def request_uri(self):
@@ -156,16 +196,6 @@
return self.path
return self.path + '?' + query
- def __getitem__(self, key):
- return self.query[key]
-
- def get(self, key):
- return self.query.get(key)
-
- def __setitem__(self, key, value):
- self.query[key] = value
- return value
-
def append_to_path(self, value):
if value.startswith('/'):
if self.path.endswith('/'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/geventhttpclient-1.4.4/src/geventhttpclient/useragent.py
new/geventhttpclient-1.4.5/src/geventhttpclient/useragent.py
--- old/geventhttpclient-1.4.4/src/geventhttpclient/useragent.py
2020-07-05 19:44:57.000000000 +0200
+++ new/geventhttpclient-1.4.5/src/geventhttpclient/useragent.py
2020-12-05 17:16:36.000000000 +0100
@@ -66,7 +66,8 @@
""" urllib / cookielib compatible request class.
See also: http://docs.python.org/library/cookielib.html
"""
- def __init__(self, url, method='GET', headers=None, payload=None):
+ def __init__(self, url, method='GET', headers=None, payload=None,
params=None):
+ self.params = params
self.set_url(url)
self.original_host = self.url_split.host
self.method = method
@@ -79,7 +80,7 @@
self.url_split = url
else:
self.url = url
- self.url_split = URL(self.url)
+ self.url_split = URL(self.url, params=self.params)
def get_full_url(self):
return self.url
@@ -276,7 +277,7 @@
def __del__(self):
self.close()
- def _make_request(self, url, method='GET', headers=None, payload=None):
+ def _make_request(self, url, method='GET', headers=None, payload=None,
params=None):
req_headers = self.default_headers.copy()
if headers:
req_headers.update(headers)
@@ -294,7 +295,7 @@
# See restkit for some example implementation
# TODO: Implement it
raise NotImplementedError
- return self.request_type(url, method=method, headers=req_headers,
payload=payload)
+ return self.request_type(url, method=method, headers=req_headers,
payload=payload, params=params)
def _urlopen(self, request):
client = self.clientpool.get_client(request.url_split)
@@ -331,7 +332,7 @@
raise RetriesExceeded(url, self.max_retries, original=last_error)
def urlopen(self, url, method='GET', response_codes=valid_response_codes,
- headers=None, payload=None, to_string=False,
debug_stream=None, **kwargs):
+ headers=None, payload=None, to_string=False,
debug_stream=None, params=None, **kwargs):
""" Open an URL, do retries and redirects and verify the status code
"""
# POST or GET parameters can be passed in **kwargs
@@ -341,7 +342,7 @@
elif isinstance(payload, dict):
payload.update(kwargs)
- req = self._make_request(url, method=method, headers=headers,
payload=payload)
+ req = self._make_request(url, method=method, headers=headers,
payload=payload, params=params)
for retry in xrange(self.max_retries):
if retry > 0 and self.retry_delay:
# Don't wait the first time and skip if no delay specified
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/geventhttpclient-1.4.4/src/geventhttpclient.egg-info/PKG-INFO
new/geventhttpclient-1.4.5/src/geventhttpclient.egg-info/PKG-INFO
--- old/geventhttpclient-1.4.4/src/geventhttpclient.egg-info/PKG-INFO
2020-07-05 19:48:02.000000000 +0200
+++ new/geventhttpclient-1.4.5/src/geventhttpclient.egg-info/PKG-INFO
2020-12-05 17:19:08.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: geventhttpclient
-Version: 1.4.4
+Version: 1.4.5
Summary: http client library for gevent
Home-page: http://github.com/gwik/geventhttpclient
Author: Antonin Amand
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/geventhttpclient-1.4.4/src/geventhttpclient.egg-info/SOURCES.txt
new/geventhttpclient-1.4.5/src/geventhttpclient.egg-info/SOURCES.txt
--- old/geventhttpclient-1.4.4/src/geventhttpclient.egg-info/SOURCES.txt
2020-07-05 19:48:02.000000000 +0200
+++ new/geventhttpclient-1.4.5/src/geventhttpclient.egg-info/SOURCES.txt
2020-12-05 17:19:08.000000000 +0100
@@ -1,6 +1,7 @@
LICENSE-MIT
MANIFEST.in
README.mdown
+pytest.ini
setup.py
ext/Python_compat.h
ext/_parser.c