From e3743dd6da9862afc14389b002603aa25085f93d Mon Sep 17 00:00:00 2001 From: Jan Losinski Date: Wed, 21 Mar 2018 07:23:02 +0100 Subject: [PATCH] Add config and fix sesson handling. Signed-off-by: Jan Losinski --- wallabag_kindle_consumer/config.py | 6 ++++++ wallabag_kindle_consumer/consumer.py | 8 ++++---- wallabag_kindle_consumer/models.py | 4 ++-- wallabag_kindle_consumer/refresher.py | 10 +++++----- wallabag_kindle_consumer/wallabag.py | 4 ++++ 5 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 wallabag_kindle_consumer/config.py diff --git a/wallabag_kindle_consumer/config.py b/wallabag_kindle_consumer/config.py new file mode 100644 index 0000000..519796a --- /dev/null +++ b/wallabag_kindle_consumer/config.py @@ -0,0 +1,6 @@ +class Config: + + def __init__(self, db_uri, refresh_grace=120, consume_interval=30): + self.db_uri = db_uri + self.refresh_grace = refresh_grace + self.consume_interval = consume_interval \ No newline at end of file diff --git a/wallabag_kindle_consumer/consumer.py b/wallabag_kindle_consumer/consumer.py index e9aeb7d..e819d76 100644 --- a/wallabag_kindle_consumer/consumer.py +++ b/wallabag_kindle_consumer/consumer.py @@ -4,16 +4,16 @@ import asyncio from logbook import Logger from sqlalchemy.orm import joinedload -from wallabag_kindle_consumer.models import User, Job +from wallabag_kindle_consumer.models import User, Job, session_maker logger = Logger(__name__) class Consumer: - def __init__(self, wallabag, session, sender, interval=30): + def __init__(self, wallabag, cfg, sender): self.wallabag = wallabag - self.session = session - self.interval = interval + self.session = session_maker(cfg.db_uri)() + self.interval = cfg.consume_interval self.sender = sender self.running = True diff --git a/wallabag_kindle_consumer/models.py b/wallabag_kindle_consumer/models.py index 6266660..aa7c14f 100644 --- a/wallabag_kindle_consumer/models.py +++ b/wallabag_kindle_consumer/models.py @@ -33,11 +33,11 @@ class Job(Base): format = Column(Enum('pdf', 'mobi')) -def make_session(uri): +def session_maker(uri): Session = sessionmaker(autocommit=False, autoflush=False, bind=create_engine(uri)) - return scoped_session(Session) + return Session def re_create_db(uri): diff --git a/wallabag_kindle_consumer/refresher.py b/wallabag_kindle_consumer/refresher.py index fe71542..3296151 100644 --- a/wallabag_kindle_consumer/refresher.py +++ b/wallabag_kindle_consumer/refresher.py @@ -3,17 +3,16 @@ from datetime import datetime, timedelta from logbook import Logger from sqlalchemy import func - -from wallabag_kindle_consumer.models import User +from .models import User, session_maker logger = Logger(__name__) class Refresher: - def __init__(self, session, wallabag): - self.session = session + def __init__(self, config, wallabag): + self.session = session_maker(config.db_uri)() self.wallabag = wallabag - self.grace = 120 + self.grace = config.refresh_grace def _wait_time(self): next = self.session.query(func.min(User.token_valid).label("min")).first() @@ -36,6 +35,7 @@ class Refresher: await asyncio.gather(*refreshes) self.session.commit() + self.session.remove() async def _refresh_user(self, user): logger.info("Refresh token for {}", user.name) diff --git a/wallabag_kindle_consumer/wallabag.py b/wallabag_kindle_consumer/wallabag.py index 0243e12..766268c 100644 --- a/wallabag_kindle_consumer/wallabag.py +++ b/wallabag_kindle_consumer/wallabag.py @@ -53,6 +53,7 @@ class Wallabag: user.auth_token = data["access_token"] user.refresh_token = data["refresh_token"] user.token_valid = datetime.utcnow() + timedelta(seconds=data["expires_in"]) + logger.info("Got new token for {}", user.name) return True @@ -86,6 +87,9 @@ class Wallabag: return self.url + url async def fetch_entries(self, user): + if user.auth_token is None: + logger.warn("No auth token for {}".format(user.name)) + return async with aiohttp.ClientSession() as session: for tag in self.tags: params = self._api_params(user, {"tags": tag.tag})