Skip to content
Snippets Groups Projects
Verified Commit 10b134d2 authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

Implement feedback for GÉANT IP input form

parent d4056c6a
No related branches found
No related tags found
1 merge request!286Add Edge Port, GÉANT IP and IAS products
This commit is part of merge request !286. Comments created here will be created in the context of that merge request.
...@@ -25,7 +25,7 @@ from gso.utils.helpers import ( ...@@ -25,7 +25,7 @@ from gso.utils.helpers import (
partner_choice, partner_choice,
) )
from gso.utils.shared_enums import APType, SBPType from gso.utils.shared_enums import APType, SBPType
from gso.utils.types.ip_address import IPv4AddressType, IPv6AddressType from gso.utils.types.ip_address import IPAddress, IPv4AddressType, IPv6AddressType
from gso.utils.types.tt_number import TTNumber from gso.utils.types.tt_number import TTNumber
...@@ -44,14 +44,19 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -44,14 +44,19 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
edge_port: active_edge_port_selector(partner_id=initial_user_input.partner) # type: ignore[valid-type] edge_port: active_edge_port_selector(partner_id=initial_user_input.partner) # type: ignore[valid-type]
ap_type: APType ap_type: APType
def __hash__(self) -> int: def validate_edge_ports_are_unique(edge_ports: list[EdgePortSelection]) -> list[EdgePortSelection]:
return self.edge_port.__hash__() """Verify if interfaces are unique."""
port_names = [port.edge_port for port in edge_ports]
if len(port_names) != len(set(port_names)):
msg = "Edge Ports must be unique."
raise ValueError(msg)
return edge_ports
class EdgePortSelectionForm(FormPage): class EdgePortSelectionForm(FormPage):
model_config = ConfigDict(title=f"{product_name} - Select Edge Ports") model_config = ConfigDict(title=f"{product_name} - Select Edge Ports")
info_label: Label = "Please select the Edge Ports where this GÉANT IP service will terminate" info_label: Label = "Please select the Edge Ports where this GÉANT IP service will terminate"
edge_ports: Annotated[list[EdgePortSelection], AfterValidator(validate_unique_list)] edge_ports: Annotated[list[EdgePortSelection], AfterValidator(validate_edge_ports_are_unique)]
selected_edge_ports = yield EdgePortSelectionForm selected_edge_ports = yield EdgePortSelectionForm
ep_list = selected_edge_ports.edge_ports ep_list = selected_edge_ports.edge_ports
...@@ -60,21 +65,23 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -60,21 +65,23 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
binding_port_inputs = [] binding_port_inputs = []
while current_ep_index < total_ep_count: while current_ep_index < total_ep_count:
current_edge_port_description = EdgePort.from_subscription(ep_list[current_ep_index].edge_port).description current_edge_port = EdgePort.from_subscription(ep_list[current_ep_index].edge_port)
class BindingPortsInputForm(FormPage): class BindingPortsInputForm(FormPage):
model_config = ConfigDict( model_config = ConfigDict(
title=f"{product_name} - Configure Service Binding Ports ({current_ep_index + 1}/{total_ep_count})" title=f"{product_name} - Configure Service Binding Ports ({current_ep_index + 1}/{total_ep_count})"
) )
info_label: Label = "Please configure the Service Binding Ports for each Edge Port." info_label: Label = "Please configure the Service Binding Ports for each Edge Port."
current_ep_label: Label = f"Currently configuring on {current_edge_port_description}" current_ep_label: Label = (
f"Currently configuring on {current_edge_port.description} "
f"(Access Port type: {ep_list[current_ep_index].ap_type})"
)
geant_sid: str geant_sid: str
is_tagged: bool = False is_tagged: bool = False
sbp_type: SBPType vlan_id: VLAN_ID
vlan_id: VLAN_ID | None ipv4_address: IPv4AddressType
ipv4_address: IPv4AddressType | None = None ipv6_address: IPv6AddressType
ipv6_address: IPv6AddressType | None = None
custom_firewall_filters: bool = False custom_firewall_filters: bool = False
divider: Divider divider: Divider
bgp_peer_count: PositiveInt = 1 bgp_peer_count: PositiveInt = 1
...@@ -90,11 +97,11 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -90,11 +97,11 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
class BGPPeerForm(FormPage): class BGPPeerForm(FormPage):
model_config = ConfigDict( model_config = ConfigDict(
title=( title=(
f"Configure BGP peers for {current_edge_port_description} - " f"Configure BGP peers for {current_edge_port.description} - "
f"({bgp_peer_index + 1}/{binding_port_input_form.bgp_peer_count})" f"({bgp_peer_index + 1}/{binding_port_input_form.bgp_peer_count})"
) )
) )
peer_address: IPv4AddressType | IPv6AddressType peer_address: IPAddress
bfd_enabled: bool = False bfd_enabled: bool = False
bfd_interval: int | None = None bfd_interval: int | None = None
bfd_multiplier: int | None = None bfd_multiplier: int | None = None
...@@ -109,6 +116,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -109,6 +116,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
bgp_peers.append(bgp_peer_input_form.model_dump()) bgp_peers.append(bgp_peer_input_form.model_dump())
binding_port_input["bgp_peers"] = bgp_peers binding_port_input["bgp_peers"] = bgp_peers
binding_port_input["sbp_type"] = SBPType.L3
binding_port_inputs.append(binding_port_input) binding_port_inputs.append(binding_port_input)
current_ep_index += 1 current_ep_index += 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment