Skip to content
Snippets Groups Projects
Commit fd2b3ef9 authored by Neda Moeini's avatar Neda Moeini
Browse files

Improve the functionality of checking duplicate routers in VRF router list

parent 4b9592a9
No related branches found
No related tags found
1 merge request!314Feature/vrf
Pipeline #90639 passed
...@@ -8,7 +8,8 @@ from orchestrator.types import FormGenerator, State, UUIDstr ...@@ -8,7 +8,8 @@ from orchestrator.types import FormGenerator, State, UUIDstr
from orchestrator.workflow import StepList, begin, done, step, workflow from orchestrator.workflow import StepList, begin, done, step, workflow
from orchestrator.workflows.steps import resync, store_process_subscription, unsync from orchestrator.workflows.steps import resync, store_process_subscription, unsync
from orchestrator.workflows.utils import wrap_modify_initial_input_form from orchestrator.workflows.utils import wrap_modify_initial_input_form
from pydantic import BaseModel, ConfigDict, Field, field_validator from pydantic import AfterValidator, BaseModel, ConfigDict, Field
from pydantic_forms.validators import validate_unique_list
from gso.products.product_types.router import Router from gso.products.product_types.router import Router
from gso.products.product_types.vrf import VRF from gso.products.product_types.vrf import VRF
...@@ -27,22 +28,16 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: ...@@ -27,22 +28,16 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
router_list: Annotated[ router_list: Annotated[
list[RouterSelection], list[RouterSelection],
AfterValidator(validate_unique_list),
Field( Field(
description="A list of routers to add or remove from the VRF.", description="A list of routers to add or remove from the VRF.",
min_length=0 if subscription.vrf.vrf_router_list else 1, min_length=0 if subscription.vrf.vrf_router_list else 1,
json_schema_extra={"uniqueItems": True},
), ),
] = [ # noqa: RUF012 ] = [ # noqa: RUF012
RouterSelection(router_id=str(router.owner_subscription_id)) for router in subscription.vrf.vrf_router_list RouterSelection(router_id=str(router.owner_subscription_id)) for router in subscription.vrf.vrf_router_list
] ]
@field_validator("router_list")
def router_list_must_not_have_duplicates(cls, router_list: list[RouterSelection]) -> list[RouterSelection]:
router_ids = [router.router_id for router in router_list]
if len(router_ids) != len(set(router_ids)):
msg = "Duplicate router IDs found in the list."
raise ValueError(msg)
return router_list
user_input = yield ModifyVRFRouterListForm user_input = yield ModifyVRFRouterListForm
return user_input.model_dump() return user_input.model_dump()
......
...@@ -51,5 +51,5 @@ def test_modify_vrf_router_list_with_duplicate_router_id(vrf_subscription_factor ...@@ -51,5 +51,5 @@ def test_modify_vrf_router_list_with_duplicate_router_id(vrf_subscription_factor
}, },
] ]
with pytest.raises(FormValidationError, match="Duplicate router IDs found in the list."): with pytest.raises(FormValidationError, match="List must be unique"):
run_workflow("modify_vrf_router_list", initial_vrf_data) run_workflow("modify_vrf_router_list", initial_vrf_data)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment