annotate backend/sqlalchemy/Feed.py @ 141:6ea813cfac33

pull out common code for updating a feed into an abstract class, have the sqlalchemy backend use that class.
author Dirk Olmes <dirk@xanthippe.ping.de>
date Wed, 24 Aug 2011 10:53:46 +0200
parents a4b2077c9603
children a3c945ce434c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31
5bb57caa8f66 display a feed's entries sorted by their update date
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 17
diff changeset
1
35
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
2 from datetime import datetime, timedelta
31
5bb57caa8f66 display a feed's entries sorted by their update date
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 17
diff changeset
3 import FeedEntry
2
8a624ee48a74 First skeleton for sqlalchemy: define the mapping and create the first feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
4
8a624ee48a74 First skeleton for sqlalchemy: define the mapping and create the first feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
5 class Feed(object):
16
3ffecc709da9 move fetch logic into Feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 7
diff changeset
6 @staticmethod
3ffecc709da9 move fetch logic into Feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 7
diff changeset
7 def all(session):
3ffecc709da9 move fetch logic into Feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 7
diff changeset
8 return session.query(Feed).order_by(Feed.title).all()
99
e59d722439b5 filter out read entries first before sorting
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
9
7
215c34f61e95 Feed.url -> Feed.rss_url
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 4
diff changeset
10 def __init__(self, title, rss_url):
215c34f61e95 Feed.url -> Feed.rss_url
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 4
diff changeset
11 self.title = title
215c34f61e95 Feed.url -> Feed.rss_url
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 4
diff changeset
12 self.rss_url = rss_url
35
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
13 # default: update every 60 minutes
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
14 self.update_interval = 60
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
15 self.incrementNextUpdateDate()
47
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 35
diff changeset
16 self.auto_load_entry_link = False
77
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 61
diff changeset
17 self.always_open_in_browser = False
2
8a624ee48a74 First skeleton for sqlalchemy: define the mapping and create the first feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
18
8a624ee48a74 First skeleton for sqlalchemy: define the mapping and create the first feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
19 def __repr__(self):
7
215c34f61e95 Feed.url -> Feed.rss_url
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 4
diff changeset
20 return "<Feed (%d) %s>" % (self.pk, self.title)
17
5fda8bd94fa8 make the model used to display feeds generic (so it can be used to display FeedEntries, too)
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 16
diff changeset
21
5fda8bd94fa8 make the model used to display feeds generic (so it can be used to display FeedEntries, too)
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 16
diff changeset
22 def userPresentableString(self):
5fda8bd94fa8 make the model used to display feeds generic (so it can be used to display FeedEntries, too)
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 16
diff changeset
23 return self.title
99
e59d722439b5 filter out read entries first before sorting
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
24
61
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 59
diff changeset
25 def entriesSortedByUpdateDate(self, hideReadEntries=False):
99
e59d722439b5 filter out read entries first before sorting
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
26 if hideReadEntries:
e59d722439b5 filter out read entries first before sorting
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
27 sortedEntries = self._unreadEntries()
e59d722439b5 filter out read entries first before sorting
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
28 else:
e59d722439b5 filter out read entries first before sorting
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
29 sortedEntries = list(self.entries)
31
5bb57caa8f66 display a feed's entries sorted by their update date
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 17
diff changeset
30 sortedEntries.sort(FeedEntry.compareByUpdateDate)
35
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
31 return sortedEntries
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
32
99
e59d722439b5 filter out read entries first before sorting
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
33 def _unreadEntries(self):
61
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 59
diff changeset
34 retValue = []
99
e59d722439b5 filter out read entries first before sorting
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
35 for entry in self.entries:
61
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 59
diff changeset
36 if not entry.read:
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 59
diff changeset
37 retValue.append(entry)
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 59
diff changeset
38 return retValue
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 59
diff changeset
39
35
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
40 def incrementNextUpdateDate(self):
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
41 delta = timedelta(minutes=self.update_interval)
aaec263f07ca Feeds manage the point in time when the next update should happen. FeedUpdater only updates feeds that are due.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
42 self.next_update = datetime.now() + delta
56
c82f5538733c add a menu item to mark all entries in a feed as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 47
diff changeset
43
59
daa2731967fe Marking all articles in a feed as read doesn't toggle any more ... it marks all articles as read.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 56
diff changeset
44 def markAllEntriesRead(self):
56
c82f5538733c add a menu item to mark all entries in a feed as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 47
diff changeset
45 for entry in self.entries:
124
a4b2077c9603 editing a feed's properties is implemented through the backend now
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 119
diff changeset
46 entry.markRead()
a4b2077c9603 editing a feed's properties is implemented through the backend now
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 119
diff changeset
47
a4b2077c9603 editing a feed's properties is implemented through the backend now
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 119
diff changeset
48 def takeChangesFrom(self, dict):
a4b2077c9603 editing a feed's properties is implemented through the backend now
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 119
diff changeset
49 for key in dict.keys():
a4b2077c9603 editing a feed's properties is implemented through the backend now
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 119
diff changeset
50 setattr(self, key, dict[key])