move repl code from ConsoleApplication to ReplApplication
This commit is contained in:
parent
2825ff643b
commit
1dafee2b47
3 changed files with 40 additions and 28 deletions
|
|
@ -256,7 +256,6 @@ class Boobmsg(ReplApplication):
|
||||||
thread_id = receiver
|
thread_id = receiver
|
||||||
parent_id = None
|
parent_id = None
|
||||||
|
|
||||||
|
|
||||||
thread = Thread(thread_id)
|
thread = Thread(thread_id)
|
||||||
message = Message(thread,
|
message = Message(thread,
|
||||||
0,
|
0,
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ from copy import deepcopy
|
||||||
import getpass
|
import getpass
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
from weboob.capabilities.account import ICapAccount, Account, AccountRegisterError
|
from weboob.capabilities.account import ICapAccount, Account, AccountRegisterError
|
||||||
from weboob.core.backendscfg import BackendAlreadyExists
|
from weboob.core.backendscfg import BackendAlreadyExists
|
||||||
|
|
@ -31,8 +32,16 @@ from weboob.tools.value import Value, ValueBool, ValueFloat, ValueInt
|
||||||
|
|
||||||
from .base import BackendNotFound, BaseApplication
|
from .base import BackendNotFound, BaseApplication
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ['ConsoleApplication', 'BackendNotGiven']
|
||||||
|
|
||||||
|
|
||||||
class BackendNotGiven(Exception):
|
class BackendNotGiven(Exception):
|
||||||
pass
|
def __init__(self, id, backends):
|
||||||
|
self.id = id
|
||||||
|
self.backends = backends
|
||||||
|
Exception.__init__(self, 'Please specify a backend to use for this argument (%s@backend_name). '
|
||||||
|
'Availables: %s.' % (id, ', '.join(name for name, backend in backends)))
|
||||||
|
|
||||||
class ConsoleApplication(BaseApplication):
|
class ConsoleApplication(BaseApplication):
|
||||||
"""
|
"""
|
||||||
|
|
@ -92,7 +101,7 @@ class ConsoleApplication(BaseApplication):
|
||||||
def check_loaded_backends(self, default_config=None):
|
def check_loaded_backends(self, default_config=None):
|
||||||
while len(self.enabled_backends) == 0:
|
while len(self.enabled_backends) == 0:
|
||||||
print 'Warning: there is currently no configured backend for %s' % self.APPNAME
|
print 'Warning: there is currently no configured backend for %s' % self.APPNAME
|
||||||
if not self.interactive or not self.ask('Do you want to configure backends?', default=True):
|
if not os.isatty(sys.stdout.fileno()) or not self.ask('Do you want to configure backends?', default=True):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self.prompt_create_backends(default_config)
|
self.prompt_create_backends(default_config)
|
||||||
|
|
@ -167,25 +176,11 @@ class ConsoleApplication(BaseApplication):
|
||||||
except ValueError:
|
except ValueError:
|
||||||
backend_name = None
|
backend_name = None
|
||||||
if unique_backend and not backend_name:
|
if unique_backend and not backend_name:
|
||||||
backends = []
|
backends = [(b.name, b) for b in self.enabled_backends]
|
||||||
for name, backend in sorted(self.weboob.modules_loader.loaded.iteritems()):
|
if len(backends) == 1:
|
||||||
if self.CAPS and not self.caps_included(backend.iter_caps(), self.CAPS.__name__):
|
backend_name = backends[0]
|
||||||
continue
|
|
||||||
backends.append((name, backend))
|
|
||||||
if self.interactive:
|
|
||||||
while not backend_name:
|
|
||||||
print 'This command works with a unique backend. Availables:'
|
|
||||||
for index, (name, backend) in enumerate(backends):
|
|
||||||
print '%s%d)%s %s%-15s%s %s' % (self.BOLD, index + 1, self.NC, self.BOLD, name, self.NC,
|
|
||||||
backend.description)
|
|
||||||
i = int(self.ask('Select a backend to proceed', regexp='^\d+$'))
|
|
||||||
if i < 0 or i >= len(backends):
|
|
||||||
print >>sys.stderr, 'Error: %s is not a valid choice' % i
|
|
||||||
continue
|
|
||||||
backend_name = backends[i][0]
|
|
||||||
else:
|
else:
|
||||||
raise BackendNotGiven('Please specify a backend to use for this argument (%s@backend_name). '
|
raise BackendNotGiven(_id, backends)
|
||||||
'Availables: %s.' % (_id, ', '.join(name for name, backend in backends)))
|
|
||||||
return _id, backend_name
|
return _id, backend_name
|
||||||
|
|
||||||
def caps_included(self, modcaps, caps):
|
def caps_included(self, modcaps, caps):
|
||||||
|
|
@ -432,7 +427,7 @@ class ConsoleApplication(BaseApplication):
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def bcall_errors_handler(self, errors):
|
def bcall_errors_handler(self, errors, debugmsg='Use --debug option to print backtraces'):
|
||||||
"""
|
"""
|
||||||
Handler for the CallErrors exception.
|
Handler for the CallErrors exception.
|
||||||
"""
|
"""
|
||||||
|
|
@ -442,7 +437,4 @@ class ConsoleApplication(BaseApplication):
|
||||||
ask_debug_mode = True
|
ask_debug_mode = True
|
||||||
|
|
||||||
if ask_debug_mode:
|
if ask_debug_mode:
|
||||||
if self.interactive:
|
print >>sys.stderr, debugmsg
|
||||||
print >>sys.stderr, 'Use "logging debug" option to print backtraces.'
|
|
||||||
else:
|
|
||||||
print >>sys.stderr, 'Use --debug option to print backtraces.'
|
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@ class ReplApplication(Cmd, ConsoleApplication):
|
||||||
def _complete_object(self):
|
def _complete_object(self):
|
||||||
return ['%s@%s' % (obj.id, obj.backend) for obj in self.objects]
|
return ['%s@%s' % (obj.id, obj.backend) for obj in self.objects]
|
||||||
|
|
||||||
def parse_id(self, id):
|
def parse_id(self, id, unique_backend=False):
|
||||||
if self.interactive:
|
if self.interactive:
|
||||||
try:
|
try:
|
||||||
obj = self.objects[int(id) - 1]
|
obj = self.objects[int(id) - 1]
|
||||||
|
|
@ -166,7 +166,22 @@ class ReplApplication(Cmd, ConsoleApplication):
|
||||||
else:
|
else:
|
||||||
if isinstance(obj, CapBaseObject):
|
if isinstance(obj, CapBaseObject):
|
||||||
id = '%s@%s' % (obj.id, obj.backend)
|
id = '%s@%s' % (obj.id, obj.backend)
|
||||||
return ConsoleApplication.parse_id(self, id)
|
try:
|
||||||
|
return ConsoleApplication.parse_id(self, id, unique_backend)
|
||||||
|
except BackendNotGiven, e:
|
||||||
|
backend_name = None
|
||||||
|
while not backend_name:
|
||||||
|
print 'This command works with an unique backend. Availables:'
|
||||||
|
for index, (name, backend) in enumerate(e.backends):
|
||||||
|
print '%s%d)%s %s%-15s%s %s' % (self.BOLD, index + 1, self.NC, self.BOLD, name, self.NC,
|
||||||
|
backend.DESCRIPTION)
|
||||||
|
i = int(self.ask('Select a backend to proceed', regexp='^\d+$'))
|
||||||
|
if i < 0 or i > len(e.backends):
|
||||||
|
print >>sys.stderr, 'Error: %s is not a valid choice' % i
|
||||||
|
continue
|
||||||
|
backend_name = e.backends[i-1][0]
|
||||||
|
|
||||||
|
return id, backend_name
|
||||||
|
|
||||||
def get_object(self, _id, method, fields=None):
|
def get_object(self, _id, method, fields=None):
|
||||||
if self.interactive:
|
if self.interactive:
|
||||||
|
|
@ -357,6 +372,12 @@ class ReplApplication(Cmd, ConsoleApplication):
|
||||||
else:
|
else:
|
||||||
return super(ReplApplication, self).bcall_error_handler(backend, error, backtrace)
|
return super(ReplApplication, self).bcall_error_handler(backend, error, backtrace)
|
||||||
|
|
||||||
|
def bcall_errors_handler(self, errors):
|
||||||
|
if self.interactive:
|
||||||
|
ConsoleApplication.bcall_errors_handler(self, errors, 'Use "logging debug" option to print backtraces.')
|
||||||
|
else:
|
||||||
|
ConsoleApplication.bcall_errors_handler(self, errors)
|
||||||
|
|
||||||
# -- options related methods -------------
|
# -- options related methods -------------
|
||||||
def _handle_options(self):
|
def _handle_options(self):
|
||||||
if self.options.formatter:
|
if self.options.formatter:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue