summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--setup.py3
-rwxr-xr-xspeedtest.py55
2 files changed, 35 insertions, 23 deletions
diff --git a/setup.py b/setup.py
index a617be4..f3d21ad 100644
--- a/setup.py
+++ b/setup.py
@@ -92,5 +92,8 @@ setup(
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
+ 'Programming Language :: Python :: 3.8',
+ 'Programming Language :: Python :: 3.9',
+ 'Programming Language :: Python :: 3.10',
]
)
diff --git a/speedtest.py b/speedtest.py
index a33296d..186b529 100755
--- a/speedtest.py
+++ b/speedtest.py
@@ -15,18 +15,18 @@
# License for the specific language governing permissions and limitations
# under the License.
-import os
-import re
import csv
-import sys
-import math
+import datetime
import errno
+import math
+import os
+import platform
+import re
import signal
import socket
-import timeit
-import datetime
-import platform
+import sys
import threading
+import timeit
import xml.parsers.expat
try:
@@ -36,7 +36,7 @@ except ImportError:
gzip = None
GZIP_BASE = object
-__version__ = '2.1.3'
+__version__ = '2.1.4b1'
class FakeShutdownEvent(object):
@@ -49,6 +49,8 @@ class FakeShutdownEvent(object):
"Dummy method to always return false"""
return False
+ is_set = isSet
+
# Some global variables we use
DEBUG = False
@@ -56,6 +58,7 @@ _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)
+PY310PLUS = sys.version_info[:2] >= (3, 10)
# Begin import game to handle Python 2 and Python 3
try:
@@ -266,17 +269,6 @@ else:
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:
import ssl
@@ -293,6 +285,23 @@ except ImportError:
ssl = None
HTTP_ERRORS = (HTTPError, URLError, socket.error, BadStatusLine)
+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
+
+
+def event_is_set(event):
+ try:
+ return event.is_set()
+ except AttributeError:
+ return event.isSet()
+
class SpeedtestException(Exception):
"""Base exception for this module"""
@@ -769,7 +778,7 @@ def print_dots(shutdown_event):
status
"""
def inner(current, total, start=False, end=False):
- if shutdown_event.isSet():
+ if event_is_set(shutdown_event):
return
sys.stdout.write('.')
@@ -808,7 +817,7 @@ class HTTPDownloader(threading.Thread):
try:
if (timeit.default_timer() - self.starttime) <= self.timeout:
f = self._opener(self.request)
- while (not self._shutdown_event.isSet() and
+ while (not event_is_set(self._shutdown_event) and
(timeit.default_timer() - self.starttime) <=
self.timeout):
self.result.append(len(f.read(10240)))
@@ -864,7 +873,7 @@ class HTTPUploaderData(object):
def read(self, n=10240):
if ((timeit.default_timer() - self.start) <= self.timeout and
- not self._shutdown_event.isSet()):
+ not event_is_set(self._shutdown_event)):
chunk = self.data.read(n)
self.total.append(len(chunk))
return chunk
@@ -902,7 +911,7 @@ class HTTPUploader(threading.Thread):
request = self.request
try:
if ((timeit.default_timer() - self.starttime) <= self.timeout and
- not self._shutdown_event.isSet()):
+ not event_is_set(self._shutdown_event)):
try:
f = self._opener(request)
except TypeError: