diff --git a/weboob/tools/application/base.py b/weboob/tools/application/base.py index a673c837..e4b55f53 100644 --- a/weboob/tools/application/base.py +++ b/weboob/tools/application/base.py @@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import sys, os import logging -from optparse import OptionParser +from optparse import OptionGroup, OptionParser from weboob import Weboob from weboob.tools.config.iconfig import ConfigError @@ -46,6 +46,19 @@ class BaseApplication(object): def __init__(self): self.weboob = self.create_weboob() self.config = None + version = None + if self.VERSION: + if self.COPYRIGHT: + version = '%s v%s (%s)' % (self.APPNAME, self.VERSION, self.COPYRIGHT) + else: + version = '%s v%s' % (self.APPNAME, self.VERSION) + self._parser = OptionParser(self.SYNOPSIS, version=version) + self._parser.add_option('-b', '--backends', help='what backend(s) to enable (comma separated)') + logging_options = OptionGroup(self._parser, 'Logging Options') + logging_options.add_option('-d', '--debug', action='store_true', help='display debug messages') + logging_options.add_option('-q', '--quiet', action='store_true', help='display only error messages') + logging_options.add_option('-v', '--verbose', action='store_true', help='display info messages') + self._parser.add_option_group(logging_options) def create_weboob(self): return Weboob(self.APPNAME) @@ -99,19 +112,6 @@ class BaseApplication(object): """ Main function """ raise NotImplementedError() - def configure_parser(self, parser): - """ - Frontend parser configuration. - Overload this method to add custom options for your parser. - Options will be available in the BaseApplication.options variable. - - @param parser [OptionParser] the parser object. - """ - pass - - def _configure_parser(self, parser): - pass - def load_backends(self, caps=None, names=None, *args, **kwargs): if names is None: names = self._enabled_backends @@ -123,22 +123,9 @@ class BaseApplication(object): self.weboob.load_modules(caps, names, *args, **kwargs) @classmethod - def run(klass): + def run(klass, args=sys.argv): app = klass() - version = None - if app.VERSION: - if app.COPYRIGHT: - version = '%s v%s (%s)' % (app.APPNAME, app.VERSION, app.COPYRIGHT) - else: - version = '%s v%s' % (app.APPNAME, app.VERSION) - parser = OptionParser(app.SYNOPSIS, version=version) - parser.add_option('-b', '--backends', help='what backend(s) to enable (comma separated)') - parser.add_option('-d', '--debug', action='store_true', help='display debug messages') - parser.add_option('-q', '--quiet', action='store_true', help='display only error messages') - parser.add_option('-v', '--verbose', action='store_true', help='display info messages') - app._configure_parser(parser) - app.configure_parser(parser) - app.options, args = parser.parse_args(sys.argv) + app.options, args = app._parser.parse_args(args) if app.options.debug: level=logging.DEBUG elif app.options.verbose: diff --git a/weboob/tools/application/console.py b/weboob/tools/application/console.py index abc5bc06..e468e9dc 100644 --- a/weboob/tools/application/console.py +++ b/weboob/tools/application/console.py @@ -102,17 +102,16 @@ class ConsoleApplication(BaseApplication): sys.exit(1) self.default_output_format = None - def _configure_parser(self, parser): - parser.format_description = lambda x: parser.description + self._parser.format_description = lambda x: self._parser.description - if parser.description is None: - parser.description = '' - parser.description += 'Available commands:\n' + if self._parser.description is None: + self._parser.description = '' + self._parser.description += 'Available commands:\n' for f in self._command_help: - parser.description += ' %s\n' % f + self._parser.description += ' %s\n' % f - parser.add_option('-o', '--output-format', choices=formatters.keys(), - help='output format %s (default: table)' % formatters.keys()) + self._parser.add_option('-o', '--output-format', choices=formatters.keys(), + help='output format %s (default: table)' % formatters.keys()) def ask(self, question, default=None, masked=False, regexp=None): """