1212 Router ,
1313 RouterInterface ,
1414 SecurityGroup ,
15+ SecurityGroupRule ,
1516 Subnet ,
1617)
1718
@@ -1280,16 +1281,10 @@ def _convert_to_security_group_model(self, openstack_sg) -> SecurityGroup:
12801281 rule_ids : list [str ] | None = None
12811282 rules = getattr (openstack_sg , "security_group_rules" , None )
12821283 if rules is not None :
1283- extracted : list [str ] = []
1284- for r in rules :
1285- rid = None
1286- if isinstance (r , dict ):
1287- rid = r .get ("id" )
1288- else :
1289- rid = getattr (r , "id" , None )
1290- if rid :
1291- extracted .append (str (rid ))
1292- rule_ids = extracted
1284+ dto_rules = [
1285+ self ._convert_to_security_group_rule_model (r ) for r in rules
1286+ ]
1287+ rule_ids = [str (r .id ) for r in dto_rules if getattr (r , "id" , None )]
12931288
12941289 return SecurityGroup (
12951290 id = openstack_sg .id ,
@@ -1299,3 +1294,12 @@ def _convert_to_security_group_model(self, openstack_sg) -> SecurityGroup:
12991294 project_id = getattr (openstack_sg , "project_id" , None ),
13001295 security_group_rule_ids = rule_ids ,
13011296 )
1297+
1298+ def _convert_to_security_group_rule_model (self , rule ) -> SecurityGroupRule :
1299+ """
1300+ Convert an OpenStack Security Group Rule to a SecurityGroupRule DTO.
1301+
1302+ :param rule: OpenStack security group rule object or dict
1303+ :return: Pydantic SecurityGroupRule model
1304+ """
1305+ return SecurityGroupRule .model_validate (rule , from_attributes = True )
0 commit comments