# HG changeset patch # User Filip de Waard # Date 1273640478 -7200 # Node ID d8647e077ada292ed93addac52d56b9e8008e78b # Parent b513a1fbc45f2084a685ec54e271c911dd3edf75 fixed bug with model.Entry replies diff -r b513a1fbc45f2084a685ec54e271c911dd3edf75 -r d8647e077ada292ed93addac52d56b9e8008e78b vix/model/__init__.py --- a/vix/model/__init__.py Mon May 10 06:44:38 2010 +0200 +++ b/vix/model/__init__.py Wed May 12 07:01:18 2010 +0200 @@ -401,7 +401,7 @@ self.store(db) - def store(self, db, silent=False): + def store(self, db, silent=False, _original=True): """Stores the document with a fresh updated value. :arg silent: @@ -418,28 +418,31 @@ #refresh etag/updated time on related feeds for feed_id in self.feeds: Feed().load(db, feed_id).store(db) + + #don't go back and forth between entries + #referring to eachother adding replies + if _original: + #create replies backreferences + original_entry = {'title': self.title, + 'ref': self.id, + 'href': self.get_href(), + 'type': self.content['type']} - #create replies backreferences - reply = {'title': self.title, - 'ref': self.id, - 'href': self.get_href(), - 'type': self.content['type']} - - for irt in self.in_reply_to: - #avoid self referential replies - if not irt['ref'] == self.id: - entry = Entry().load(db, irt['ref']) - - #don't do anything if the entry wasn't found - if entry: - #remove this entry to avoid duplication - entry.replies = [r for r in entry.replies - if not r['ref'] == self.id] - - #add a fresh reference to this entry - entry.replies.append(reply) - entry.store(db, silent=True) - + for irt in self.in_reply_to: + #avoid self referential replies + if not irt['ref'] == self.id: + entry = Entry().load(db, irt['ref']) + + #don't do anything if the entry wasn't found + if entry: + #remove this entry to avoid duplication + entry.replies = [r for r in entry.replies + if not r['ref'] == self.id] + + #add a fresh reference to this entry + entry.replies.append(original_entry) + entry.store(db, silent=True, _original=False) + return super(Entry, self).store(db) def get_href(self): diff -r b513a1fbc45f2084a685ec54e271c911dd3edf75 -r d8647e077ada292ed93addac52d56b9e8008e78b vix/tests/test_models.py --- a/vix/tests/test_models.py Mon May 10 06:44:38 2010 +0200 +++ b/vix/tests/test_models.py Wed May 12 07:01:18 2010 +0200 @@ -542,7 +542,7 @@ r2_r = {'title': reply2.title, 'ref': reply2.id, 'href': reply2.get_href(), 'type': None} - self.assertEquals(e['replies'], [r2_r, r1_r]) + self.assertEquals(e['replies'], [r1_r, r2_r]) self.assertEquals(r1['replies'], [r2_r]) #make sure the updated stamp of the entry that is being replied to @@ -572,7 +572,8 @@ r1 = model.db.get(reply1.id) r2 = model.db.get(reply2.id) - self.assertEquals(r1.in_reply_to, [irt_entry, irt_r2]) + self.assertEquals(r1['in_reply_to'], [irt_entry, irt_r2]) + self.assertEquals(r2['replies'], [r1_r]) def test_Entry_get_href(self): """Test Entry().get_href() method."""