Mercurial > hg > Feedworm
annotate backend/couchdb/Feed.py @ 155:a05719a6175e
move common functionality into an abstract backend class, have both backends inherit from it. Implement enough of the couchdb backend that reading feeds (and marking feed entries as read) is possible
author | Dirk Olmes <dirk@xanthippe.ping.de> |
---|---|
date | Sat, 27 Aug 2011 08:52:03 +0200 |
parents | b290e29a94b5 |
children | 7d724cf2dcf7 |
rev | line source |
---|---|
139
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
1 |
147
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
2 from couchdb.mapping import BooleanField, DateTimeField, Document, IntegerField, TextField |
144
74217db92993
updating feeds on the couchdb backend works now
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
139
diff
changeset
|
3 from datetime import datetime, timedelta |
139
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
4 |
147
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
5 class Feed(Document): |
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
6 doctype = TextField(default="feed") |
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
7 title = TextField() |
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
8 rss_url = TextField() |
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
9 update_interval = IntegerField(default=60) |
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
10 next_update = DateTimeField() |
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
11 auto_load_entry_link = BooleanField(default=False) |
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
12 always_open_in_browser = BooleanField(default=False) |
136
7217b060b39c
implement a Feed class that can be used to query feed and that wraps view results
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff
changeset
|
13 |
7217b060b39c
implement a Feed class that can be used to query feed and that wraps view results
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff
changeset
|
14 @staticmethod |
7217b060b39c
implement a Feed class that can be used to query feed and that wraps view results
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff
changeset
|
15 def all(database): |
147
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
16 return Feed.view(database, "feedtest/feeds") |
139
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
17 |
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
18 def needsUpdate(self): |
147
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
19 delta = datetime.now() - self.next_update |
139
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
20 return delta.total_seconds() > self._updateIntervalInSeconds() |
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
21 |
147
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
22 def incrementNextUpdateDate(self): |
144
74217db92993
updating feeds on the couchdb backend works now
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
139
diff
changeset
|
23 updateInterval = self._updateIntervalInSeconds() |
74217db92993
updating feeds on the couchdb backend works now
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
139
diff
changeset
|
24 delta = timedelta(seconds=updateInterval) |
147
b290e29a94b5
use couchdb's mapping API instead of manually coding around Rows - much leaner code :-)
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
144
diff
changeset
|
25 self.next_update = self.next_update + delta |
139
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
26 |
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
27 def _updateIntervalInSeconds(self): |
2cd30af937fa
add the required methods for determining if a feed needs to be updated
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
136
diff
changeset
|
28 return self.update_interval * 60 |