Source code for policy_inspector.model.address_group

from typing import ClassVar

from pydantic import Field

from policy_inspector.model.base import MainModel, SetStr


[docs] class AddressGroup(MainModel): singular: ClassVar[str] = "Address Group" plural: ClassVar[str] = "Address Groups" name: str = Field(..., description="Name of the address group.") description: str = Field(default="") tag: SetStr = Field(default_factory=set) static: SetStr = Field(default_factory=set)
[docs] @classmethod def parse_json(cls, elements: list[dict]) -> list["AddressGroup"]: """Map a JSON object to an AddressGroup.""" mapping = {"@name": "name"} list_fields = ("tag", "static") address_groups = [] for data in elements: parsed = {} for key, value in data.items(): mapped_key = mapping.get(key, key) key_value = value if mapped_key in list_fields: members = key_value.get("member", []) key_value = set(members) if members else set() parsed[mapped_key] = key_value address_groups.append(cls(**parsed)) return address_groups
[docs] @classmethod def parse_csv(cls, elements: list[dict]) -> list["AddressGroup"]: """Map a JSON object to an AddressObject.""" mapping = {"Name": "name", "Addresses": "static", "Tags": "tag"} list_fields = ("tag", "static") address_groups = [] for data in elements: parsed = {} for key, value in data.items(): mapped_key = mapping.get(key, key) if not mapped_key: continue key_value = value if mapped_key in list_fields: key_value = set(value.split(";")) if value else set() parsed[mapped_key] = key_value address_groups.append(cls(**parsed)) return address_groups