Compare commits

...

5 Commits

Author SHA1 Message Date
Matt Martz 17ee4573df pypy trusty 2019-03-13 12:56:45 -05:00
Matt Martz 8791bc0c66 xenial 2019-03-13 12:34:16 -05:00
Matt Martz c45ae04943 Add py3.7 and 3.8 2019-03-13 12:21:31 -05:00
Matt Martz 5e5ab2ffb7 Address Py2.5 issue 2019-03-12 12:07:13 -05:00
Matt Martz bad3c27486 Add support for py38 without deprecation warnings 2019-03-12 11:54:07 -05:00
2 changed files with 38 additions and 13 deletions

View File

@ -1,4 +1,6 @@
language: python language: python
sudo: required
dist: xenial
addons: addons:
apt: apt:
@ -33,8 +35,13 @@ matrix:
env: TOXENV=py35 env: TOXENV=py35
- python: 3.6 - python: 3.6
env: TOXENV=py36 env: TOXENV=py36
- python: 3.7
env: TOXENV=py37
- python: 3.8-dev
env: TOXENV=py38
- python: pypy - python: pypy
env: TOXENV=pypy env: TOXENV=pypy
dist: trusty
before_install: before_install:
- if [[ $(echo "$TOXENV" | egrep -c "py35") != 0 ]]; then pyenv global system 3.5; fi; - if [[ $(echo "$TOXENV" | egrep -c "py35") != 0 ]]; then pyenv global system 3.5; fi;

View File

@ -53,6 +53,9 @@ class FakeShutdownEvent(object):
# Some global variables we use # Some global variables we use
DEBUG = False DEBUG = False
_GLOBAL_DEFAULT_TIMEOUT = object() _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 # Begin import game to handle Python 2 and Python 3
try: try:
@ -63,11 +66,12 @@ except ImportError:
except ImportError: except ImportError:
json = None json = None
try:
import xml.etree.cElementTree as ET
except ImportError:
try: try:
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
try:
from xml.etree.ElementTree import _Element as ET_Element
except ImportError:
pass
except ImportError: except ImportError:
from xml.dom import minidom as DOM from xml.dom import minidom as DOM
from xml.parsers.expat import ExpatError from xml.parsers.expat import ExpatError
@ -262,6 +266,16 @@ else:
write(arg) write(arg)
write(end) 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 # Exception "constants" to support Python 2 through Python 3
try: try:
@ -1262,7 +1276,7 @@ class Speedtest(object):
raise SpeedtestServersError( raise SpeedtestServersError(
'Malformed speedtest.net server list: %s' % e 'Malformed speedtest.net server list: %s' % e
) )
elements = root.getiterator('server') elements = etree_iter(root, 'server')
except AttributeError: except AttributeError:
try: try:
root = DOM.parseString(serversxml) root = DOM.parseString(serversxml)
@ -1499,9 +1513,10 @@ class Speedtest(object):
finished = [] finished = []
def consumer(q, request_count): def consumer(q, request_count):
_is_alive = thread_is_alive
while len(finished) < request_count: while len(finished) < request_count:
thread = q.get(True) thread = q.get(True)
while thread.isAlive(): while _is_alive(thread):
thread.join(timeout=0.1) thread.join(timeout=0.1)
finished.append(sum(thread.result)) finished.append(sum(thread.result))
callback(thread.i, request_count, end=True) callback(thread.i, request_count, end=True)
@ -1514,9 +1529,10 @@ class Speedtest(object):
start = timeit.default_timer() start = timeit.default_timer()
prod_thread.start() prod_thread.start()
cons_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) prod_thread.join(timeout=0.1)
while cons_thread.isAlive(): while _is_alive(cons_thread):
cons_thread.join(timeout=0.1) cons_thread.join(timeout=0.1)
stop = timeit.default_timer() stop = timeit.default_timer()
@ -1584,9 +1600,10 @@ class Speedtest(object):
finished = [] finished = []
def consumer(q, request_count): def consumer(q, request_count):
_is_alive = thread_is_alive
while len(finished) < request_count: while len(finished) < request_count:
thread = q.get(True) thread = q.get(True)
while thread.isAlive(): while _is_alive(thread):
thread.join(timeout=0.1) thread.join(timeout=0.1)
finished.append(thread.result) finished.append(thread.result)
callback(thread.i, request_count, end=True) callback(thread.i, request_count, end=True)
@ -1599,9 +1616,10 @@ class Speedtest(object):
start = timeit.default_timer() start = timeit.default_timer()
prod_thread.start() prod_thread.start()
cons_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) prod_thread.join(timeout=0.1)
while cons_thread.isAlive(): while _is_alive(cons_thread):
cons_thread.join(timeout=0.1) cons_thread.join(timeout=0.1)
stop = timeit.default_timer() stop = timeit.default_timer()