Models

from typing import Any, Dict, List, Literal, Optional, Union

Solution = Literal[
    "cellulargateway",
    "common",
    "mobility",
    "nfvirtual",
    "sd-routing",
    "sdwan",
    "service-insertion",
]

ProfileType = Literal["global"]

PolicyGroupSolution = Literal["sd-routing", "sdwan"]


class FeatureProfile:
    """
    List of devices UUIDs associated with this group
    """

    # Name of the feature Profile. Must be unique.
    name: str
    # Solution of the feature Profile.
    solution: str
    # Type of the feature Profile.
    type_: str
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # Description of the feature Profile.
    description: Optional[str]
    # System generated unique identifier of the feature profile in UUID format.
    id: Optional[str]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    # Number of Parcels attached with Feature Profile
    profile_parcel_count: Optional[int]


class PolicyGroup:
    # Name of the  Group. Must be unique.
    name: str
    # Specify one of the device platform solution
    solution: Solution  # pytype: disable=annotation-type-mismatch
    #  Group Deployment state
    state: str
    #  Group Version Flag
    version: int
    copy_info: Optional[str]
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # Description of the  Group.
    description: Optional[str]
    devices: Optional[List[str]]
    # System generated unique identifier of the  Group in UUID format.
    id: Optional[str]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    number_of_devices: Optional[int]
    number_of_devices_up_to_date: Optional[int]
    origin: Optional[str]
    origin_info: Optional[Dict[str, str]]
    # List of devices UUIDs associated with this group
    profiles: Optional[List[FeatureProfile]]
    # Source of group
    source: Optional[str]


class ProfileObjDef:
    id: str
    profile_type: ProfileType


class CreatePolicyGroupPostResponse:
    """
    Policy Group POST Response schema
    """

    id: str
    # This is the documentation for POST response schema for policy group.
    documentation: Optional[Any]
    # (Optional - only applicable for AON) List of profile ids that belongs to the policy group
    profiles: Optional[List[ProfileObjDef]]


class ProfileIdObjDef:
    id: str


class FromPolicyGroupDef:
    copy: str


class CreatePolicyGroupPostRequest:
    """
    Policy Group POST Request schema
    """

    description: str
    name: str
    solution: PolicyGroupSolution  # pytype: disable=annotation-type-mismatch
    # This is the documentation for POST request api schema for policy group
    documentation: Optional[Any]
    from_policy_group: Optional[FromPolicyGroupDef]
    # list of profile ids that belongs to the policy group
    profiles: Optional[List[ProfileIdObjDef]]


class PolicyGroupProfileObjDef:
    id: str
    profile_type: ProfileType


class EditPolicyGroupPutResponse:
    """
    Policy Group PUT Response schema
    """

    id: str
    # This is the documentation for PUT response schema for Policy group.
    documentation: Optional[Any]
    # (Optional - only applicable for AON) List of profile ids that belongs to the Policy group
    profiles: Optional[List[PolicyGroupProfileObjDef]]


class PolicyGroupProfileIdObjDef:
    id: str


class EditPolicyGroupPutRequest:
    """
    Policy Group PUT Request schema
    """

    description: str
    name: str
    solution: PolicyGroupSolution  # pytype: disable=annotation-type-mismatch
    # This is the documentation for PUT request api schema for policy group
    documentation: Optional[Any]
    # list of profile ids that belongs to the policy group
    profiles: Optional[List[PolicyGroupProfileIdObjDef]]