mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 00:28:16 -06:00
Privatized the cached fields (to assist with #4227)
This commit is contained in:
parent
6fa80bd971
commit
991c9b8f0a
@ -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,
|
||||
|
@ -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())
|
||||
|
||||
|
||||
#
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user