Merge branch 'fix-py37'

I tested this locally (on MacOS) against python3.7.0, and it now works. This
will appear broken on travis/appveyor until those CI environments add support
for py3.7 (but the failures should be ignored since py3.7 is in the
'allowed_failures' list).

closes #306
This commit is contained in:
Brian Warner 2018-07-01 14:34:41 -07:00
commit 5ccda71467
5 changed files with 24 additions and 2 deletions

View File

@ -18,6 +18,12 @@ environment:
- PYTHON: "C:\\Python35-x64"
- PYTHON: "C:\\Python36"
- PYTHON: "C:\\Python36-x64"
- PYTHON: "C:\\Python37-x64"
matrix:
allow_failures:
- PYTHON: "C:\\Python37-x64"
# appveyor does not yet install python-3.7
install:
- |

View File

@ -12,6 +12,7 @@ python:
- "3.4"
- "3.5"
- "3.6"
- "3.7"
- "nightly"
install:
- pip install -U pip tox virtualenv codecov
@ -27,4 +28,6 @@ after_success:
matrix:
allow_failures:
- python: "3.3"
# travis doesn't support py3.7 yet
- python: "3.7"
- python: "nightly"

View File

@ -331,7 +331,14 @@ class Receiver:
self._msg(u"%d files, %s (uncompressed)" %
(file_data["numfiles"], naturalsize(file_data["numbytes"])))
self._ask_permission()
return tempfile.SpooledTemporaryFile()
f = tempfile.SpooledTemporaryFile()
# workaround for https://bugs.python.org/issue26175 (STF doesn't
# fully implement IOBase abstract class), which breaks the new
# zipfile in py3.7.0 that expects .seekable
if not hasattr(f, "seekable"):
# AFAICT all the filetypes that STF wraps can seek
f.seekable = lambda: True
return f
def _decide_destname(self, mode, destname):
# the basename() is intended to protect us against

View File

@ -314,6 +314,12 @@ class Sender:
# We're sending a directory. Create a zipfile in a tempdir and
# send that.
fd_to_send = tempfile.SpooledTemporaryFile()
# workaround for https://bugs.python.org/issue26175 (STF doesn't
# fully implement IOBase abstract class), which breaks the new
# zipfile in py3.7.0 that expects .seekable
if not hasattr(fd_to_send, "seekable"):
# AFAICT all the filetypes that STF wraps can seek
fd_to_send.seekable = lambda: True
num_files = 0
num_bytes = 0
tostrip = len(what.split(os.sep))

View File

@ -4,7 +4,7 @@
# and then run "tox" from this directory.
[tox]
envlist = {py27,py34,py35,py36,pypy,flake8}
envlist = {py27,py34,py35,py36,py37,pypy,flake8}
skip_missing_interpreters = True
minversion = 2.4.0