havedate inherits boobmsg

This commit is contained in:
Romain Bignon 2012-03-26 16:13:12 +02:00
commit 8d182f8e4e
2 changed files with 21 additions and 78 deletions

View file

@ -25,11 +25,12 @@ from tempfile import NamedTemporaryFile
from weboob.core import CallErrors from weboob.core import CallErrors
from weboob.capabilities.messages import ICapMessages, Message, Thread from weboob.capabilities.messages import ICapMessages, Message, Thread
from weboob.capabilities.account import ICapAccount from weboob.capabilities.account import ICapAccount
from weboob.capabilities.contact import Contact from weboob.capabilities.contact import ICapContact, Contact
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication
from weboob.tools.application.formatters.iformatter import IFormatter from weboob.tools.application.formatters.iformatter import IFormatter
from weboob.tools.misc import html2text from weboob.tools.misc import html2text
__all__ = ['Boobmsg'] __all__ = ['Boobmsg']
@ -167,6 +168,7 @@ class MessagesListFormatter(IFormatter):
result += self.format_message(backend, m, depth) result += self.format_message(backend, m, depth)
return result return result
class ProfileFormatter(IFormatter): class ProfileFormatter(IFormatter):
def flush(self): def flush(self):
pass pass
@ -207,6 +209,7 @@ class ProfileFormatter(IFormatter):
result += u'\t%s\n' % s result += u'\t%s\n' % s
return result return result
class Boobmsg(ReplApplication): class Boobmsg(ReplApplication):
APPNAME = 'boobmsg' APPNAME = 'boobmsg'
VERSION = '0.c' VERSION = '0.c'
@ -214,17 +217,17 @@ class Boobmsg(ReplApplication):
DESCRIPTION = "Console application allowing to send messages on various websites and " \ DESCRIPTION = "Console application allowing to send messages on various websites and " \
"to display message threads and contents." "to display message threads and contents."
CAPS = ICapMessages CAPS = ICapMessages
EXTRA_FORMATTERS = {'msglist': MessagesListFormatter, EXTRA_FORMATTERS = {'msglist': MessagesListFormatter,
'msg': MessageFormatter, 'msg': MessageFormatter,
'xhtml': XHtmlFormatter, 'xhtml': XHtmlFormatter,
'profile' : ProfileFormatter, 'profile' : ProfileFormatter,
} }
COMMANDS_FORMATTERS = {'list': 'msglist', COMMANDS_FORMATTERS = {'list': 'msglist',
'show': 'msg', 'show': 'msg',
'export_thread': 'msg', 'export_thread': 'msg',
'export_all': 'msg', 'export_all': 'msg',
'ls': 'msglist', 'ls': 'msglist',
'profile': 'profile', 'profile': 'profile',
} }
def add_application_options(self, group): def add_application_options(self, group):
@ -423,7 +426,7 @@ class Boobmsg(ReplApplication):
_id, backend_name = self.parse_id(id, unique_backend=True) _id, backend_name = self.parse_id(id, unique_backend=True)
found = 0 found = 0
for backend, contact in self.do('get_contact', _id, backends=backend_name): for backend, contact in self.do('get_contact', _id, backends=backend_name, caps=ICapContact):
if contact: if contact:
self.format(contact) self.format(contact)
found = 1 found = 1

View file

