diff --git a/scripts/monboob b/scripts/monboob index ebbecedb..50d142bc 100755 --- a/scripts/monboob +++ b/scripts/monboob @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. from email.mime.text import MIMEText from smtplib import SMTP -from email.Header import Header +from email.Header import Header, decode_header from email.Utils import parseaddr, formataddr from email import message_from_file import time @@ -61,6 +61,14 @@ class Monboob(ConsoleApplication): if m: reply_to = m.group(1) title = msg.get('Subject') + if title: + new_title = u'' + for part in decode_header(title): + if part[1]: + new_title += unicode(part[0], part[1]) + else: + new_title += unicode(part[0]) + title = new_title content = u'' for part in msg.walk(): diff --git a/weboob/frontends/boobank/boobank.py b/weboob/frontends/boobank/boobank.py index 6cb5f843..f5523c8d 100644 --- a/weboob/frontends/boobank/boobank.py +++ b/weboob/frontends/boobank/boobank.py @@ -38,7 +38,7 @@ class Boobank(ConsoleApplication): COPYRIGHT = 'Copyright(C) 2010 Romain Bignon' def main(self, argv): - self.load_backends(ICapBank, names=self.enabled_backends) + self.load_backends(ICapBank) return self.process_command(*argv[1:]) @ConsoleApplication.command('List every available accounts') 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..a7900a67 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): """ @@ -150,7 +149,11 @@ class ConsoleApplication(BaseApplication): return line - def process_command(self, command='help', *args): + def process_command(self, command=None, *args): + if command is None: + self._parser.print_help() + return 0 + def f(x): return x.startswith('command_' + command) @@ -232,11 +235,5 @@ class ConsoleApplication(BaseApplication): def command(doc_string, f=register_command): return partial(f, doc_string=doc_string) - @command("display this notice") - def command_help(self): - sys.stdout.write("Available commands:\n") - for f in self._command_help: - sys.stdout.write(' %s\n' % f) - register_command = staticmethod(register_command) command = staticmethod(command)