From 1569eb00ee26277fd83e7b0c841b35dd48cd9a01 Mon Sep 17 00:00:00 2001 From: Bezleputh Date: Fri, 13 Mar 2015 16:46:39 +0100 Subject: [PATCH] [feedly] improve login management --- modules/feedly/browser.py | 29 +++++++++++++++++------------ modules/feedly/google.py | 4 ++-- modules/feedly/pages.py | 9 ++++++--- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/modules/feedly/browser.py b/modules/feedly/browser.py index 09cd09f9..4d8dbe4d 100644 --- a/modules/feedly/browser.py +++ b/modules/feedly/browser.py @@ -18,9 +18,10 @@ # along with weboob. If not, see . from weboob.tools.json import json +from weboob.capabilities.base import UserError from weboob.capabilities.collection import Collection from weboob.browser import LoginBrowser, URL, need_login -from .pages import EssentialsPage, TokenPage, ContentsPage, PreferencesPage +from .pages import EssentialsPage, TokenPage, ContentsPage, PreferencesPage, MarkerPage __all__ = ['FeedlyBrowser'] @@ -33,24 +34,27 @@ class FeedlyBrowser(LoginBrowser): token = URL('v3/auth/token', TokenPage) contents = URL('v3/streams/contents', ContentsPage) preferences = URL('v3/preferences', PreferencesPage) - marker = URL('v3/markers') + marker = URL('v3/markers', MarkerPage) def __init__(self, username, password, login_browser, *args, **kwargs): super(FeedlyBrowser, self).__init__(username, password, *args, **kwargs) - self.login_browser = login_browser self.user_id = None + self.login_browser = login_browser def do_login(self): - if self.login_browser.code is None or self.user_id is None: - self.login_browser.do_login() - params = {'code': self.login_browser.code, - 'client_id': 'feedly', - 'client_secret': '0XP4XQ07VVMDWBKUHTJM4WUQ', - 'redirect_uri': 'http://dev.feedly.com/feedly.html', - 'grant_type': 'authorization_code'} + if self.login_browser: + if self.login_browser.code is None or self.user_id is None: + self.login_browser.do_login() + params = {'code': self.login_browser.code, + 'client_id': 'feedly', + 'client_secret': '0XP4XQ07VVMDWBKUHTJM4WUQ', + 'redirect_uri': 'http://dev.feedly.com/feedly.html', + 'grant_type': 'authorization_code'} - token, self.user_id = self.token.go(data=params).get_token() - self.session.headers['X-Feedly-Access-Token'] = token + token, self.user_id = self.token.go(data=params).get_token() + self.session.headers['X-Feedly-Access-Token'] = token + else: + raise UserError(r'You need to fill your username and password to access this page') @need_login def iter_threads(self): @@ -60,6 +64,7 @@ class FeedlyBrowser(LoginBrowser): 'count': '100'} return self.contents.go(params=params).get_articles() + @need_login def get_unread_feed(self, url): params = {'streamId': url, 'backfill': 'true', diff --git a/modules/feedly/google.py b/modules/feedly/google.py index 46884bd8..399846f5 100644 --- a/modules/feedly/google.py +++ b/modules/feedly/google.py @@ -20,11 +20,11 @@ from urlparse import urlparse, parse_qs from weboob.browser import LoginBrowser, URL -from weboob.browser.pages import HTMLPage +from weboob.browser.pages import HTMLPage, LoggedPage from weboob.exceptions import BrowserIncorrectPassword -class GoogleLoginPage(HTMLPage): +class GoogleLoginPage(LoggedPage, HTMLPage): def login(self, login, passwd): form = self.get_form('//form[@id="gaia_loginform"]') form['Email'] = login diff --git a/modules/feedly/pages.py b/modules/feedly/pages.py index 45a14dbd..0e6a859f 100644 --- a/modules/feedly/pages.py +++ b/modules/feedly/pages.py @@ -21,14 +21,14 @@ from datetime import datetime from weboob.capabilities.messages import Message from weboob.capabilities.collection import Collection -from weboob.browser.pages import JsonPage +from weboob.browser.pages import JsonPage, LoggedPage from weboob.browser.elements import ItemElement, DictElement, method from weboob.browser.filters.standard import CleanText, Format from weboob.browser.filters.json import Dict from weboob.browser.filters.html import CleanHTML -class ContentsPage(JsonPage): +class ContentsPage(LoggedPage, JsonPage): @method class get_articles(DictElement): @@ -82,8 +82,11 @@ class EssentialsPage(JsonPage): return feed.get('id') -class PreferencesPage(JsonPage): +class PreferencesPage(LoggedPage, JsonPage): def get_categories(self): for category, value in self.doc.items(): if value in [u"shown", u"hidden"]: yield Collection([u'%s' % category], u'%s' % category.replace('global.', '')) + +class MarkerPage(LoggedPage): + pass