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,
|
_connected_poweroutlet__power_port__in=downstream_powerports,
|
||||||
)
|
)
|
||||||
|
|
||||||
poweroutlet.upstream_powerports.set(upstream_powerports)
|
poweroutlet._upstream_powerports.set(upstream_powerports)
|
||||||
poweroutlet.downstream_powerports.set(downstream_powerports)
|
poweroutlet._downstream_powerports.set(downstream_powerports)
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
@ -61,13 +61,13 @@ class Migration(migrations.Migration):
|
|||||||
operations = [
|
operations = [
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='poweroutlet',
|
model_name='poweroutlet',
|
||||||
name='downstream_powerports',
|
name='_downstream_powerports',
|
||||||
field=models.ManyToManyField(blank=True, related_name='upstream_poweroutlets', to='dcim.PowerPort'),
|
field=models.ManyToManyField(blank=True, related_name='_upstream_poweroutlets', to='dcim.PowerPort'),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='poweroutlet',
|
model_name='poweroutlet',
|
||||||
name='upstream_powerports',
|
name='_upstream_powerports',
|
||||||
field=models.ManyToManyField(blank=True, related_name='downstream_poweroutlets', to='dcim.PowerPort'),
|
field=models.ManyToManyField(blank=True, related_name='_downstream_poweroutlets', to='dcim.PowerPort'),
|
||||||
),
|
),
|
||||||
migrations.RunPython(
|
migrations.RunPython(
|
||||||
code=update_related_powerports,
|
code=update_related_powerports,
|
||||||
|
@ -403,7 +403,7 @@ class PowerPort(CableTermination, ComponentModel):
|
|||||||
def _stats():
|
def _stats():
|
||||||
# Power ports drawing power from the local outlets
|
# Power ports drawing power from the local outlets
|
||||||
return PowerPort.objects.filter(
|
return PowerPort.objects.filter(
|
||||||
pk__in=outlets.values_list('downstream_powerports', flat=True),
|
pk__in=outlets.values_list('_downstream_powerports', flat=True),
|
||||||
).aggregate(
|
).aggregate(
|
||||||
Sum('allocated_draw'),
|
Sum('allocated_draw'),
|
||||||
Sum('maximum_draw'),
|
Sum('maximum_draw'),
|
||||||
@ -489,14 +489,14 @@ class PowerOutlet(CableTermination, ComponentModel):
|
|||||||
choices=CONNECTION_STATUS_CHOICES,
|
choices=CONNECTION_STATUS_CHOICES,
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
downstream_powerports = models.ManyToManyField(
|
_downstream_powerports = models.ManyToManyField(
|
||||||
to='dcim.PowerPort',
|
to='dcim.PowerPort',
|
||||||
related_name='upstream_poweroutlets',
|
related_name='_upstream_poweroutlets',
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
upstream_powerports = models.ManyToManyField(
|
_upstream_powerports = models.ManyToManyField(
|
||||||
to='dcim.PowerPort',
|
to='dcim.PowerPort',
|
||||||
related_name='downstream_poweroutlets',
|
related_name='_downstream_poweroutlets',
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
tags = TaggableManager(through=TaggedItem)
|
tags = TaggableManager(through=TaggedItem)
|
||||||
@ -581,15 +581,15 @@ class PowerOutlet(CableTermination, ComponentModel):
|
|||||||
upstream_powerports = self.calculate_upstream_powerports()
|
upstream_powerports = self.calculate_upstream_powerports()
|
||||||
downstream_powerports = self.calculate_downstream_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)
|
new_parents = PowerOutlet.objects.filter(connected_endpoint__in=upstream_powerports)
|
||||||
|
|
||||||
for outlet in old_parents | new_parents:
|
for outlet in old_parents | new_parents:
|
||||||
outlet.upstream_powerports.set(outlet.calculate_upstream_powerports())
|
outlet._upstream_powerports.set(outlet.calculate_upstream_powerports())
|
||||||
outlet.downstream_powerports.set(outlet.calculate_downstream_powerports())
|
outlet._downstream_powerports.set(outlet.calculate_downstream_powerports())
|
||||||
|
|
||||||
self.upstream_powerports.set(self.calculate_upstream_powerports())
|
self._upstream_powerports.set(self.calculate_upstream_powerports())
|
||||||
self.downstream_powerports.set(self.calculate_downstream_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
|
# 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.
|
# 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_outlet12._downstream_powerports.count(), 1)
|
||||||
self.assertEqual(self.power_outlet13.downstream_powerports.count(), 4)
|
self.assertEqual(self.power_outlet13._downstream_powerports.count(), 4)
|
||||||
self.assertEqual(self.power_outlet34.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_outlet41._downstream_powerports.count(), 4)
|
||||||
|
|
||||||
# When a loop-causing cable is removed, the downstream_powerports of the other outlets in the loop should be
|
# 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
|
# updated appropriately. This test is necessary because, in a loop, each outlet is upstream and downstream of
|
||||||
# every other outlet in that loop.
|
# every other outlet in that loop.
|
||||||
loop_cable.delete()
|
loop_cable.delete()
|
||||||
|
|
||||||
self.assertEqual(self.power_outlet12.downstream_powerports.count(), 1)
|
self.assertEqual(self.power_outlet12._downstream_powerports.count(), 1)
|
||||||
self.assertEqual(self.power_outlet13.downstream_powerports.count(), 2)
|
self.assertEqual(self.power_outlet13._downstream_powerports.count(), 2)
|
||||||
self.assertEqual(self.power_outlet34.downstream_powerports.count(), 1)
|
self.assertEqual(self.power_outlet34._downstream_powerports.count(), 1)
|
||||||
self.assertEqual(self.power_outlet41.downstream_powerports.count(), 0)
|
self.assertEqual(self.power_outlet41._downstream_powerports.count(), 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user