Models

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

GlobalOptionTypeDef = Literal["global"]


class DnsData:
    target_vpns: Optional[Any]


class Payload1:
    data: DnsData
    description: str
    name: str
    metadata: Optional[Any]


class RefIdDef:
    option_type: GlobalOptionTypeDef
    value: str


class ReferenceDef:
    ref_id: RefIdDef


class BooleanDef:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfDnsServerIpOptionsDef:
    option_type: GlobalOptionTypeDef
    value: Any


class OneOfChildOrgIdOptionsDef:
    option_type: GlobalOptionTypeDef
    # can be empty string
    value: str


class VpnsObjDef:
    option_type: GlobalOptionTypeDef
    value: List[str]


class OneOfUidOptionsDef:
    option_type: GlobalOptionTypeDef
    # An Integer and cannot be empty string
    value: str


class TargetVpns:
    local_domain_bypass_enabled: BooleanDef
    uid: OneOfUidOptionsDef
    umbrella_default: BooleanDef
    vpns: VpnsObjDef
    dns_server_ip: Optional[OneOfDnsServerIpOptionsDef]


class DnsSecurityDnsData:
    dns_crypt: BooleanDef
    match_all_vpn: BooleanDef
    child_org_id: Optional[OneOfChildOrgIdOptionsDef]
    dns_server_ip: Optional[OneOfDnsServerIpOptionsDef]
    local_domain_bypass_enabled: Optional[BooleanDef]
    local_domain_bypass_list: Optional[ReferenceDef]
    # Will be under data field only if matchAllVpn is false, if matchAllVpn is true field should not be in payload
    target_vpns: Optional[List[TargetVpns]]
    umbrella_default: Optional[BooleanDef]


class Payload2:
    data: DnsSecurityDnsData
    description: str
    name: str
    metadata: Optional[Any]


class Data:
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    parcel_id: Optional[str]
    parcel_type: Optional[str]
    # dns profile parcel schema for POST request
    payload: Optional[Union[Payload1, Payload2]]


class GetListSdwanDnsSecurityDnsPayload:
    data: Optional[List[Data]]


class CreateSigSecurityProfileParcelPostResponse:
    """
    Profile Parcel POST Response schema
    """

    parcel_id: str
    metadata: Optional[Any]


class SdwanDnsSecurityDnsData:
    target_vpns: Optional[Any]


class CreateSigSecurityProfileParcelPostRequest1:
    data: SdwanDnsSecurityDnsData
    description: str
    name: str
    metadata: Optional[Any]


class FeatureProfileSdwanDnsSecurityDnsData:
    dns_crypt: BooleanDef
    match_all_vpn: BooleanDef
    child_org_id: Optional[OneOfChildOrgIdOptionsDef]
    dns_server_ip: Optional[OneOfDnsServerIpOptionsDef]
    local_domain_bypass_enabled: Optional[BooleanDef]
    local_domain_bypass_list: Optional[ReferenceDef]
    # Will be under data field only if matchAllVpn is false, if matchAllVpn is true field should not be in payload
    target_vpns: Optional[List[TargetVpns]]
    umbrella_default: Optional[BooleanDef]


class CreateSigSecurityProfileParcelPostRequest2:
    data: FeatureProfileSdwanDnsSecurityDnsData
    description: str
    name: str
    metadata: Optional[Any]


class V1FeatureProfileSdwanDnsSecurityDnsData:
    target_vpns: Optional[Any]


class DnsPayload1:
    data: V1FeatureProfileSdwanDnsSecurityDnsData
    description: str
    name: str
    cg_fp_pp_name_def: Optional[str]
    metadata: Optional[Any]


class DnsRefIdDef:
    option_type: GlobalOptionTypeDef
    value: str


class DnsReferenceDef:
    ref_id: DnsRefIdDef


class DnsOneOfChildOrgIdOptionsDef:
    option_type: GlobalOptionTypeDef
    # can be empty string
    value: str


class DnsOneOfUidOptionsDef:
    option_type: GlobalOptionTypeDef
    # An Integer and cannot be empty string
    value: str


class DnsTargetVpns:
    local_domain_bypass_enabled: BooleanDef
    uid: DnsOneOfUidOptionsDef
    umbrella_default: BooleanDef
    vpns: VpnsObjDef
    dns_server_ip: Optional[OneOfDnsServerIpOptionsDef]


class Data1:
    dns_crypt: BooleanDef
    match_all_vpn: BooleanDef
    child_org_id: Optional[DnsOneOfChildOrgIdOptionsDef]
    dns_server_ip: Optional[OneOfDnsServerIpOptionsDef]
    local_domain_bypass_enabled: Optional[BooleanDef]
    local_domain_bypass_list: Optional[DnsReferenceDef]
    # Will be under data field only if matchAllVpn is false, if matchAllVpn is true field should not be in payload
    target_vpns: Optional[List[DnsTargetVpns]]
    umbrella_default: Optional[BooleanDef]


class DnsPayload2:
    data: Data1
    description: str
    name: str
    cg_fp_pp_name_def: Optional[str]
    metadata: Optional[Any]


class GetSingleSdwanDnsSecurityDnsPayload:
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    parcel_id: Optional[str]
    parcel_type: Optional[str]
    # dns profile parcel schema for PUT request
    payload: Optional[Union[DnsPayload1, DnsPayload2]]


class EditSigSecurityProfileParcelPutResponse:
    """
    Profile Parcel PUT Response schema
    """

    id: str
    metadata: Optional[Any]


class Data2:
    target_vpns: Optional[Any]


class EditSigSecurityProfileParcelPutRequest1:
    data: Data2
    description: str
    name: str
    cg_fp_pp_name_def: Optional[str]
    metadata: Optional[Any]


class DnsSecurityDnsRefIdDef:
    option_type: GlobalOptionTypeDef
    value: str


class DnsSecurityDnsReferenceDef:
    ref_id: DnsSecurityDnsRefIdDef


class DnsSecurityDnsOneOfChildOrgIdOptionsDef:
    option_type: GlobalOptionTypeDef
    # can be empty string
    value: str


class DnsSecurityDnsOneOfUidOptionsDef:
    option_type: GlobalOptionTypeDef
    # An Integer and cannot be empty string
    value: str


class DnsSecurityDnsTargetVpns:
    local_domain_bypass_enabled: BooleanDef
    uid: DnsSecurityDnsOneOfUidOptionsDef
    umbrella_default: BooleanDef
    vpns: VpnsObjDef
    dns_server_ip: Optional[OneOfDnsServerIpOptionsDef]


class Data3:
    dns_crypt: BooleanDef
    match_all_vpn: BooleanDef
    child_org_id: Optional[DnsSecurityDnsOneOfChildOrgIdOptionsDef]
    dns_server_ip: Optional[OneOfDnsServerIpOptionsDef]
    local_domain_bypass_enabled: Optional[BooleanDef]
    local_domain_bypass_list: Optional[DnsSecurityDnsReferenceDef]
    # Will be under data field only if matchAllVpn is false, if matchAllVpn is true field should not be in payload
    target_vpns: Optional[List[DnsSecurityDnsTargetVpns]]
    umbrella_default: Optional[BooleanDef]


class EditSigSecurityProfileParcelPutRequest2:
    data: Data3
    description: str
    name: str
    cg_fp_pp_name_def: Optional[str]
    metadata: Optional[Any]