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 |     @inlineCallbacks | ||||||
|     def _go(self, w, tor_manager): |     def _go(self, w, tor_manager): | ||||||
|         self.handle_code(w) |         yield self.handle_code(w) | ||||||
|         verifier = yield w.get_verifier() |         verifier = yield w.get_verifier() | ||||||
|         self.show_verifier(verifier) |         self.show_verifier(verifier) | ||||||
|         them_d = yield self.get_data(w) |         them_d = yield self.get_data(w) | ||||||
|  | @ -90,6 +90,17 @@ class TwistedReceiver(BlockingReceiver): | ||||||
|             returnValue(1) |             returnValue(1) | ||||||
|         returnValue(0) |         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 |     @inlineCallbacks | ||||||
|     def get_data(self, w): |     def get_data(self, w): | ||||||
|         try: |         try: | ||||||
|  |  | ||||||
|  | @ -4,6 +4,7 @@ from six.moves.urllib_parse import urlencode | ||||||
| from binascii import hexlify, unhexlify | from binascii import hexlify, unhexlify | ||||||
| from zope.interface import implementer | from zope.interface import implementer | ||||||
| from twisted.internet import reactor, defer | from twisted.internet import reactor, defer | ||||||
|  | from twisted.internet.threads import deferToThread, blockingCallFromThread | ||||||
| from twisted.internet.defer import inlineCallbacks, returnValue | from twisted.internet.defer import inlineCallbacks, returnValue | ||||||
| from twisted.web import client as web_client | from twisted.web import client as web_client | ||||||
| from twisted.web import error as web_error | from twisted.web import error as web_error | ||||||
|  | @ -319,6 +320,23 @@ class Wormhole: | ||||||
|         self._start() |         self._start() | ||||||
|         returnValue(code) |         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): |     def set_code(self, code): | ||||||
|         if not isinstance(code, type(u"")): raise TypeError(type(code)) |         if not isinstance(code, type(u"")): raise TypeError(type(code)) | ||||||
|         if self.code is not None: raise UsageError |         if self.code is not None: raise UsageError | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user