@@ -75,12 +75,21 @@ def get_networks(
7575 if shared_only :
7676 filters ["shared" ] = True
7777
78- networks = conn .network .networks (** filters )
78+ server_filters = self ._sanitize_server_filters (filters )
79+ networks = conn .network .networks (** server_filters )
7980
80- return [
81+ results = [
8182 self ._convert_to_network_model (network ) for network in networks
8283 ]
8384
85+ if status_filter :
86+ status_upper = status_filter .upper ()
87+ results = [
88+ n for n in results if (n .status or "" ).upper () == status_upper
89+ ]
90+
91+ return results
92+
8493 def create_network (
8594 self ,
8695 name : str ,
@@ -454,8 +463,17 @@ def get_ports(
454463 filters ["device_id" ] = device_id
455464 if network_id :
456465 filters ["network_id" ] = network_id
457- ports = conn .network .ports (** filters )
458- return [self ._convert_to_port_model (port ) for port in ports ]
466+
467+ server_filters = self ._sanitize_server_filters (filters )
468+ ports = conn .network .ports (** server_filters )
469+
470+ results = [self ._convert_to_port_model (port ) for port in ports ]
471+ if status_filter :
472+ status_upper = status_filter .upper ()
473+ results = [
474+ p for p in results if (p .status or "" ).upper () == status_upper
475+ ]
476+ return results
459477
460478 def get_port_allowed_address_pairs (self , port_id : str ) -> list [dict ]:
461479 """
@@ -896,8 +914,19 @@ def get_routers(
896914 filters ["project_id" ] = project_id
897915 if is_admin_state_up is not None :
898916 filters ["admin_state_up" ] = is_admin_state_up
899- routers = conn .network .routers (** filters )
900- return [self ._convert_to_router_model (r ) for r in routers ]
917+ # Do not pass unsupported filters (e.g., status) to the server.
918+ server_filters = self ._sanitize_server_filters (filters )
919+ routers = conn .network .routers (** server_filters )
920+
921+ router_models = [self ._convert_to_router_model (r ) for r in routers ]
922+ if status_filter :
923+ status_upper = status_filter .upper ()
924+ router_models = [
925+ r
926+ for r in router_models
927+ if (r .status or "" ).upper () == status_upper
928+ ]
929+ return router_models
901930
902931 def create_router (
903932 self ,
@@ -1047,3 +1076,20 @@ def _convert_to_router_model(self, openstack_router) -> Router:
10471076 is_ha = getattr (openstack_router , "is_ha" , None ),
10481077 routes = getattr (openstack_router , "routes" , None ),
10491078 )
1079+
1080+ def _sanitize_server_filters (self , filters : dict ) -> dict :
1081+ """
1082+ Remove unsupported query params before sending to Neutron.
1083+
1084+ Currently removed keys:
1085+ - "status": not universally supported for server-side filtering
1086+
1087+ :param filters: original filter dict
1088+ :return: cleaned filter dict safe for server query
1089+ """
1090+ if not filters :
1091+ return {}
1092+ attrs = dict (filters )
1093+ # Remove client-only or unsupported filters
1094+ attrs .pop ("status" , None )
1095+ return attrs
0 commit comments