@ -19,58 +19,18 @@
import sys import sys
from copy import copy
import weboob from weboob.core import CallErrors
from weboob.tools.application.repl import ReplApplication from weboob.tools.application.repl import ReplApplication
from weboob.tools.application.formatters.iformatter import IFormatter from weboob.applications.boobmsg import Boobmsg
from weboob.capabilities.dating import ICapDating, OptimizationNotFound from weboob.capabilities.dating import ICapDating, OptimizationNotFound
from weboob.capabilities.contact import Contact
__all__ = ['HaveDate'] __all__ = ['HaveDate']
class ProfileFormatter(IFormatter): class HaveDate(Boobmsg):
def flush(self):
pass
def print_node(self, node, level=1):
result = u''
if node.flags & node.SECTION:
result += u'\t' * level + node.label + '\n'
for sub in node.value.itervalues():
result += self.print_node(sub, level+1)
else:
if isinstance(node.value, (tuple,list)):
value = ', '.join(unicode(v) for v in node.value)
else:
value = node.value
result += u'\t' * level + u'%-20s %s\n' % (node.label + ':', value)
return result
def format_dict(self, item):
result = u'Nickname: %s\n' % item['name']
if item['status'] & Contact.STATUS_ONLINE:
s = 'online'
elif item['status'] & Contact.STATUS_OFFLINE:
s = 'offline'
elif item['status'] & Contact.STATUS_AWAY:
s = 'away'
else:
s = 'unknown'
result += u'Status: %s (%s)\n' % (s, item['status_msg'])
result += u'Photos:\n'
for name, photo in item['photos'].iteritems():
result += u'\t%s%s\n' % (photo, ' (hidden)' if photo.hidden else '')
result += u'Profile:\n'
for head in item['profile'].itervalues():
result += self.print_node(head)
result += u'Description:\n'
for s in item['summary'].split('\n'):
result += u'\t%s\n' % s
return result
class HaveDate(ReplApplication):
APPNAME = 'havedate' APPNAME = 'havedate'
VERSION = '0.c' VERSION = '0.c'
COPYRIGHT = 'Copyright(C) 2010-2012 Romain Bignon' COPYRIGHT = 'Copyright(C) 2010-2012 Romain Bignon'
@ -79,9 +39,8 @@ class HaveDate(ReplApplication):
STORAGE_FILENAME = 'dating.storage' STORAGE_FILENAME = 'dating.storage'
STORAGE = {'optims': {}} STORAGE = {'optims': {}}
CAPS = ICapDating CAPS = ICapDating
EXTRA_FORMATTERS = {'profile': ProfileFormatter} COMMANDS_FORMATTERS = copy(Boobmsg.COMMANDS_FORMATTERS)
COMMANDS_FORMATTERS = {'optim': 'table', COMMANDS_FORMATTERS['optim'] = 'table'
'profile': 'profile'}
def load_default_backends(self): def load_default_backends(self):
self.load_backends(ICapDating, storage=self.create_storage(self.STORAGE_FILENAME)) self.load_backends(ICapDating, storage=self.create_storage(self.STORAGE_FILENAME))
@ -91,7 +50,7 @@ class HaveDate(ReplApplication):
try: try:
self.do('init_optimizations').wait() self.do('init_optimizations').wait()
except weboob.core.CallErrors, e: except CallErrors, e:
self.bcall_errors_handler(e) self.bcall_errors_handler(e)
optimizations = self.storage.get('optims') optimizations = self.storage.get('optims')
@ -100,25 +59,6 @@ class HaveDate(ReplApplication):
return ReplApplication.main(self, argv) return ReplApplication.main(self, argv)
def do_profile(self, id):
"""
profile ID
Display a profile
"""
_id, backend_name = self.parse_id(id, unique_backend=True)
found = 0
for backend, contact in self.do('get_contact', _id, backends=backend_name):
if contact:
self.format(contact)
found = 1
if not found:
self.logger.error(u'Profile not found')
else:
self.flush()
def do_query(self, id): def do_query(self, id):
""" """
query ID query ID
@ -197,7 +137,7 @@ class HaveDate(ReplApplication):
except KeyError: except KeyError:
pass pass
sys.stdout.write('.\n') sys.stdout.write('.\n')
except weboob.core.CallErrors, errors: except CallErrors, errors:
for backend, error, backtrace in errors: for backend, error, backtrace in errors:
if isinstance(error, OptimizationNotFound): if isinstance(error, OptimizationNotFound):
self.logger.error(u'Error(%s): Optimization "%s" not found' % (backend.name, optim_name)) self.logger.error(u'Error(%s): Optimization "%s" not found' % (backend.name, optim_name))