From ccf4303cc07105c6dc5b2ac1e8e539b00c06edd4 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Tue, 20 Apr 2010 23:58:51 +0200 Subject: [PATCH] new attributes and code improvement --- scripts/monboob | 2 + weboob/frontends/boobank/boobank.py | 2 + weboob/frontends/havesex/application.py | 2 + weboob/frontends/qvideoob/application.py | 2 + weboob/frontends/travel/application.py | 2 + weboob/frontends/travel_ui/application.py | 2 + weboob/frontends/videoob/application.py | 2 + weboob/frontends/weboobcfg/application.py | 2 + weboob/frontends/wetboobs/application.py | 2 + weboob/tools/application/base.py | 14 ++++- weboob/tools/application/console.py | 73 +++++++++++++---------- 11 files changed, 71 insertions(+), 34 deletions(-) diff --git a/scripts/monboob b/scripts/monboob index 5cf92671ab..ebbecedb35 100755 --- a/scripts/monboob +++ b/scripts/monboob @@ -35,6 +35,8 @@ from weboob.tools.misc import html2text class Monboob(ConsoleApplication): APPNAME = 'monboob' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Romain Bignon' CONFIG = {'interval': 15, 'domain': 'weboob.example.org', 'recipient': 'weboob@example.org', diff --git a/weboob/frontends/boobank/boobank.py b/weboob/frontends/boobank/boobank.py index b07da4531e..6cb5f8432e 100644 --- a/weboob/frontends/boobank/boobank.py +++ b/weboob/frontends/boobank/boobank.py @@ -34,6 +34,8 @@ class Boobank(ConsoleApplication): APPNAME = 'boobank' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Romain Bignon' def main(self, argv): self.load_backends(ICapBank, names=self.enabled_backends) diff --git a/weboob/frontends/havesex/application.py b/weboob/frontends/havesex/application.py index 890722b4d9..3afc34d740 100644 --- a/weboob/frontends/havesex/application.py +++ b/weboob/frontends/havesex/application.py @@ -23,6 +23,8 @@ class HaveSex(PromptApplication): APPNAME = 'havesex' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Romain Bignon' STORAGE_FILENAME = 'dating.storage' def main(self, argv): diff --git a/weboob/frontends/qvideoob/application.py b/weboob/frontends/qvideoob/application.py index 91c70a554d..06988d93a1 100644 --- a/weboob/frontends/qvideoob/application.py +++ b/weboob/frontends/qvideoob/application.py @@ -25,6 +25,8 @@ class QVideoob(QtApplication): APPNAME = 'qvideoob' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Romain Bignon' CONFIG = {'settings': {'nsfw': True, 'sortby': 0, 'backend': '' diff --git a/weboob/frontends/travel/application.py b/weboob/frontends/travel/application.py index 7a1182a5c3..76e082462e 100644 --- a/weboob/frontends/travel/application.py +++ b/weboob/frontends/travel/application.py @@ -23,6 +23,8 @@ class Travel(ConsoleApplication): APPNAME = 'travel' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Romain Bignon' def main(self, argv): self.load_modules(ICapTravel) diff --git a/weboob/frontends/travel_ui/application.py b/weboob/frontends/travel_ui/application.py index 2438d1b6bd..8511aeeefe 100644 --- a/weboob/frontends/travel_ui/application.py +++ b/weboob/frontends/travel_ui/application.py @@ -156,6 +156,8 @@ def refresh(self): class Travel(BaseApplication): "Application Class" APPNAME = 'travel' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Julien Hébert' def main(self, argv): "main fonction" diff --git a/weboob/frontends/videoob/application.py b/weboob/frontends/videoob/application.py index c144952603..c1ffa4036a 100644 --- a/weboob/frontends/videoob/application.py +++ b/weboob/frontends/videoob/application.py @@ -23,6 +23,8 @@ class Videoob(ConsoleApplication): APPNAME = 'videoob' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Christophe Benz, Romain Bignon' CONFIG = {} def main(self, argv): diff --git a/weboob/frontends/weboobcfg/application.py b/weboob/frontends/weboobcfg/application.py index e2604906c7..e0de8a581f 100644 --- a/weboob/frontends/weboobcfg/application.py +++ b/weboob/frontends/weboobcfg/application.py @@ -25,6 +25,8 @@ class WeboobCfg(ConsoleApplication): APPNAME = 'weboobcfg' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Romain Bignon' def main(self, argv): return self.process_command(*argv[1:]) diff --git a/weboob/frontends/wetboobs/application.py b/weboob/frontends/wetboobs/application.py index a65fc8ccdf..ffc24e4a8c 100644 --- a/weboob/frontends/wetboobs/application.py +++ b/weboob/frontends/wetboobs/application.py @@ -23,6 +23,8 @@ class WetBoobs(ConsoleApplication): APPNAME = 'wetboobs' + VERSION = '1.0' + COPYRIGHT = 'Copyright(C) 2010 Romain Bignon' def main(self, argv): self.load_modules(ICapWeather) diff --git a/weboob/tools/application/base.py b/weboob/tools/application/base.py index 870325fd6b..6636734ae9 100644 --- a/weboob/tools/application/base.py +++ b/weboob/tools/application/base.py @@ -36,6 +36,12 @@ class BaseApplication(object): CONFIG = {} # Configuration directory CONFDIR = os.path.join(os.path.expanduser('~'), '.weboob') + # Synopsis + SYNOPSIS = 'Usage: %prog [options (-h for help)] ...' + # Version + VERSION = None + # Copyright + COPYRIGHT = None def __init__(self): self.weboob = self.create_weboob() @@ -119,7 +125,13 @@ def load_modules(self, caps=None, names=None, *args, **kwargs): @classmethod def run(klass): app = klass() - parser = OptionParser('Usage: %prog [options (-h for help)] URL...') + 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') diff --git a/weboob/tools/application/console.py b/weboob/tools/application/console.py index 42b18a4fdc..a2b5cb06bf 100644 --- a/weboob/tools/application/console.py +++ b/weboob/tools/application/console.py @@ -87,12 +87,14 @@ def format(klass, data): return unicode(formatted).strip() -formatters = dict(text=TextFormatter, - table=TableFormatter, - ) +formatters = {'text': TextFormatter, + 'table': TableFormatter, + } class ConsoleApplication(BaseApplication): + SYNOPSIS = 'Usage: %prog [options (-h for help)] command [parameters...]' + def __init__(self): try: BaseApplication.__init__(self) @@ -149,40 +151,45 @@ def f(x): if len(matching_commands) == 0: sys.stderr.write("No such command: %s.\n" % command) - elif len(matching_commands) == 1: - func = getattr(self, matching_commands[0]) + return 1 + if len(matching_commands) != 1: + sys.stderr.write("Ambiguious command %s: %s.\n" % (command, ', '.join( + [s.replace('command_', '', 1) for s in matching_commands]))) + return 1 - _args, varargs, varkw, defaults = getargspec(func) - nb_max_args = nb_min_args = len(_args) - 1 - if defaults: - nb_min_args -= len(defaults) + func = getattr(self, matching_commands[0]) - if len(args) < nb_min_args or len(args) > nb_max_args and not varargs: - if varargs or defaults: - sys.stderr.write("Command '%s' takes at least %d arguments.\n" % (command, nb_min_args)) - else: - sys.stderr.write("Command '%s' takes %d arguments.\n" % (command, nb_min_args)) - return - command_result = func(*args) - if isinstance(command_result, dict): - if self.options.output_format is not None: - output_format = self.options.output_format - else: - if self.default_output_format is not None: - output_format = self.default_output_format - else: - output_format = 'table' - print formatters[output_format].format(command_result) - return 0 - elif isinstance(command_result, int): - return command_result - elif command_result is None: - return 0 + _args, varargs, varkw, defaults = getargspec(func) + nb_max_args = nb_min_args = len(_args) - 1 + if defaults: + nb_min_args -= len(defaults) + + if len(args) < nb_min_args or len(args) > nb_max_args and not varargs: + if varargs or defaults: + sys.stderr.write("Command '%s' takes at least %d arguments.\n" % (command, nb_min_args)) + else: + sys.stderr.write("Command '%s' takes %d arguments.\n" % (command, nb_min_args)) + return 1 + + command_result = func(*args) + + # Process result + if isinstance(command_result, dict): + if self.options.output_format is not None: + output_format = self.options.output_format else: - raise Exception('Should never go here') + if self.default_output_format is not None: + output_format = self.default_output_format + else: + output_format = 'table' + print formatters[output_format].format(command_result) + return 0 + elif isinstance(command_result, int): + return command_result + elif command_result is None: + return 0 else: - sys.stderr.write("Ambiguious command %s: %s.\n" % (command, ', '.join( - [s.replace('command_', '', 1) for s in matching_commands]))) + raise Exception('Should never go here') _command_help = [] def register_command(f, doc_string, register_to=_command_help): -- GitLab