From 906939dea00698b51ee2c9956f6f0dba6f6f5cd7 Mon Sep 17 00:00:00 2001
From: Neda Moeini <neda.moeini@geant.org>
Date: Mon, 4 Nov 2024 13:19:49 +0100
Subject: [PATCH] Update modification WF for L2Circuits.

---
 .../l2_circuit/modify_layer_2_circuit.py      | 71 ++++++++-----------
 1 file changed, 31 insertions(+), 40 deletions(-)

diff --git a/gso/workflows/l2_circuit/modify_layer_2_circuit.py b/gso/workflows/l2_circuit/modify_layer_2_circuit.py
index 899035a8..21b397f1 100644
--- a/gso/workflows/l2_circuit/modify_layer_2_circuit.py
+++ b/gso/workflows/l2_circuit/modify_layer_2_circuit.py
@@ -7,11 +7,12 @@ from orchestrator.types import FormGenerator, UUIDstr
 from orchestrator.workflow import StepList, step
 from orchestrator.workflows.steps import resync, store_process_subscription, unsync
 from orchestrator.workflows.utils import wrap_modify_initial_input_form
-from pydantic import BaseModel, ConfigDict, Field
+from pydantic import ConfigDict, Field
 from pydantic_forms.validators import Divider, Label, ReadOnlyField
 
-from gso.products import Layer2Circuit
 from gso.products.product_blocks.layer_2_circuit import Layer2CircuitType
+from gso.products.product_types.edge_port import EdgePort
+from gso.products.product_types.layer_2_circuit import Layer2Circuit
 from gso.services.partners import get_partner_by_id
 from gso.utils.types.interfaces import BandwidthString
 from gso.utils.types.tt_number import TTNumber
@@ -34,47 +35,37 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
     layer_2_circuit_input = yield ModifyL2CircuitForm
 
-    class ModifyLayer2CircuitSideA(BaseModel):
-        edge_port: ReadOnlyField(subscription.layer_2_circuit.layer_2_circuit_sides[0].sbp.edge_port.edge_port_name,
-                                 default_type=str)
-        geant_sid: ReadOnlyField(subscription.layer_2_circuit.layer_2_circuit_sides[0].sbp.geant_sid, default_type=str)
-        is_tagged: ReadOnlyField(subscription.layer_2_circuit.layer_2_circuit_sides[0].sbp.is_tagged, default_type=bool)
-        vlan_id: ReadOnlyField(subscription.layer_2_circuit.layer_2_circuit_sides[0].sbp.vlan_id, default_type=int)
-        custom_firewall_filters: ReadOnlyField(
-            subscription.layer_2_circuit.layer_2_circuit_sides[0].sbp.custom_firewall_filters, default_type=bool)
-
-    class ModifyLayer2CircuitSideB(BaseModel):
-        edge_port: ReadOnlyField(subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.edge_port.edge_port_name,
-                                 default_type=str)
-        geant_sid: ReadOnlyField(subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.geant_sid, default_type=str)
-        is_tagged: ReadOnlyField(subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.is_tagged, default_type=bool)
-        vlan_id: ReadOnlyField(subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.vlan_id, default_type=int)
-        custom_firewall_filters: ReadOnlyField(
-            subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.custom_firewall_filters, default_type=bool)
-
     class ModifyLayer2CircuitServiceSidesPage(FormPage):
         model_config = ConfigDict(title=f"{product_name} - Configure Edge Ports")
 
+        vlan_range_label: Label = Field("Please set a VLAN range, bounds including.", exclude=True)
         if layer_2_circuit_input.layer_2_circuit_type == Layer2CircuitType.TAGGED:
-            vlan_range_label: Label = Field("Please set a VLAN range, bounds including.", exclude=True)
-            vlan_range_lower_bound: VLAN_ID
-            vlan_range_upper_bound: VLAN_ID
+            vlan_range_lower_bound: VLAN_ID = subscription.layer_2_circuit.vlan_range_lower_bound
+            vlan_range_upper_bound: VLAN_ID = subscription.layer_2_circuit.vlan_range_upper_bound
         else:
             vlan_range_lower_bound: ReadOnlyField(None, default_type=int)
             vlan_range_upper_bound: ReadOnlyField(None, default_type=int)
 
         vlan_divider: Divider = Field(None, exclude=True)
-
         if layer_2_circuit_input.policer_enabled:
-            policer_bandwidth: BandwidthString
+            policer_bandwidth: BandwidthString = subscription.layer_2_circuit.bandwidth
         else:
             policer_bandwidth: ReadOnlyField(None, default_type=str)
-
         policer_divider: Divider = Field(None, exclude=True)
 
-        layer_2_circuit_side_a: ModifyLayer2CircuitSideA
+        layer_2_circuit_side_a: ReadOnlyField(
+            EdgePort.from_subscription(
+                subscription.layer_2_circuit.layer_2_circuit_sides[0].sbp.edge_port.owner_subscription_id
+            ).description,
+            default_type=str,
+        )
         side_divider: Divider = Field(None, exclude=True)
-        layer_2_circuit_side_b: ModifyLayer2CircuitSideB
+        layer_2_circuit_side_b: ReadOnlyField(
+            EdgePort.from_subscription(
+                subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.edge_port.owner_subscription_id
+            ).description,
+            default_type=str,
+        )
 
     layer_2_circuit_sides = yield ModifyLayer2CircuitServiceSidesPage
 
@@ -83,12 +74,12 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
 @step("Update Layer 2 Circuit subscription")
 def modify_layer_2_circuit_subscription(
-        subscription: Layer2Circuit,
-        layer_2_circuit_type: Layer2CircuitType,
-        vlan_range_lower_bound: VLAN_ID | None,
-        vlan_range_upper_bound: VLAN_ID | None,
-        policer_enabled: bool,  # noqa: FBT001
-        policer_bandwidth: BandwidthString | None,
+    subscription: Layer2Circuit,
+    layer_2_circuit_type: Layer2CircuitType,
+    vlan_range_lower_bound: VLAN_ID | None,
+    vlan_range_upper_bound: VLAN_ID | None,
+    policer_enabled: bool,  # noqa: FBT001
+    policer_bandwidth: BandwidthString | None,
 ):
     """Update the Layer 2 Circuit subscription with the new values."""
     subscription.layer_2_circuit.layer_2_circuit_type = layer_2_circuit_type
@@ -108,10 +99,10 @@ def modify_layer_2_circuit_subscription(
 def modify_layer_2_circuit() -> StepList:
     """Modify an existing Layer 2 Circuit service subscription."""
     return (
-            begin
-            >> store_process_subscription(Target.MODIFY)
-            >> unsync
-            >> modify_layer_2_circuit_subscription
-            >> resync
-            >> done
+        begin
+        >> store_process_subscription(Target.MODIFY)
+        >> unsync
+        >> modify_layer_2_circuit_subscription
+        >> resync
+        >> done
     )
-- 
GitLab