Handle 1-on-1 patch panels

This commit is contained in:
Sander Steffann 2020-04-21 10:09:26 +02:00 committed by GitHub
parent f80eb16060
commit 85850eb7bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -107,28 +107,31 @@ class CableTermination(models.Model):
# Map a front port to its corresponding rear port # Map a front port to its corresponding rear port
if isinstance(termination, FrontPort): if isinstance(termination, FrontPort):
position_stack.append(termination.rear_port_position)
# Retrieve the corresponding RearPort from database to ensure we have an up-to-date instance # Retrieve the corresponding RearPort from database to ensure we have an up-to-date instance
peer_port = RearPort.objects.get(pk=termination.rear_port.pk) peer_port = RearPort.objects.get(pk=termination.rear_port.pk)
if peer_port.positions > 1:
position_stack.append(termination.rear_port_position)
return peer_port return peer_port
# Map a rear port/position to its corresponding front port # Map a rear port/position to its corresponding front port
elif isinstance(termination, RearPort): elif isinstance(termination, RearPort):
if termination.positions > 1:
# Can't map to a FrontPort without a position
if not position_stack:
# TODO: This behavior is broken. We need a mechanism by which to return all FrontPorts mapped
# to a given RearPort so that we can update end-to-end paths when a cable is created/deleted.
# For now, we're maintaining the current behavior of tracing only to the first FrontPort.
position_stack.append(1)
# Can't map to a FrontPort without a position position = position_stack.pop()
if not position_stack:
# TODO: This behavior is broken. We need a mechanism by which to return all FrontPorts mapped
# to a given RearPort so that we can update end-to-end paths when a cable is created/deleted.
# For now, we're maintaining the current behavior of tracing only to the first FrontPort.
position_stack.append(1)
position = position_stack.pop() # Validate the position
if position not in range(1, termination.positions + 1):
# Validate the position raise Exception("Invalid position for {} ({} positions): {})".format(
if position not in range(1, termination.positions + 1): termination, termination.positions, position
raise Exception("Invalid position for {} ({} positions): {})".format( ))
termination, termination.positions, position else:
)) position = 1
try: try:
peer_port = FrontPort.objects.get( peer_port = FrontPort.objects.get(