flexget.plugins.output_history
Covered: 44 lines
Missed: 14 lines
Skipped 15 lines
Percent: 75 %
 1
from datetime import datetime
 2
from sqlalchemy import Column, String, Integer, DateTime, Unicode, desc
 3
from flexget.manager import Base, Session
 4
from flexget.plugin import register_parser_option, register_plugin
 5
from optparse import SUPPRESS_HELP
 6
from datetime import datetime
 7
import logging
 9
log = logging.getLogger('history')
12
class History(Base):
14
    __tablename__ = 'history'
16
    id = Column(Integer, primary_key=True)
17
    feed = Column(String)
18
    filename = Column(String)
19
    url = Column(String)
20
    title = Column(Unicode)
21
    time = Column(DateTime)
22
    details = Column(String)
24
    def __init__(self):
25
        self.time = datetime.now()
27
    def __str__(self):
28
        return '<History(filename=%s,feed=%s)>' % (self.filename, self.feed)
31
class PluginHistory(object):
33
    """
34
        Provides --history
35
    """
37
    def on_process_start(self, feed):
38
        if feed.manager.options.history:
39
            feed.manager.disable_feeds()
40
            session = Session()
41
            print '-- History: ' + '-' * 67
42
            for item in reversed(session.query(History).order_by(desc(History.time)).limit(50).all()):
43
                print ' Feed    : %s' % item.feed
44
                print ' Title   : %s' % item.title.encode('utf-8')
45
                print ' Url     : %s' % item.url
46
                if item.filename:
47
                    print ' Stored  : %s' % item.filename
48
                print ' Time    : %s' % item.time.strftime("%c")
49
                print ' Details : %s' % item.details
50
                print '-' * 79
51
            session.close()
53
    def on_feed_exit(self, feed):
54
        """Add accepted entries to history"""
56
        for entry in feed.accepted:
57
            item = History()
58
            item.feed = feed.name
59
            item.filename = entry.get('output', None)
60
            item.title = entry['title']
61
            item.url = entry['url']
62
            reason = ''
63
            if 'reason' in entry:
64
                reason = ' (reason: %s)' % entry['reason']
65
            item.details = 'Accepted by %s%s' % (entry.get('accepted_by', '<unknown>'), reason)
66
            feed.session.add(item)
68
register_plugin(PluginHistory, '--history', builtin=True)
69
register_parser_option('--history', action='store_true', dest='history', default=False,
70
                       help='List 50 latest accepted entries.')
71
register_parser_option('--downloads', action='store_true', dest='history', default=False,
72
                       help=SUPPRESS_HELP)