Mercurial > hg > Feedworm
annotate backend/couchdb/FeedEntry.py @ 240:1b98925facf6
Bugfix: use the existing _retrieveEntriesForSelectedFeed method to retrieve all articles when deleting a feed
author | Dirk Olmes <dirk@xanthippe.ping.de> |
---|---|
date | Tue, 28 Apr 2015 02:23:44 +0200 |
parents | bb3c851b18b1 |
children | 8e73a8ae863f |
rev | line source |
---|---|
217
bb3c851b18b1
add source file endcoding header
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
192
diff
changeset
|
1 # -*- coding: utf-8 -*- |
171
27be2a5f9c10
use the new ListDateTimeField in FeedEntries to store their creation date
dirk
parents:
169
diff
changeset
|
2 from backend.couchdb.ListDateTimeField import ListDateTimeField |
189
e5d492595bdb
the view returns feed entries for a feed sorted by update date now, no need to do sorting in-memory
dirk
parents:
183
diff
changeset
|
3 from couchdb.mapping import BooleanField, Document, TextField |
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
|
4 from datetime import datetime |
169
91a24f499318
introdue an abstraction for the name of the database so it can be changed via commandline parameter
dirk
parents:
163
diff
changeset
|
5 import CouchDb |
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
|
6 |
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 class FeedEntry(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
|
8 doctype = TextField(default="feedEntry") |
171
27be2a5f9c10
use the new ListDateTimeField in FeedEntries to store their creation date
dirk
parents:
169
diff
changeset
|
9 create_timestamp = ListDateTimeField(default=datetime.now()) |
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
|
10 read = 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
|
11 link = 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
|
12 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
|
13 summary = TextField() |
189
e5d492595bdb
the view returns feed entries for a feed sorted by update date now, no need to do sorting in-memory
dirk
parents:
183
diff
changeset
|
14 updated = ListDateTimeField() |
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
|
15 feed = 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
|
16 |
144
74217db92993
updating feeds on the couchdb backend works now
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff
changeset
|
17 @staticmethod |
74217db92993
updating feeds on the couchdb backend works now
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff
changeset
|
18 def findByLink(link, database): |
169
91a24f499318
introdue an abstraction for the name of the database so it can be changed via commandline parameter
dirk
parents:
163
diff
changeset
|
19 result = FeedEntry.view(database, CouchDb.feedEntryByLink(), key=link) |
163 | 20 try: |
21 return iter(result).next() | |
22 except StopIteration: | |
23 return None | |
144
74217db92993
updating feeds on the couchdb backend works now
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff
changeset
|
24 |
174 | 25 @staticmethod |
26 def getReadFeedEntriesOlderThan(timestamp, database): | |
27 end = [timestamp.year, timestamp.month, timestamp.day, timestamp.hour, timestamp.minute, | |
28 timestamp.second] | |
29 return FeedEntry.view(database, CouchDb.readFeedEntriesByCreateDate(), endkey=end) | |
30 | |
181 | 31 @staticmethod |
183 | 32 def entriesForFeed(feed, database): |
189
e5d492595bdb
the view returns feed entries for a feed sorted by update date now, no need to do sorting in-memory
dirk
parents:
183
diff
changeset
|
33 ''' the definition of the view makes sure that the entries come out sorted by udpate date ''' |
e5d492595bdb
the view returns feed entries for a feed sorted by update date now, no need to do sorting in-memory
dirk
parents:
183
diff
changeset
|
34 viewResults = FeedEntry.view(database, CouchDb.feedEntriesByFeed(), startkey=[feed.id], |
e5d492595bdb
the view returns feed entries for a feed sorted by update date now, no need to do sorting in-memory
dirk
parents:
183
diff
changeset
|
35 endkey=[feed.id, {}]) |
183 | 36 return list(viewResults) |
37 | |
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
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
147
diff
changeset
|
38 def markRead(self, database): |
192
9d422fa90096
optimize marking feed entries as read: do not round trip to the database if the entry was already marked as read
dirk
parents:
189
diff
changeset
|
39 if not self.read: |
9d422fa90096
optimize marking feed entries as read: do not round trip to the database if the entry was already marked as read
dirk
parents:
189
diff
changeset
|
40 self.read = True |
9d422fa90096
optimize marking feed entries as read: do not round trip to the database if the entry was already marked as read
dirk
parents:
189
diff
changeset
|
41 self.store(database) |
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
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
147
diff
changeset
|
42 |
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
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
147
diff
changeset
|
43 def toggleRead(self, database): |
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
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
147
diff
changeset
|
44 if self.read: |
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
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
147
diff
changeset
|
45 self.read = False |
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
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
147
diff
changeset
|
46 else: |
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
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
147
diff
changeset
|
47 self.read = True |
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
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
147
diff
changeset
|
48 self.store(database) |