write progress/status messages to stderr, not stdout
This should leave stdout clean for use in `foo | wormhole send --text=-` and `wormhole rx CODE >foo`, although the forms that want interactive code entry probably won't work that way. closes #99
This commit is contained in:
parent
64cdd426c0
commit
72dfb6eb1c
|
@ -42,7 +42,7 @@ class TwistedReceiver:
|
|||
self._transit_receiver = None
|
||||
|
||||
def _msg(self, *args, **kwargs):
|
||||
print(*args, file=self.args.stdout, **kwargs)
|
||||
print(*args, file=self.args.stderr, **kwargs)
|
||||
|
||||
@inlineCallbacks
|
||||
def go(self):
|
||||
|
@ -201,7 +201,7 @@ class TwistedReceiver:
|
|||
|
||||
def _handle_text(self, them_d, w):
|
||||
# we're receiving a text message
|
||||
self._msg(them_d["message"])
|
||||
print(them_d["message"], file=self.args.stdout)
|
||||
self._send_data({"answer": {"message_ack": "ok"}}, w)
|
||||
|
||||
def _handle_file(self, them_d):
|
||||
|
@ -283,7 +283,7 @@ class TwistedReceiver:
|
|||
self._msg(u"Receiving (%s).." % record_pipe.describe())
|
||||
|
||||
with self.args.timing.add("rx file"):
|
||||
progress = tqdm(file=self.args.stdout,
|
||||
progress = tqdm(file=self.args.stderr,
|
||||
disable=self.args.hide_progress,
|
||||
unit="B", unit_scale=True, total=self.xfersize)
|
||||
hasher = hashlib.sha256()
|
||||
|
|
|
@ -74,7 +74,7 @@ class Sender:
|
|||
other_cmd += " -0"
|
||||
|
||||
print(u"On the other computer, please run: %s" % other_cmd,
|
||||
file=args.stdout)
|
||||
file=args.stderr)
|
||||
|
||||
if args.code:
|
||||
w.set_code(args.code)
|
||||
|
@ -83,10 +83,10 @@ class Sender:
|
|||
code = yield w.get_code(args.code_length)
|
||||
|
||||
if not args.zeromode:
|
||||
print(u"Wormhole code is: %s" % code, file=args.stdout)
|
||||
# flush stdout so the code is displayed immediately
|
||||
args.stdout.flush()
|
||||
print(u"", file=args.stdout)
|
||||
print(u"Wormhole code is: %s" % code, file=args.stderr)
|
||||
# flush stderr so the code is displayed immediately
|
||||
args.stderr.flush()
|
||||
print(u"", file=args.stderr)
|
||||
|
||||
yield w.establish_key()
|
||||
def on_slow_connection():
|
||||
|
@ -176,14 +176,14 @@ class Sender:
|
|||
args = self._args
|
||||
text = args.text
|
||||
if text == "-":
|
||||
print(u"Reading text message from stdin..", file=args.stdout)
|
||||
print(u"Reading text message from stdin..", file=args.stderr)
|
||||
text = sys.stdin.read()
|
||||
if not text and not args.what:
|
||||
text = six.moves.input("Text to send: ")
|
||||
|
||||
if text is not None:
|
||||
print(u"Sending text message (%s)" % naturalsize(len(text)),
|
||||
file=args.stdout)
|
||||
file=args.stderr)
|
||||
offer = { "message": text }
|
||||
fd_to_send = None
|
||||
return offer, fd_to_send
|
||||
|
@ -204,12 +204,12 @@ class Sender:
|
|||
}
|
||||
print(u"Sending %s file named '%s'"
|
||||
% (naturalsize(filesize), basename),
|
||||
file=args.stdout)
|
||||
file=args.stderr)
|
||||
fd_to_send = open(what, "rb")
|
||||
return offer, fd_to_send
|
||||
|
||||
if os.path.isdir(what):
|
||||
print(u"Building zipfile..", file=args.stdout)
|
||||
print(u"Building zipfile..", file=args.stderr)
|
||||
# We're sending a directory. Create a zipfile in a tempdir and
|
||||
# send that.
|
||||
fd_to_send = tempfile.SpooledTemporaryFile()
|
||||
|
@ -239,7 +239,7 @@ class Sender:
|
|||
"numfiles": num_files,
|
||||
}
|
||||
print(u"Sending directory (%s compressed) named '%s'"
|
||||
% (naturalsize(filesize), basename), file=args.stdout)
|
||||
% (naturalsize(filesize), basename), file=args.stderr)
|
||||
return offer, fd_to_send
|
||||
|
||||
raise TypeError("'%s' is neither file nor directory" % args.what)
|
||||
|
@ -248,7 +248,7 @@ class Sender:
|
|||
def _handle_answer(self, them_answer):
|
||||
if self._fd_to_send is None:
|
||||
if them_answer["message_ack"] == "ok":
|
||||
print(u"text message sent", file=self._args.stdout)
|
||||
print(u"text message sent", file=self._args.stderr)
|
||||
returnValue(None) # terminates this function
|
||||
raise TransferError("error sending text: %r" % (them_answer,))
|
||||
|
||||
|
@ -270,11 +270,11 @@ class Sender:
|
|||
record_pipe = yield ts.connect()
|
||||
self._timing.add("transit connected")
|
||||
# record_pipe should implement IConsumer, chunks are just records
|
||||
stdout = self._args.stdout
|
||||
print(u"Sending (%s).." % record_pipe.describe(), file=stdout)
|
||||
stderr = self._args.stderr
|
||||
print(u"Sending (%s).." % record_pipe.describe(), file=stderr)
|
||||
|
||||
hasher = hashlib.sha256()
|
||||
progress = tqdm(file=stdout, disable=self._args.hide_progress,
|
||||
progress = tqdm(file=stderr, disable=self._args.hide_progress,
|
||||
unit="B", unit_scale=True,
|
||||
total=filesize)
|
||||
def _count_and_hash(data):
|
||||
|
@ -290,7 +290,7 @@ class Sender:
|
|||
|
||||
expected_hash = hasher.digest()
|
||||
expected_hex = bytes_to_hexstr(expected_hash)
|
||||
print(u"File sent.. waiting for confirmation", file=stdout)
|
||||
print(u"File sent.. waiting for confirmation", file=stderr)
|
||||
with self._timing.add("get ack") as t:
|
||||
ack_bytes = yield record_pipe.receive_record()
|
||||
record_pipe.close()
|
||||
|
@ -303,5 +303,5 @@ class Sender:
|
|||
if ack[u"sha256"] != expected_hex:
|
||||
t.detail(datahash="failed")
|
||||
raise TransferError("Transfer failed (bad remote hash)")
|
||||
print(u"Confirmation received. Transfer complete.", file=stdout)
|
||||
print(u"Confirmation received. Transfer complete.", file=stderr)
|
||||
t.detail(ack="ok")
|
||||
|
|
|
@ -367,18 +367,11 @@ class PregeneratedCode(ServerBase, ScriptsBase, unittest.TestCase):
|
|||
|
||||
self.maxDiff = None # show full output for assertion failures
|
||||
|
||||
if mode != "slow-text":
|
||||
self.failUnlessEqual(send_stderr, "",
|
||||
(send_stdout, send_stderr))
|
||||
self.failUnlessEqual(receive_stderr, "",
|
||||
(receive_stdout, receive_stderr))
|
||||
else:
|
||||
self.assertEqual(send_stderr,
|
||||
"Key established, waiting for confirmation...\n",
|
||||
(send_stdout, send_stderr))
|
||||
self.assertEqual(receive_stderr,
|
||||
"Key established, waiting for confirmation...\n",
|
||||
(receive_stdout, receive_stderr))
|
||||
key_established = ""
|
||||
if mode == "slow-text":
|
||||
key_established = "Key established, waiting for confirmation...\n"
|
||||
|
||||
self.assertEqual(send_stdout, "")
|
||||
|
||||
# check sender
|
||||
if mode == "text" or mode == "slow-text":
|
||||
|
@ -386,53 +379,58 @@ class PregeneratedCode(ServerBase, ScriptsBase, unittest.TestCase):
|
|||
"On the other computer, please run: "
|
||||
"wormhole receive{NL}"
|
||||
"Wormhole code is: {code}{NL}{NL}"
|
||||
"{KE}"
|
||||
"text message sent{NL}").format(bytes=len(message),
|
||||
code=send_cfg.code,
|
||||
NL=NL)
|
||||
self.failUnlessEqual(send_stdout, expected)
|
||||
NL=NL,
|
||||
KE=key_established)
|
||||
self.failUnlessEqual(send_stderr, expected)
|
||||
elif mode == "file":
|
||||
self.failUnlessIn("Sending {size:s} file named '{name}'{NL}"
|
||||
.format(size=naturalsize(len(message)),
|
||||
name=send_filename,
|
||||
NL=NL), send_stdout)
|
||||
NL=NL), send_stderr)
|
||||
self.failUnlessIn("On the other computer, please run: "
|
||||
"wormhole receive{NL}"
|
||||
"Wormhole code is: {code}{NL}{NL}"
|
||||
.format(code=send_cfg.code, NL=NL),
|
||||
send_stdout)
|
||||
send_stderr)
|
||||
self.failUnlessIn("File sent.. waiting for confirmation{NL}"
|
||||
"Confirmation received. Transfer complete.{NL}"
|
||||
.format(NL=NL), send_stdout)
|
||||
.format(NL=NL), send_stderr)
|
||||
elif mode == "directory":
|
||||
self.failUnlessIn("Sending directory", send_stdout)
|
||||
self.failUnlessIn("named 'testdir'", send_stdout)
|
||||
self.failUnlessIn("Sending directory", send_stderr)
|
||||
self.failUnlessIn("named 'testdir'", send_stderr)
|
||||
self.failUnlessIn("On the other computer, please run: "
|
||||
"wormhole receive{NL}"
|
||||
"Wormhole code is: {code}{NL}{NL}"
|
||||
.format(code=send_cfg.code, NL=NL), send_stdout)
|
||||
.format(code=send_cfg.code, NL=NL), send_stderr)
|
||||
self.failUnlessIn("File sent.. waiting for confirmation{NL}"
|
||||
"Confirmation received. Transfer complete.{NL}"
|
||||
.format(NL=NL), send_stdout)
|
||||
.format(NL=NL), send_stderr)
|
||||
|
||||
# check receiver
|
||||
if mode == "text" or mode == "slow-text":
|
||||
self.failUnlessEqual(receive_stdout, message+NL)
|
||||
self.assertEqual(receive_stdout, message+NL)
|
||||
self.assertEqual(receive_stderr, key_established)
|
||||
elif mode == "file":
|
||||
self.failUnlessEqual(receive_stdout, "")
|
||||
self.failUnlessIn("Receiving file ({size:s}) into: {name}"
|
||||
.format(size=naturalsize(len(message)),
|
||||
name=receive_filename), receive_stdout)
|
||||
self.failUnlessIn("Received file written to ", receive_stdout)
|
||||
name=receive_filename), receive_stderr)
|
||||
self.failUnlessIn("Received file written to ", receive_stderr)
|
||||
fn = os.path.join(receive_dir, receive_filename)
|
||||
self.failUnless(os.path.exists(fn))
|
||||
with open(fn, "r") as f:
|
||||
self.failUnlessEqual(f.read(), message)
|
||||
elif mode == "directory":
|
||||
self.failUnlessEqual(receive_stdout, "")
|
||||
want = (r"Receiving directory \(\d+ \w+\) into: {name}/"
|
||||
.format(name=receive_dirname))
|
||||
self.failUnless(re.search(want, receive_stdout),
|
||||
(want, receive_stdout))
|
||||
self.failUnless(re.search(want, receive_stderr),
|
||||
(want, receive_stderr))
|
||||
self.failUnlessIn("Received files written to {name}"
|
||||
.format(name=receive_dirname), receive_stdout)
|
||||
.format(name=receive_dirname), receive_stderr)
|
||||
fn = os.path.join(receive_dir, receive_dirname)
|
||||
self.failUnless(os.path.exists(fn), fn)
|
||||
for i in range(5):
|
||||
|
@ -547,62 +545,60 @@ class PregeneratedCode(ServerBase, ScriptsBase, unittest.TestCase):
|
|||
|
||||
self.maxDiff = None # show full output for assertion failures
|
||||
|
||||
self.failUnlessEqual(send_stderr, "",
|
||||
(send_stdout, send_stderr))
|
||||
self.failUnlessEqual(receive_stderr, "",
|
||||
(receive_stdout, receive_stderr))
|
||||
self.assertEqual(send_stdout, "")
|
||||
self.assertEqual(receive_stdout, "")
|
||||
|
||||
# check sender
|
||||
if mode == "file":
|
||||
self.failUnlessIn("Sending {size:s} file named '{name}'{NL}"
|
||||
.format(size=naturalsize(size),
|
||||
name=send_filename,
|
||||
NL=NL), send_stdout)
|
||||
NL=NL), send_stderr)
|
||||
self.failUnlessIn("On the other computer, please run: "
|
||||
"wormhole receive{NL}"
|
||||
"Wormhole code is: {code}{NL}{NL}"
|
||||
.format(code=send_cfg.code, NL=NL),
|
||||
send_stdout)
|
||||
send_stderr)
|
||||
self.failIfIn("File sent.. waiting for confirmation{NL}"
|
||||
"Confirmation received. Transfer complete.{NL}"
|
||||
.format(NL=NL), send_stdout)
|
||||
.format(NL=NL), send_stderr)
|
||||
elif mode == "directory":
|
||||
self.failUnlessIn("Sending directory", send_stdout)
|
||||
self.failUnlessIn("named 'testdir'", send_stdout)
|
||||
self.failUnlessIn("Sending directory", send_stderr)
|
||||
self.failUnlessIn("named 'testdir'", send_stderr)
|
||||
self.failUnlessIn("On the other computer, please run: "
|
||||
"wormhole receive{NL}"
|
||||
"Wormhole code is: {code}{NL}{NL}"
|
||||
.format(code=send_cfg.code, NL=NL), send_stdout)
|
||||
.format(code=send_cfg.code, NL=NL), send_stderr)
|
||||
self.failIfIn("File sent.. waiting for confirmation{NL}"
|
||||
"Confirmation received. Transfer complete.{NL}"
|
||||
.format(NL=NL), send_stdout)
|
||||
.format(NL=NL), send_stderr)
|
||||
|
||||
# check receiver
|
||||
if mode == "file":
|
||||
self.failIfIn("Received file written to ", receive_stdout)
|
||||
self.failIfIn("Received file written to ", receive_stderr)
|
||||
if failmode == "noclobber":
|
||||
self.failUnlessIn("Error: "
|
||||
"refusing to overwrite existing 'testfile'{NL}"
|
||||
.format(NL=NL), receive_stdout)
|
||||
.format(NL=NL), receive_stderr)
|
||||
else:
|
||||
self.failUnlessIn("Error: "
|
||||
"insufficient free space (0B) for file ({size:d}B){NL}"
|
||||
.format(NL=NL, size=size), receive_stdout)
|
||||
.format(NL=NL, size=size), receive_stderr)
|
||||
elif mode == "directory":
|
||||
self.failIfIn("Received files written to {name}"
|
||||
.format(name=receive_name), receive_stdout)
|
||||
.format(name=receive_name), receive_stderr)
|
||||
#want = (r"Receiving directory \(\d+ \w+\) into: {name}/"
|
||||
# .format(name=receive_name))
|
||||
#self.failUnless(re.search(want, receive_stdout),
|
||||
# (want, receive_stdout))
|
||||
#self.failUnless(re.search(want, receive_stderr),
|
||||
# (want, receive_stderr))
|
||||
if failmode == "noclobber":
|
||||
self.failUnlessIn("Error: "
|
||||
"refusing to overwrite existing 'testdir'{NL}"
|
||||
.format(NL=NL), receive_stdout)
|
||||
.format(NL=NL), receive_stderr)
|
||||
else:
|
||||
self.failUnlessIn("Error: "
|
||||
"insufficient free space (0B) for directory ({size:d}B){NL}"
|
||||
.format(NL=NL, size=size), receive_stdout)
|
||||
.format(NL=NL, size=size), receive_stderr)
|
||||
|
||||
if failmode == "noclobber":
|
||||
fn = os.path.join(receive_dir, receive_name)
|
||||
|
|
Loading…
Reference in New Issue
Block a user