Source code for flexget.components.rejected.db

from datetime import datetime, timedelta

from loguru import logger
from sqlalchemy import Column, DateTime, ForeignKey, Index, Integer, String, Unicode
from sqlalchemy.orm import relationship

from flexget import db_schema
from flexget.event import event
from flexget.utils.sqlalchemy_utils import table_add_column, table_columns

logger = logger.bind(name='remember_rej')
Base = db_schema.versioned_base('remember_rejected', 3)


@db_schema.upgrade('remember_rejected')
def upgrade(ver, session):
    if ver is None:
        columns = table_columns('remember_rejected_entry', session)
        if 'uid' in columns:
            raise db_schema.UpgradeImpossible
        ver = 0
    if ver == 0:
        logger.info('Adding reason column to remember_rejected_entry table.')
        table_add_column('remember_rejected_entry', 'reason', String, session)
        ver = 1
    if ver == 1:
        logger.info('Adding `added` column to remember_rejected_entry table.')
        table_add_column(
            'remember_rejected_entry', 'added', DateTime, session, default=datetime.now
        )
        ver = 2
    if ver == 2:
        logger.info('Adding expires column to remember_rejected_entry table.')
        table_add_column('remember_rejected_entry', 'expires', DateTime, session)
        ver = 3
    return ver


[docs] class RememberTask(Base): __tablename__ = 'remember_rejected_feeds' id = Column(Integer, primary_key=True) name = Column(Unicode) entries = relationship('RememberEntry', backref='task', cascade='all, delete, delete-orphan')
[docs] class RememberEntry(Base): __tablename__ = 'remember_rejected_entry' id = Column(Integer, primary_key=True) added = Column(DateTime, default=datetime.now) expires = Column(DateTime) title = Column(Unicode) url = Column(String) rejected_by = Column(String) reason = Column(String) task_id = Column('feed_id', Integer, ForeignKey('remember_rejected_feeds.id'), nullable=False)
Index('remember_feed_title_url', RememberEntry.task_id, RememberEntry.title, RememberEntry.url)
[docs] @event('manager.db_cleanup') def db_cleanup(manager, session): # Remove entries older than 30 days result = ( session .query(RememberEntry) .filter(RememberEntry.added < datetime.now() - timedelta(days=30)) .delete() ) if result: logger.verbose('Removed {} entries from remember rejected table.', result)
[docs] def get_rejected(session, count=None, start=None, stop=None, sort_by=None, descending=None): query = session.query(RememberEntry) if count: return query.count() if descending: query = query.order_by(getattr(RememberEntry, sort_by).desc()) else: query = query.order_by(getattr(RememberEntry, sort_by)) return query.slice(start, stop).all()