From 14b3fdb1937bd5763cf35add9077d09ec33de39e Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Thu, 25 Jul 2013 11:12:40 +1200 Subject: [PATCH] have all_metadata walk transitive closure of inheriting links --- objrepo/record/models.py | 8 +++++++- objrepo/record/tests.py | 17 +++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/objrepo/record/models.py b/objrepo/record/models.py index 8169e07..c5b134d 100644 --- a/objrepo/record/models.py +++ b/objrepo/record/models.py @@ -7,7 +7,13 @@ class Record(models.Model): @property 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): link_from = models.ForeignKey(Record, related_name='out_links') diff --git a/objrepo/record/tests.py b/objrepo/record/tests.py index 4a76f5e..03932a6 100644 --- a/objrepo/record/tests.py +++ b/objrepo/record/tests.py @@ -25,7 +25,7 @@ class RecordTests(TestCase): d = self.r.all_metadata 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. l = Link.objects.create( link_from=self.r, @@ -36,4 +36,17 @@ class RecordTests(TestCase): d = self.r.all_metadata 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)