Permalink
Browse files

cmd_send/receive: work around python3.7.0 bug

See https://bugs.python.org/issue26175 . tempfile.SpooledTemporaryFile
doesn't fully implement the IOBase abstract class, which breaks because
py3.7.0's new zipfile module tries to delegate .seekable down to the wrapped
file and causes an AttributeError.

refs #306
  • Loading branch information...
warner committed Jul 1, 2018
1 parent 47e4c43 commit 45315136021b9cdfdfa77eb85bfaaf9677e9f256
Showing with 14 additions and 1 deletion.
  1. +8 −1 src/wormhole/cli/cmd_receive.py
  2. +6 −0 src/wormhole/cli/cmd_send.py
@@ -331,7 +331,14 @@ def _handle_directory(self, them_d):
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
@@ -314,6 +314,12 @@ def _build_offer(self):
# 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))

0 comments on commit 4531513

Please sign in to comment.