Privatized the cached fields (to assist with #4227)

This commit is contained in:
Saria Hajjar 2020-02-21 21:34:21 +00:00
parent 6fa80bd971
commit 991c9b8f0a
3 changed files with 24 additions and 24 deletions

View File

@ -48,8 +48,8 @@ def update_related_powerports(apps, schema_editor):
_connected_poweroutlet__power_port__in=downstream_powerports,
)
poweroutlet.upstream_powerports.set(upstream_powerports)
poweroutlet.downstream_powerports.set(downstream_powerports)
poweroutlet._upstream_powerports.set(upstream_powerports)
poweroutlet._downstream_powerports.set(downstream_powerports)
class Migration(migrations.Migration):
@ -61,13 +61,13 @@ class Migration(migrations.Migration):
operations = [
migrations.AddField(
model_name='poweroutlet',
name='downstream_powerports',
field=models.ManyToManyField(blank=True, related_name='upstream_poweroutlets', to='dcim.PowerPort'),
name='_downstream_powerports',
field=models.ManyToManyField(blank=True, related_name='_upstream_poweroutlets', to='dcim.PowerPort'),
),
migrations.AddField(
model_name='poweroutlet',
name='upstream_powerports',
field=models.ManyToManyField(blank=True, related_name='downstream_poweroutlets', to='dcim.PowerPort'),
name='_upstream_powerports',
field=models.ManyToManyField(blank=True, related_name='_downstream_poweroutlets', to='dcim.PowerPort'),
),
migrations.RunPython(
code=update_related_powerports,

View File

@ -403,7 +403,7 @@ class PowerPort(CableTermination, ComponentModel):
def _stats():
# Power ports drawing power from the local outlets
return PowerPort.objects.filter(
pk__in=outlets.values_list('downstream_powerports', flat=True),
pk__in=outlets.values_list('_downstream_powerports', flat=True),
).aggregate(
Sum('allocated_draw'),
Sum('maximum_draw'),
@ -489,14 +489,14 @@ class PowerOutlet(CableTermination, ComponentModel):
choices=CONNECTION_STATUS_CHOICES,
blank=True
)
downstream_powerports = models.ManyToManyField(
_downstream_powerports = models.ManyToManyField(
to='dcim.PowerPort',
related_name='upstream_poweroutlets',
related_name='_upstream_poweroutlets',
blank=True
)
upstream_powerports = models.ManyToManyField(
_upstream_powerports = models.ManyToManyField(
to='dcim.PowerPort',
related_name='downstream_poweroutlets',
related_name='_downstream_poweroutlets',
blank=True
)
tags = TaggableManager(through=TaggedItem)
@ -581,15 +581,15 @@ class PowerOutlet(CableTermination, ComponentModel):
upstream_powerports = self.calculate_upstream_powerports()
downstream_powerports = self.calculate_downstream_powerports()
old_parents = PowerOutlet.objects.filter(connected_endpoint__in=self.upstream_powerports.all())
old_parents = PowerOutlet.objects.filter(connected_endpoint__in=self._upstream_powerports.all())
new_parents = PowerOutlet.objects.filter(connected_endpoint__in=upstream_powerports)
for outlet in old_parents | new_parents:
outlet.upstream_powerports.set(outlet.calculate_upstream_powerports())
outlet.downstream_powerports.set(outlet.calculate_downstream_powerports())
outlet._upstream_powerports.set(outlet.calculate_upstream_powerports())
outlet._downstream_powerports.set(outlet.calculate_downstream_powerports())
self.upstream_powerports.set(self.calculate_upstream_powerports())
self.downstream_powerports.set(self.calculate_downstream_powerports())
self._upstream_powerports.set(self.calculate_upstream_powerports())
self._downstream_powerports.set(self.calculate_downstream_powerports())
#

View File

@ -708,17 +708,17 @@ class PowerCalculationTestCase(TestCase):
# With a loop in the topology, all of the outlets affected by the loop have the same children. power_outlet12
# is not part of the loop and should only have one child, power_port21.
self.assertEqual(self.power_outlet12.downstream_powerports.count(), 1)
self.assertEqual(self.power_outlet13.downstream_powerports.count(), 4)
self.assertEqual(self.power_outlet34.downstream_powerports.count(), 4)
self.assertEqual(self.power_outlet41.downstream_powerports.count(), 4)
self.assertEqual(self.power_outlet12._downstream_powerports.count(), 1)
self.assertEqual(self.power_outlet13._downstream_powerports.count(), 4)
self.assertEqual(self.power_outlet34._downstream_powerports.count(), 4)
self.assertEqual(self.power_outlet41._downstream_powerports.count(), 4)
# When a loop-causing cable is removed, the downstream_powerports of the other outlets in the loop should be
# updated appropriately. This test is necessary because, in a loop, each outlet is upstream and downstream of
# every other outlet in that loop.
loop_cable.delete()
self.assertEqual(self.power_outlet12.downstream_powerports.count(), 1)
self.assertEqual(self.power_outlet13.downstream_powerports.count(), 2)
self.assertEqual(self.power_outlet34.downstream_powerports.count(), 1)
self.assertEqual(self.power_outlet41.downstream_powerports.count(), 0)
self.assertEqual(self.power_outlet12._downstream_powerports.count(), 1)
self.assertEqual(self.power_outlet13._downstream_powerports.count(), 2)
self.assertEqual(self.power_outlet34._downstream_powerports.count(), 1)
self.assertEqual(self.power_outlet41._downstream_powerports.count(), 0)