Hello community,

here is the log from the commit of package speedtest-cli for openSUSE:Factory 
checked in at 2019-10-23 15:50:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/speedtest-cli (Old)
 and      /work/SRC/openSUSE:Factory/.speedtest-cli.new.2352 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "speedtest-cli"

Wed Oct 23 15:50:59 2019 rev:11 rq:741881 version:2.1.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/speedtest-cli/speedtest-cli.changes      
2019-03-28 22:49:04.915050445 +0100
+++ /work/SRC/openSUSE:Factory/.speedtest-cli.new.2352/speedtest-cli.changes    
2019-10-23 15:51:08.782713806 +0200
@@ -1,0 +2,8 @@
+Tue Oct 22 14:07:28 UTC 2019 - Martin Pluskal <[email protected]>
+
+- Update to version 2.1.2:
+  * Prevent warnings on Python3.8
+  * Fix proxy support
+  * Fix --single to ensure threads are not started until a position in the 
queue is available
+
+-------------------------------------------------------------------

Old:
----
  speedtest-cli-2.1.1.tar.gz

New:
----
  speedtest-cli-2.1.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ speedtest-cli.spec ++++++
--- /var/tmp/diff_new_pack.Dw5H1E/_old  2019-10-23 15:51:09.714714813 +0200
+++ /var/tmp/diff_new_pack.Dw5H1E/_new  2019-10-23 15:51:09.718714818 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package speedtest-cli
 #
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,18 +12,18 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 %define oname   speedtest_cli
 Name:           speedtest-cli
-Version:        2.1.1
+Version:        2.1.2
 Release:        0
 Summary:        Command line interface for testing internet bandwidth
 License:        Apache-2.0
 Group:          System/Benchmark
-Url:            https://github.com/sivel/speedtest-cli
+URL:            https://github.com/sivel/speedtest-cli
 Source0:        
https://github.com/sivel/%{name}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
 BuildRequires:  python-rpm-macros
 BuildRequires:  python3-base
@@ -49,7 +49,8 @@
   %{buildroot}%{_mandir}/man1/speedtest.1
 
 %files
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
 %{_bindir}/speedtest
 %{_bindir}/%{name}
 %{_mandir}/man1/speedtest.1%{ext_man}

++++++ speedtest-cli-2.1.1.tar.gz -> speedtest-cli-2.1.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/speedtest-cli-2.1.1/.travis.yml 
new/speedtest-cli-2.1.2/.travis.yml
--- old/speedtest-cli-2.1.1/.travis.yml 2019-03-12 17:01:31.000000000 +0100
+++ new/speedtest-cli-2.1.2/.travis.yml 2019-08-22 16:48:18.000000000 +0200
@@ -1,4 +1,6 @@
 language: python
+sudo: required
+dist: xenial
 
 addons:
   apt:
@@ -33,8 +35,13 @@
       env: TOXENV=py35
     - python: 3.6
       env: TOXENV=py36
+    - python: 3.7
+      env: TOXENV=py37
+    - python: 3.8-dev
+      env: TOXENV=py38
     - python: pypy
       env: TOXENV=pypy
+      dist: trusty
 
 before_install:
   - if [[ $(echo "$TOXENV" | egrep -c "py35") != 0 ]]; then pyenv global 
system 3.5; fi;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/speedtest-cli-2.1.1/speedtest.py 
new/speedtest-cli-2.1.2/speedtest.py
--- old/speedtest-cli-2.1.1/speedtest.py        2019-03-12 17:01:31.000000000 
+0100
+++ new/speedtest-cli-2.1.2/speedtest.py        2019-08-22 16:48:18.000000000 
+0200
@@ -36,7 +36,7 @@
     gzip = None
     GZIP_BASE = object
 
-__version__ = '2.1.1'
+__version__ = '2.1.2'
 
 
 class FakeShutdownEvent(object):
@@ -53,6 +53,9 @@
 # Some global variables we use
 DEBUG = False
 _GLOBAL_DEFAULT_TIMEOUT = object()
+PY25PLUS = sys.version_info[:2] >= (2, 5)
+PY26PLUS = sys.version_info[:2] >= (2, 6)
+PY32PLUS = sys.version_info[:2] >= (3, 2)
 
 # Begin import game to handle Python 2 and Python 3
 try:
@@ -64,14 +67,15 @@
         json = None
 
 try:
-    import xml.etree.cElementTree as ET
-except ImportError:
+    import xml.etree.ElementTree as ET
     try:
-        import xml.etree.ElementTree as ET
+        from xml.etree.ElementTree import _Element as ET_Element
     except ImportError:
-        from xml.dom import minidom as DOM
-        from xml.parsers.expat import ExpatError
-        ET = None
+        pass
+except ImportError:
+    from xml.dom import minidom as DOM
+    from xml.parsers.expat import ExpatError
+    ET = None
 
 try:
     from urllib2 import (urlopen, Request, HTTPError, URLError,
@@ -262,6 +266,16 @@
             write(arg)
         write(end)
 
+if PY32PLUS:
+    etree_iter = ET.Element.iter
+elif PY25PLUS:
+    etree_iter = ET_Element.getiterator
+
+if PY26PLUS:
+    thread_is_alive = threading.Thread.is_alive
+else:
+    thread_is_alive = threading.Thread.isAlive
+
 
 # Exception "constants" to support Python 2 through Python 3
 try:
@@ -399,6 +413,8 @@
         source_address = kwargs.pop('source_address', None)
         timeout = kwargs.pop('timeout', 10)
 
+        self._tunnel_host = None
+
         HTTPConnection.__init__(self, *args, **kwargs)
 
         self.source_address = source_address
@@ -419,17 +435,23 @@
                 self.source_address
             )
 
+        if self._tunnel_host:
+            self._tunnel()
+
 
 if HTTPSConnection:
-    class SpeedtestHTTPSConnection(HTTPSConnection,
-                                   SpeedtestHTTPConnection):
+    class SpeedtestHTTPSConnection(HTTPSConnection):
         """Custom HTTPSConnection to support source_address across
         Python 2.4 - Python 3
         """
+        default_port = 443
+
         def __init__(self, *args, **kwargs):
             source_address = kwargs.pop('source_address', None)
             timeout = kwargs.pop('timeout', 10)
 
+            self._tunnel_host = None
+
             HTTPSConnection.__init__(self, *args, **kwargs)
 
             self.timeout = timeout
@@ -437,14 +459,30 @@
 
         def connect(self):
             "Connect to a host on a given (SSL) port."
+            try:
+                self.sock = socket.create_connection(
+                    (self.host, self.port),
+                    self.timeout,
+                    self.source_address
+                )
+            except (AttributeError, TypeError):
+                self.sock = create_connection(
+                    (self.host, self.port),
+                    self.timeout,
+                    self.source_address
+                )
 
-            SpeedtestHTTPConnection.connect(self)
+            if self._tunnel_host:
+                self._tunnel()
 
             if ssl:
                 try:
                     kwargs = {}
                     if hasattr(ssl, 'SSLContext'):
-                        kwargs['server_hostname'] = self.host
+                        if self._tunnel_host:
+                            kwargs['server_hostname'] = self._tunnel_host
+                        else:
+                            kwargs['server_hostname'] = self.host
                     self.sock = self._context.wrap_socket(self.sock, **kwargs)
                 except AttributeError:
                     self.sock = ssl.wrap_socket(self.sock)
@@ -1262,7 +1300,7 @@
                             raise SpeedtestServersError(
                                 'Malformed speedtest.net server list: %s' % e
                             )
-                        elements = root.getiterator('server')
+                        elements = etree_iter(root, 'server')
                     except AttributeError:
                         try:
                             root = DOM.parseString(serversxml)
@@ -1482,6 +1520,9 @@
                 build_request(url, bump=i, secure=self._secure)
             )
 
+        max_threads = threads or self.config['threads']['download']
+        in_flight = {'threads': 0}
+
         def producer(q, requests, request_count):
             for i, request in enumerate(requests):
                 thread = HTTPDownloader(
@@ -1492,21 +1533,26 @@
                     opener=self._opener,
                     shutdown_event=self._shutdown_event
                 )
+                while in_flight['threads'] >= max_threads:
+                    timeit.time.sleep(0.001)
                 thread.start()
                 q.put(thread, True)
+                in_flight['threads'] += 1
                 callback(i, request_count, start=True)
 
         finished = []
 
         def consumer(q, request_count):
+            _is_alive = thread_is_alive
             while len(finished) < request_count:
                 thread = q.get(True)
-                while thread.isAlive():
-                    thread.join(timeout=0.1)
+                while _is_alive(thread):
+                    thread.join(timeout=0.001)
+                in_flight['threads'] -= 1
                 finished.append(sum(thread.result))
                 callback(thread.i, request_count, end=True)
 
-        q = Queue(threads or self.config['threads']['download'])
+        q = Queue(max_threads)
         prod_thread = threading.Thread(target=producer,
                                        args=(q, requests, request_count))
         cons_thread = threading.Thread(target=consumer,
@@ -1514,10 +1560,11 @@
         start = timeit.default_timer()
         prod_thread.start()
         cons_thread.start()
-        while prod_thread.isAlive():
-            prod_thread.join(timeout=0.1)
-        while cons_thread.isAlive():
-            cons_thread.join(timeout=0.1)
+        _is_alive = thread_is_alive
+        while _is_alive(prod_thread):
+            prod_thread.join(timeout=0.001)
+        while _is_alive(cons_thread):
+            cons_thread.join(timeout=0.001)
 
         stop = timeit.default_timer()
         self.results.bytes_received = sum(finished)
@@ -1566,6 +1613,9 @@
                 )
             )
 
+        max_threads = threads or self.config['threads']['upload']
+        in_flight = {'threads': 0}
+
         def producer(q, requests, request_count):
             for i, request in enumerate(requests[:request_count]):
                 thread = HTTPUploader(
@@ -1577,17 +1627,22 @@
                     opener=self._opener,
                     shutdown_event=self._shutdown_event
                 )
+                while in_flight['threads'] >= max_threads:
+                    timeit.time.sleep(0.001)
                 thread.start()
                 q.put(thread, True)
+                in_flight['threads'] += 1
                 callback(i, request_count, start=True)
 
         finished = []
 
         def consumer(q, request_count):
+            _is_alive = thread_is_alive
             while len(finished) < request_count:
                 thread = q.get(True)
-                while thread.isAlive():
-                    thread.join(timeout=0.1)
+                while _is_alive(thread):
+                    thread.join(timeout=0.001)
+                in_flight['threads'] -= 1
                 finished.append(thread.result)
                 callback(thread.i, request_count, end=True)
 
@@ -1599,9 +1654,10 @@
         start = timeit.default_timer()
         prod_thread.start()
         cons_thread.start()
-        while prod_thread.isAlive():
+        _is_alive = thread_is_alive
+        while _is_alive(prod_thread):
             prod_thread.join(timeout=0.1)
-        while cons_thread.isAlive():
+        while _is_alive(cons_thread):
             cons_thread.join(timeout=0.1)
 
         stop = timeit.default_timer()


Reply via email to