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&param=value' or  
URL(surl).query_string == 'param=value&other=%2A'
-    assert SafeModURL(surl).query_string == 'other=*&param=value' or 
SafeModURL(surl).query_string == 'param=value&other=*'
-    URL.quoting_safe = '*'
-    assert URL(surl).query_string == 'other=*&param=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&param2=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&param=asdfa)
-
     You can change attributes.
     >>> url.host = 'infrae.com'
     >>> url
     URL(http://infrae.com/urls?auth_token=asdfaisdfuasdf&param=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

Reply via email to