Add config and fix sesson handling.
Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
This commit is contained in:
parent
8b7821bcb0
commit
e3743dd6da
|
|
@ -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
|
||||||
|
|
@ -4,16 +4,16 @@ import asyncio
|
||||||
from logbook import Logger
|
from logbook import Logger
|
||||||
from sqlalchemy.orm import joinedload
|
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__)
|
logger = Logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Consumer:
|
class Consumer:
|
||||||
def __init__(self, wallabag, session, sender, interval=30):
|
def __init__(self, wallabag, cfg, sender):
|
||||||
self.wallabag = wallabag
|
self.wallabag = wallabag
|
||||||
self.session = session
|
self.session = session_maker(cfg.db_uri)()
|
||||||
self.interval = interval
|
self.interval = cfg.consume_interval
|
||||||
self.sender = sender
|
self.sender = sender
|
||||||
self.running = True
|
self.running = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,11 +33,11 @@ class Job(Base):
|
||||||
format = Column(Enum('pdf', 'mobi'))
|
format = Column(Enum('pdf', 'mobi'))
|
||||||
|
|
||||||
|
|
||||||
def make_session(uri):
|
def session_maker(uri):
|
||||||
Session = sessionmaker(autocommit=False,
|
Session = sessionmaker(autocommit=False,
|
||||||
autoflush=False,
|
autoflush=False,
|
||||||
bind=create_engine(uri))
|
bind=create_engine(uri))
|
||||||
return scoped_session(Session)
|
return Session
|
||||||
|
|
||||||
|
|
||||||
def re_create_db(uri):
|
def re_create_db(uri):
|
||||||
|
|
|
||||||
|
|
@ -3,17 +3,16 @@ from datetime import datetime, timedelta
|
||||||
|
|
||||||
from logbook import Logger
|
from logbook import Logger
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
|
from .models import User, session_maker
|
||||||
from wallabag_kindle_consumer.models import User
|
|
||||||
|
|
||||||
logger = Logger(__name__)
|
logger = Logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Refresher:
|
class Refresher:
|
||||||
def __init__(self, session, wallabag):
|
def __init__(self, config, wallabag):
|
||||||
self.session = session
|
self.session = session_maker(config.db_uri)()
|
||||||
self.wallabag = wallabag
|
self.wallabag = wallabag
|
||||||
self.grace = 120
|
self.grace = config.refresh_grace
|
||||||
|
|
||||||
def _wait_time(self):
|
def _wait_time(self):
|
||||||
next = self.session.query(func.min(User.token_valid).label("min")).first()
|
next = self.session.query(func.min(User.token_valid).label("min")).first()
|
||||||
|
|
@ -36,6 +35,7 @@ class Refresher:
|
||||||
await asyncio.gather(*refreshes)
|
await asyncio.gather(*refreshes)
|
||||||
|
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
|
self.session.remove()
|
||||||
|
|
||||||
async def _refresh_user(self, user):
|
async def _refresh_user(self, user):
|
||||||
logger.info("Refresh token for {}", user.name)
|
logger.info("Refresh token for {}", user.name)
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ class Wallabag:
|
||||||
user.auth_token = data["access_token"]
|
user.auth_token = data["access_token"]
|
||||||
user.refresh_token = data["refresh_token"]
|
user.refresh_token = data["refresh_token"]
|
||||||
user.token_valid = datetime.utcnow() + timedelta(seconds=data["expires_in"])
|
user.token_valid = datetime.utcnow() + timedelta(seconds=data["expires_in"])
|
||||||
|
logger.info("Got new token for {}", user.name)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
@ -86,6 +87,9 @@ class Wallabag:
|
||||||
return self.url + url
|
return self.url + url
|
||||||
|
|
||||||
async def fetch_entries(self, user):
|
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:
|
async with aiohttp.ClientSession() as session:
|
||||||
for tag in self.tags:
|
for tag in self.tags:
|
||||||
params = self._api_params(user, {"tags": tag.tag})
|
params = self._api_params(user, {"tags": tag.tag})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue