diff --git a/api/patch_request.py b/api/patch_request.py index 5af46513743d3094b1e685b03734102cb8eace27..6c6ad789130736524442ea3e7f9626cfbb4c29df 100644 --- a/api/patch_request.py +++ b/api/patch_request.py @@ -295,6 +295,47 @@ def validate_patch_request_actions(conn, user, actions: list[APIPatchRequestActi r_name=inner_port['name'], ) + full_path_ta = [ + { + "name": "nd.p_port.list", + "idx": "orig_start_port", + "old": { + "gpk": "8af344b1-5529-4ff3-a0e7-060b0343bb3f" + } + }, + { + "name": "nd.p_port.list", + "idx": "inner_start_port", + "inner_join_ref": { + "orig_start_port": "api_fkey_nd_p_port_conn_int" + } + }, + { + "name": "nd.p_port.list", + "idx": "start_ports", + "union_join_ref": { + "orig_start_port": "self", + "inner_start_port": "self" + } + }, + { + "name": "nd.p_port.list", + "idx": "all_ports", + "inner_join_ref": { + "start_ports": "api_func_nd_p_port_is_contained_by_conn_id_gfk_list" + } + } + ] + full_path_result = execute_wapi_function(conn, full_path_ta, superuser=True) + + path_port_list = [] + if len(full_path_result['all_ports']) > 0: + path_order = full_path_result['all_ports'][0]['connection_id_gfk_list'] + all_ports = map_array_of_dicts(full_path_result['all_ports'], lambda p: p.get('gpk')) + for p_gpk in path_order: + path_port_list.append(all_ports.get(p_gpk, {'gpk': None})) + internal_action.raw_path = path_port_list + internal_action.p_port = Port(**r['port_list'][0]) internal_action.module = Module(**r['module_list'][0]) internal_action.room = Room(**r['room_list'][0]) diff --git a/model/patch_request.py b/model/patch_request.py index 8f7373f53552c9c8d168212f7af4788d62b6f216..16d1f64e5ffeca9c6c0a8862e19e43fe08d9bf9e 100644 --- a/model/patch_request.py +++ b/model/patch_request.py @@ -46,6 +46,7 @@ class PatchRequestAction(BaseModel): new_insert_type: Optional[str] = Field(default=None) new_insert_assignment: list[APIInsertBCDAssignment] = Field(default=[]) vlan_ids: list[str] = Field(default=[]) + raw_path: Optional[list[dict]] = Field(default=None) class PatchRequestFormRequest(BaseModel):