add tab-completion to twisted-style input_code()
This commit is contained in:
parent
c856081a58
commit
94a3be91b2
|
@ -60,7 +60,7 @@ class TwistedReceiver(BlockingReceiver):
|
|||
|
||||
@inlineCallbacks
|
||||
def _go(self, w, tor_manager):
|
||||
self.handle_code(w)
|
||||
yield self.handle_code(w)
|
||||
verifier = yield w.get_verifier()
|
||||
self.show_verifier(verifier)
|
||||
them_d = yield self.get_data(w)
|
||||
|
@ -90,6 +90,17 @@ class TwistedReceiver(BlockingReceiver):
|
|||
returnValue(1)
|
||||
returnValue(0)
|
||||
|
||||
@inlineCallbacks
|
||||
def handle_code(self, w):
|
||||
code = self.args.code
|
||||
if self.args.zeromode:
|
||||
assert not code
|
||||
code = u"0-"
|
||||
if not code:
|
||||
code = yield w.input_code("Enter receive wormhole code: ",
|
||||
self.args.code_length)
|
||||
yield w.set_code(code)
|
||||
|
||||
@inlineCallbacks
|
||||
def get_data(self, w):
|
||||
try:
|
||||
|
|
|
@ -4,6 +4,7 @@ from six.moves.urllib_parse import urlencode
|
|||
from binascii import hexlify, unhexlify
|
||||
from zope.interface import implementer
|
||||
from twisted.internet import reactor, defer
|
||||
from twisted.internet.threads import deferToThread, blockingCallFromThread
|
||||
from twisted.internet.defer import inlineCallbacks, returnValue
|
||||
from twisted.web import client as web_client
|
||||
from twisted.web import error as web_error
|
||||
|
@ -319,6 +320,23 @@ class Wormhole:
|
|||
self._start()
|
||||
returnValue(code)
|
||||
|
||||
@inlineCallbacks
|
||||
def input_code(self, prompt="Enter wormhole code: ", code_length=2):
|
||||
def _lister():
|
||||
return blockingCallFromThread(reactor,
|
||||
self._channel_manager.list_channels)
|
||||
# fetch the list of channels ahead of time, to give us a chance to
|
||||
# discover the welcome message (and warn the user about an obsolete
|
||||
# client)
|
||||
initial_channelids = yield self._channel_manager.list_channels()
|
||||
_start = self._timing.add_event("input code", waiting="user")
|
||||
code = yield deferToThread(codes.input_code_with_completion,
|
||||
prompt,
|
||||
initial_channelids, _lister,
|
||||
code_length)
|
||||
self._timing.finish_event(_start)
|
||||
returnValue(code)
|
||||
|
||||
def set_code(self, code):
|
||||
if not isinstance(code, type(u"")): raise TypeError(type(code))
|
||||
if self.code is not None: raise UsageError
|
||||
|
|
Loading…
Reference in New Issue
Block a user