diff --git a/weboob/backends/ecrans/backend.py b/weboob/backends/ecrans/backend.py index d3d1ccaf..e09a9669 100644 --- a/weboob/backends/ecrans/backend.py +++ b/weboob/backends/ecrans/backend.py @@ -22,8 +22,9 @@ from __future__ import with_statement from weboob.capabilities.messages import ICapMessages +from weboob.tools.capabilities.messages.GenericBackend import GenericNewspaperBackend from .browser import NewspaperEcransBrowser -from .GenericBackend import GenericNewspaperBackend +from .tools import rssid class NewspaperEcransBackend(GenericNewspaperBackend, ICapMessages): "NewspaperEcransBackend class" @@ -36,5 +37,6 @@ class NewspaperEcransBackend(GenericNewspaperBackend, ICapMessages): DESCRIPTION = u'Ecrans French news website' BROWSER = NewspaperEcransBrowser RSS_FEED = 'http://www.ecrans.fr/spip.php?page=backend' + RSSID = rssid diff --git a/weboob/backends/ecrans/pages/article.py b/weboob/backends/ecrans/pages/article.py index b11ba6c3..58fd2358 100644 --- a/weboob/backends/ecrans/pages/article.py +++ b/weboob/backends/ecrans/pages/article.py @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.genericArticle import GenericNewsPage, remove_from_selector_list, try_remove_from_selector_list, try_drop_tree +from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage, remove_from_selector_list, try_remove_from_selector_list, try_drop_tree class ArticlePage(GenericNewsPage): "ArticlePage object for inrocks" def on_loaded(self): diff --git a/weboob/backends/inrocks/GenericBackend.py b/weboob/backends/inrocks/GenericBackend.py deleted file mode 100644 index b6e43950..00000000 --- a/weboob/backends/inrocks/GenericBackend.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright(C) 2011 Julien Hebert -# -# This file is part of weboob. -# -# weboob is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# weboob is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with weboob. If not, see . - -# python2.5 compatibility -from __future__ import with_statement - -from weboob.capabilities.messages import ICapMessages, Message, Thread -from weboob.tools.backend import BaseBackend -from weboob.tools.newsfeed import Newsfeed -from .tools import rssid - -class GenericNewspaperBackend(BaseBackend, ICapMessages): - "GenericNewspaperBackend class" - MAINTAINER = 'Julien Hebert' - EMAIL = 'juke@free.fr' - VERSION = '0.9' - LICENSE = 'AGPLv3+' - STORAGE = {'seen': {}} - RSS_FEED = None - - def get_thread(self, _id): - if isinstance(_id, Thread): - thread = _id - _id = thread.id - else: - thread = None - - with self.browser: - content = self.browser.get_content(_id) - - if not thread: - thread = Thread(_id) - - flags = Message.IS_HTML - if not thread.id in self.storage.get('seen', default={}): - flags |= Message.IS_UNREAD - thread.title = content.title - if not thread.date: - thread.date = content.date - - thread.root = Message( - thread=thread, - id=0, - title=content.title, - sender=content.author, - receivers=None, - date=thread.date, - parent=None, - content=content.body, - signature='URL: %s' % content.url, - flags=flags, - children= []) - return thread - - def iter_threads(self): - for article in Newsfeed(self.RSS_FEED, rssid).iter_entries(): - thread = Thread(article.id) - thread.title = article.title - thread.date = article.datetime - yield(thread) - - def fill_thread(self, thread): - "fill the thread" - return self.get_thread(thread) - - def iter_unread_messages(self, thread=None): - for thread in self.iter_threads(): - self.fill_thread(thread) - for msg in thread.iter_all_messages(): - if msg.flags & msg.IS_UNREAD: - yield msg - - def set_message_read(self, message): - self.storage.set( - 'seen', - message.thread.id, - 'comments', - self.storage.get( - 'seen', - message.thread.id, - 'comments', - default=[]) + [message.id]) - self.storage.save() diff --git a/weboob/backends/inrocks/backend.py b/weboob/backends/inrocks/backend.py index 015ce1f0..2919a1e6 100644 --- a/weboob/backends/inrocks/backend.py +++ b/weboob/backends/inrocks/backend.py @@ -22,8 +22,9 @@ from __future__ import with_statement from weboob.capabilities.messages import ICapMessages +from weboob.tools.capabilities.messages.GenericBackend import GenericNewspaperBackend from .browser import NewspaperInrocksBrowser -from .GenericBackend import GenericNewspaperBackend +from .tools import rssid class NewspaperInrocksBackend(GenericNewspaperBackend, ICapMessages): "NewspaperInrocksBackend class" @@ -36,4 +37,4 @@ class NewspaperInrocksBackend(GenericNewspaperBackend, ICapMessages): DESCRIPTION = u'Inrock French news website' BROWSER = NewspaperInrocksBrowser RSS_FEED = 'http://www.lesinrocks.com/fileadmin/rss/actus.xml' - + RSSID = rssid diff --git a/weboob/backends/inrocks/pages/article.py b/weboob/backends/inrocks/pages/article.py index 6f0d980a..3a499556 100644 --- a/weboob/backends/inrocks/pages/article.py +++ b/weboob/backends/inrocks/pages/article.py @@ -19,7 +19,7 @@ # along with weboob. If not, see . from weboob.tools.browser import BrokenPageError -from weboob.tools.genericArticle import GenericNewsPage, try_remove, \ +from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage, try_remove, \ try_remove_from_selector_list, \ drop_comments, NoneMainDiv diff --git a/weboob/backends/inrocks/pages/inrockstv.py b/weboob/backends/inrocks/pages/inrockstv.py index bbc89fd9..dceebe2d 100644 --- a/weboob/backends/inrocks/pages/inrockstv.py +++ b/weboob/backends/inrocks/pages/inrockstv.py @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.genericArticle import GenericNewsPage +from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage class InrocksTvPage(GenericNewsPage): "ArticlePage object for inrocks" diff --git a/weboob/backends/lefigaro/GenericBackend.py b/weboob/backends/lefigaro/GenericBackend.py deleted file mode 100644 index b6e43950..00000000 --- a/weboob/backends/lefigaro/GenericBackend.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright(C) 2011 Julien Hebert -# -# This file is part of weboob. -# -# weboob is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# weboob is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with weboob. If not, see . - -# python2.5 compatibility -from __future__ import with_statement - -from weboob.capabilities.messages import ICapMessages, Message, Thread -from weboob.tools.backend import BaseBackend -from weboob.tools.newsfeed import Newsfeed -from .tools import rssid - -class GenericNewspaperBackend(BaseBackend, ICapMessages): - "GenericNewspaperBackend class" - MAINTAINER = 'Julien Hebert' - EMAIL = 'juke@free.fr' - VERSION = '0.9' - LICENSE = 'AGPLv3+' - STORAGE = {'seen': {}} - RSS_FEED = None - - def get_thread(self, _id): - if isinstance(_id, Thread): - thread = _id - _id = thread.id - else: - thread = None - - with self.browser: - content = self.browser.get_content(_id) - - if not thread: - thread = Thread(_id) - - flags = Message.IS_HTML - if not thread.id in self.storage.get('seen', default={}): - flags |= Message.IS_UNREAD - thread.title = content.title - if not thread.date: - thread.date = content.date - - thread.root = Message( - thread=thread, - id=0, - title=content.title, - sender=content.author, - receivers=None, - date=thread.date, - parent=None, - content=content.body, - signature='URL: %s' % content.url, - flags=flags, - children= []) - return thread - - def iter_threads(self): - for article in Newsfeed(self.RSS_FEED, rssid).iter_entries(): - thread = Thread(article.id) - thread.title = article.title - thread.date = article.datetime - yield(thread) - - def fill_thread(self, thread): - "fill the thread" - return self.get_thread(thread) - - def iter_unread_messages(self, thread=None): - for thread in self.iter_threads(): - self.fill_thread(thread) - for msg in thread.iter_all_messages(): - if msg.flags & msg.IS_UNREAD: - yield msg - - def set_message_read(self, message): - self.storage.set( - 'seen', - message.thread.id, - 'comments', - self.storage.get( - 'seen', - message.thread.id, - 'comments', - default=[]) + [message.id]) - self.storage.save() diff --git a/weboob/backends/lefigaro/backend.py b/weboob/backends/lefigaro/backend.py index c261bfcc..e279b7d6 100644 --- a/weboob/backends/lefigaro/backend.py +++ b/weboob/backends/lefigaro/backend.py @@ -22,8 +22,9 @@ from __future__ import with_statement from weboob.capabilities.messages import ICapMessages +from weboob.tools.capabilities.messages.GenericBackend import GenericNewspaperBackend from .browser import NewspaperFigaroBrowser -from .GenericBackend import GenericNewspaperBackend +from .tools import rssid class NewspaperFigaroBackend(GenericNewspaperBackend, ICapMessages): "NewspaperFigaroBackend class" @@ -36,5 +37,6 @@ class NewspaperFigaroBackend(GenericNewspaperBackend, ICapMessages): DESCRIPTION = u'Lefigaro French news website' BROWSER = NewspaperFigaroBrowser RSS_FEED = 'http://rss.lefigaro.fr/lefigaro/laune?format=xml' + RSSID = rssid diff --git a/weboob/backends/lefigaro/pages/article.py b/weboob/backends/lefigaro/pages/article.py index e9b8ed0d..f434a65a 100644 --- a/weboob/backends/lefigaro/pages/article.py +++ b/weboob/backends/lefigaro/pages/article.py @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.genericArticle import GenericNewsPage, remove_from_selector_list, drop_comments, try_drop_tree, try_remove_from_selector_list +from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage, remove_from_selector_list, drop_comments, try_drop_tree, try_remove_from_selector_list class ArticlePage(GenericNewsPage): "ArticlePage object for inrocks" diff --git a/weboob/backends/lefigaro/pages/flashactu.py b/weboob/backends/lefigaro/pages/flashactu.py index 2b2d61c7..2e38633a 100644 --- a/weboob/backends/lefigaro/pages/flashactu.py +++ b/weboob/backends/lefigaro/pages/flashactu.py @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.genericArticle import GenericNewsPage +from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage class FlashActuPage(GenericNewsPage): "ArticlePage object for inrocks" diff --git a/weboob/backends/lefigaro/pages/simple.py b/weboob/backends/lefigaro/pages/simple.py index 44e05ef8..25128135 100644 --- a/weboob/backends/lefigaro/pages/simple.py +++ b/weboob/backends/lefigaro/pages/simple.py @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.genericArticle import GenericNewsPage +from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage class SimplePage(GenericNewsPage): "ArticlePage object for minutes20" diff --git a/weboob/backends/minutes20/GenericBackend.py b/weboob/backends/minutes20/GenericBackend.py deleted file mode 100644 index b6e43950..00000000 --- a/weboob/backends/minutes20/GenericBackend.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright(C) 2011 Julien Hebert -# -# This file is part of weboob. -# -# weboob is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# weboob is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with weboob. If not, see . - -# python2.5 compatibility -from __future__ import with_statement - -from weboob.capabilities.messages import ICapMessages, Message, Thread -from weboob.tools.backend import BaseBackend -from weboob.tools.newsfeed import Newsfeed -from .tools import rssid - -class GenericNewspaperBackend(BaseBackend, ICapMessages): - "GenericNewspaperBackend class" - MAINTAINER = 'Julien Hebert' - EMAIL = 'juke@free.fr' - VERSION = '0.9' - LICENSE = 'AGPLv3+' - STORAGE = {'seen': {}} - RSS_FEED = None - - def get_thread(self, _id): - if isinstance(_id, Thread): - thread = _id - _id = thread.id - else: - thread = None - - with self.browser: - content = self.browser.get_content(_id) - - if not thread: - thread = Thread(_id) - - flags = Message.IS_HTML - if not thread.id in self.storage.get('seen', default={}): - flags |= Message.IS_UNREAD - thread.title = content.title - if not thread.date: - thread.date = content.date - - thread.root = Message( - thread=thread, - id=0, - title=content.title, - sender=content.author, - receivers=None, - date=thread.date, - parent=None, - content=content.body, - signature='URL: %s' % content.url, - flags=flags, - children= []) - return thread - - def iter_threads(self): - for article in Newsfeed(self.RSS_FEED, rssid).iter_entries(): - thread = Thread(article.id) - thread.title = article.title - thread.date = article.datetime - yield(thread) - - def fill_thread(self, thread): - "fill the thread" - return self.get_thread(thread) - - def iter_unread_messages(self, thread=None): - for thread in self.iter_threads(): - self.fill_thread(thread) - for msg in thread.iter_all_messages(): - if msg.flags & msg.IS_UNREAD: - yield msg - - def set_message_read(self, message): - self.storage.set( - 'seen', - message.thread.id, - 'comments', - self.storage.get( - 'seen', - message.thread.id, - 'comments', - default=[]) + [message.id]) - self.storage.save() diff --git a/weboob/backends/minutes20/backend.py b/weboob/backends/minutes20/backend.py index ff049c1b..e71c7ce8 100644 --- a/weboob/backends/minutes20/backend.py +++ b/weboob/backends/minutes20/backend.py @@ -19,8 +19,9 @@ "backend for http://20minutes.fr" from weboob.capabilities.messages import ICapMessages +from weboob.tools.capabilities.messages.GenericBackend import GenericNewspaperBackend from .browser import Newspaper20minutesBrowser -from .GenericBackend import GenericNewspaperBackend +from .tools import rssid class Newspaper20minutesBackend(GenericNewspaperBackend, ICapMessages): "Newspaper20minutesBackend class" @@ -33,4 +34,5 @@ class Newspaper20minutesBackend(GenericNewspaperBackend, ICapMessages): DESCRIPTION = u'20minutes French news website' BROWSER = Newspaper20minutesBrowser RSS_FEED = 'http://www.20minutes.fr/rss/20minutes.xml' + RSSID = rssid diff --git a/weboob/backends/minutes20/pages/article.py b/weboob/backends/minutes20/pages/article.py index 9cee4575..70faa5fa 100644 --- a/weboob/backends/minutes20/pages/article.py +++ b/weboob/backends/minutes20/pages/article.py @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.genericArticle import NoAuthorElement, try_remove, NoneMainDiv +from weboob.tools.capabilities.messages.genericArticle import NoAuthorElement, try_remove, NoneMainDiv from .simple import SimplePage class ArticlePage(SimplePage): diff --git a/weboob/backends/minutes20/pages/simple.py b/weboob/backends/minutes20/pages/simple.py index 3bc4cd59..46d3214d 100644 --- a/weboob/backends/minutes20/pages/simple.py +++ b/weboob/backends/minutes20/pages/simple.py @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.genericArticle import GenericNewsPage +from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage class SimplePage(GenericNewsPage): "ArticlePage object for minutes20" diff --git a/weboob/backends/ecrans/GenericBackend.py b/weboob/tools/capabilities/messages/GenericBackend.py similarity index 96% rename from weboob/backends/ecrans/GenericBackend.py rename to weboob/tools/capabilities/messages/GenericBackend.py index b6e43950..2b3fd26b 100644 --- a/weboob/backends/ecrans/GenericBackend.py +++ b/weboob/tools/capabilities/messages/GenericBackend.py @@ -23,7 +23,6 @@ from __future__ import with_statement from weboob.capabilities.messages import ICapMessages, Message, Thread from weboob.tools.backend import BaseBackend from weboob.tools.newsfeed import Newsfeed -from .tools import rssid class GenericNewspaperBackend(BaseBackend, ICapMessages): "GenericNewspaperBackend class" @@ -33,6 +32,7 @@ class GenericNewspaperBackend(BaseBackend, ICapMessages): LICENSE = 'AGPLv3+' STORAGE = {'seen': {}} RSS_FEED = None + RSSID = None def get_thread(self, _id): if isinstance(_id, Thread): @@ -69,7 +69,7 @@ class GenericNewspaperBackend(BaseBackend, ICapMessages): return thread def iter_threads(self): - for article in Newsfeed(self.RSS_FEED, rssid).iter_entries(): + for article in Newsfeed(self.RSS_FEED, GenericNewspaperBackend.RSSID).iter_entries(): thread = Thread(article.id) thread.title = article.title thread.date = article.datetime diff --git a/weboob/tools/capabilities/messages/__init__.py b/weboob/tools/capabilities/messages/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/weboob/tools/genericArticle.py b/weboob/tools/capabilities/messages/genericArticle.py similarity index 100% rename from weboob/tools/genericArticle.py rename to weboob/tools/capabilities/messages/genericArticle.py