have all_metadata walk transitive closure of inheriting links
This commit is contained in:
parent
2c8e836a81
commit
14b3fdb193
2 changed files with 22 additions and 3 deletions
|
|
@ -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')
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue