have all_metadata walk transitive closure of inheriting links

This commit is contained in:
Chris Forbes 2013-07-25 11:12:40 +12:00
parent 2c8e836a81
commit 14b3fdb193
2 changed files with 22 additions and 3 deletions

View file

@ -7,7 +7,13 @@ class Record(models.Model):
@property @property
def all_metadata(self): def all_metadata(self):
return self.metadata result = {}
for l in self.out_links.filter(inherit=True):
result.update(l.link_to.all_metadata)
result.update(self.metadata)
return result
class Link(models.Model): class Link(models.Model):
link_from = models.ForeignKey(Record, related_name='out_links') link_from = models.ForeignKey(Record, related_name='out_links')

View file

@ -25,7 +25,7 @@ class RecordTests(TestCase):
d = self.r.all_metadata d = self.r.all_metadata
self.assertEqual(d['ex:llama_id'], 42) self.assertEqual(d['ex:llama_id'], 42)
def test_metadata_one_record_noinherit(self): def test_metadata_noinherit(self):
# this should work the same way. # this should work the same way.
l = Link.objects.create( l = Link.objects.create(
link_from=self.r, link_from=self.r,
@ -36,4 +36,17 @@ class RecordTests(TestCase):
d = self.r.all_metadata d = self.r.all_metadata
self.assertEqual(d['ex:llama_id'], 42) self.assertEqual(d['ex:llama_id'], 42)
self.assertNotIn('ex:related_to', d) self.assertNotIn('ex:another_property', d)
def test_metadata_inherit(self):
# these records are linked, and marked to inherit prefixless.
l = Link.objects.create(
link_from=self.r,
link_to=self.q,
label='ex:related_to',
inherit=True)
d = self.r.all_metadata
self.assertEqual(d['ex:llama_id'], 42)
self.assertEqual(d['ex:another_property'], 23)